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.
Если ваша нагрузка состоит только из уникальных изображений, кэш не даст выигрыша.
Матрица поддержки
| Бэкенд | Aggregated | Disaggregated (E/PD) | Примечания |
|---|---|---|---|
| vLLM | ✅ | ✅ | Aggregated использует нативный для vLLM ec_both; disaggregated использует Dynamo EmbeddingCacheManager |
| TRT-LLM | ❌ | ✅ | Dynamo 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 в GB | 0 (выключено) |
Задавайте ёмкость с учётом ожидаемого рабочего набора уникальных изображений. Более крупный кэш хранит больше embedding, но потребляет больше памяти хоста.
Дополнительные сведения см. в документации для конкретного бэкенда (vLLM, TRT-LLM).