Перейти к основному содержимому

For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.

Кэш эмбеддингов

Обзор

Кэш эмбеддингов - это LRU-кэш на стороне CPU, который хранит выходы vision encoder. Когда одно и то же изображение встречается в нескольких запросах, вместо повторного запуска vision encoder используется закэшированный embedding. Это снижает нагрузку на GPU в энкодере и уменьшает задержку для повторяющихся изображений.

Примечание: эту функцию также могут называть encoder cache. Кэш эмбеддингов отделён от KV cache, который повторно использует состояние attention key/value после prefill, чтобы пропустить prefill и сразу перейти к decode. Подробности о повторном использовании и маршрутизации KV cache см. в Multimodal KV Routing.

Когда использовать

Используйте кэш эмбеддингов, когда в вашей нагрузке одни и те же изображения повторяются между запросами. Типичные сценарии:

  • Запросы к каталогу товаров, где пользователи спрашивают про одни и те же изображения продуктов
  • Конвейеры обработки документов, которые ссылаются на общие диаграммы или иллюстрации
  • Чат-сессии, в которых одно и то же изображение обсуждается в нескольких ходах, например архитектурная схема в сценарии code-gen.

Если ваша нагрузка состоит только из уникальных изображений, кэш не даст выигрыша.

Матрица поддержки

БэкендAggregatedDisaggregated (E/PD)Примечания
vLLMAggregated использует нативный для vLLM ec_both; disaggregated использует Dynamo EmbeddingCacheManager
TRT-LLMDynamo MultimodalEmbeddingCacheManager в PD worker
SGLangПока не поддерживается

Для этой поддержки требуется vLLM 0.17.0 или новее.

Как это работает

Prefill worker владеет LRU-кэшем на стороне CPU. При попадании encode worker полностью пропускается. При промахе encode worker создаёт embedding, передаёт его через NIXL, а prefill worker сохраняет его в кэш.

flowchart LR
req[Request] --> check{CPU cache hit?}
check -. hit .-> use[Use cached embedding]
check -- miss --> E[Encode Worker]
E -- embeddings via NIXL --> save[Save to cache]
save --> engine[Inference Engine]
use --> engine

Запуск (vLLM):

cd $DYNAMO_HOME/examples/backends/vllm
bash launch/disagg_multimodal_e_pd.sh --multimodal-embedding-cache-capacity-gb 10

Запуск (TRT-LLM):

cd $DYNAMO_HOME/examples/backends/trtllm
./launch/disagg_e_pd.sh --multimodal-embedding-cache-capacity-gb 10

Конфигурация

ПараметрОписаниеЗначение по умолчанию
--multimodal-embedding-cache-capacity-gbРазмер LRU-кэша на стороне CPU в GB0 (выключено)

Задавайте ёмкость с учётом ожидаемого рабочего набора уникальных изображений. Более крупный кэш хранит больше embedding, но потребляет больше памяти хоста.

Дополнительные сведения см. в документации для конкретного бэкенда (vLLM, TRT-LLM).