Как prefix caching повторно использует промпты LLM и кэшированные токены

Автоматический перевод

Эта статья была автоматически переведена с оригинальной английской версии.

Prefix caching повторно использует состояние аттеншна из более раннего совместимого префикса промпта. Новый запрос обрабатывает только оставшуюся некэшированную часть, а не повторяет все вычисления промпта. Это помогает в задачах с повторяющимися системными инструкциями, примерами, документами или префиксами диалогов.

Совпадение проверяется по токенам и состоянию модели. Похожие формулировки, повторение текста дальше в промпте или те же токены с другим адаптером не означают допустимого попадания в кэш.

Что должно совпадать

В каузальном трансформере кэшированные ключи и значения токена зависят от предшествующих токенов. Если повторно использовать фрагмент, который повторяется дальше после изменённого предыдущего фрагмента, это приведёт к использованию состояний, зависящих от другого контекста.

Возможное повторное использованиеЧто проверить
Идентичный системный промптТочное совпадение идентификаторов токенов и совместимость состояния модели
Повторяющийся документИдентичный предшествующий префикс и сам документ
Продолжение диалогаНеизменные предыдущие сообщения, шаблон и токены
Тот же текст с другим адаптеромИдентичность адаптера и правила совместимости кэша
Мультимодальный промптИдентичность изображений и медиа, а не только токенов-заполнителей

Устройство кэша префиксов в vLLM предусматривает хэширование токенов блока, его родительского префикса и дополнительных идентификаторов, таких как LoRA и мультимодальное состояние. Повторно используются полные блоки; неполный последний блок не считается автоматически попаданием в кэш. Соль кэша также позволяет разделять запросы, которые не должны совместно использовать кэшированное состояние.

RadixAttention в SGLang организует префиксы для повторного использования в radix-дереве. Представление отличается, но совместимость состояния префикса по-прежнему необходима.

Измеряйте предотвращённые вычисления префилла

Prefix caching прежде всего позволяет не повторять вычисления промпта. Он не устраняет декодирование и его аттеншн по доступной истории. Экономия вычислений также не означает, что TTFT каждого запроса улучшится: ожидание в очереди и запросы с холодным кэшем остаются.

Отдельно сравнивайте запросы с холодным кэшем и запросы, повторяющийся префикс которых уже находится в кэше. Записывайте число повторно использованных токенов, а не только долю запросов с любым попаданием. Попадание для 32 токенов и попадание для 8,000 токенов позволяют избежать разного объёма вычислений. Измеряйте память, занятую кэшем, вытеснения и латентность в зависимости от длины префикса.

Размещайте стабильные инструкции перед данными конкретного запроса, если такой порядок сохраняет задуманный промпт. Учитывайте совместимость арендаторов и адаптеров в политике кэша. Указывайте состояние кэша при каждой публикации результатов сервинга.

Инженерное руководство: prefix caching связывает механизм повторного использования с выделением памяти KV.