Как prefix caching повторно использует промпты LLM и кэшированные токены
Автоматический перевод
Эта статья была автоматически переведена с оригинальной английской версии.
Prefix caching повторно использует состояние аттеншна из более раннего совместимого префикса промпта. Новый запрос обрабатывает только оставшуюся некэшированную часть, а не повторяет все вычисления промпта. Это помогает в задачах с повторяющимися системными инструкциями, примерами, документами или префиксами диалогов.
Совпадение проверяется по токенам и состоянию модели. Похожие формулировки, повторение текста дальше в промпте или те же токены с другим адаптером не означают допустимого попадания в кэш.
Что должно совпадать
В каузальном трансформере кэшированные ключи и значения токена зависят от предшествующих токенов. Если повторно использовать фрагмент, который повторяется дальше после изменённого предыдущего фрагмента, это приведёт к использованию состояний, зависящих от другого контекста.
| Возможное повторное использование | Что проверить |
|---|---|
| Идентичный системный промпт | Точное совпадение идентификаторов токенов и совместимость состояния модели |
| Повторяющийся документ | Идентичный предшествующий префикс и сам документ |
| Продолжение диалога | Неизменные предыдущие сообщения, шаблон и токены |
| Тот же текст с другим адаптером | Идентичность адаптера и правила совместимости кэша |
| Мультимодальный промпт | Идентичность изображений и медиа, а не только токенов-заполнителей |
Устройство кэша префиксов в vLLM предусматривает хэширование токенов блока, его родительского префикса и дополнительных идентификаторов, таких как LoRA и мультимодальное состояние. Повторно используются полные блоки; неполный последний блок не считается автоматически попаданием в кэш. Соль кэша также позволяет разделять запросы, которые не должны совместно использовать кэшированное состояние.
RadixAttention в SGLang организует префиксы для повторного использования в radix-дереве. Представление отличается, но совместимость состояния префикса по-прежнему необходима.
Измеряйте предотвращённые вычисления префилла
Prefix caching прежде всего позволяет не повторять вычисления промпта. Он не устраняет декодирование и его аттеншн по доступной истории. Экономия вычислений также не означает, что TTFT каждого запроса улучшится: ожидание в очереди и запросы с холодным кэшем остаются.
Отдельно сравнивайте запросы с холодным кэшем и запросы, повторяющийся префикс которых уже находится в кэше. Записывайте число повторно использованных токенов, а не только долю запросов с любым попаданием. Попадание для 32 токенов и попадание для 8,000 токенов позволяют избежать разного объёма вычислений. Измеряйте память, занятую кэшем, вытеснения и латентность в зависимости от длины префикса.
Размещайте стабильные инструкции перед данными конкретного запроса, если такой порядок сохраняет задуманный промпт. Учитывайте совместимость арендаторов и адаптеров в политике кэша. Указывайте состояние кэша при каждой публикации результатов сервинга.
Инженерное руководство: prefix caching связывает механизм повторного использования с выделением памяти KV.