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.
LMCache
Введение
LMCache — это высокопроизводительный слой KV cache, который ускоряет serving LLM за счет семантики prefill once, reuse everywhere. Как описано в официальной документации, LMCache позволяет LLM выполнять prefill каждого текста только один раз, сохраняя KV cache всех переиспользуемых текстов и давая возможность переиспользовать KV cache для любого повторно используемого текста (не обязательно prefix) в любом экземпляре serving engine.
В этом документе описано, как LMCache интегрирован в backend vLLM Dynamo, чтобы обеспечить более высокую производительность и эффективность использования памяти.
Примечания по установке
Runtime vLLM Dynamo ожидает, что LMCache будет установлен в том же Python-окружении. В поддерживаемых средах (x86_64, Python 3.10-3.13, PyTorch, собранный против CUDA 12.x) опубликованный wheel устанавливается напрямую:
uv pip install lmcache
LMCache публикует только x86_64 manylinux wheels, собранные с CUDA 12. Для aarch64-хостов или хостов, где PyTorch собран под другую основную версию CUDA, собирайте LMCache из исходников под вашу связку torch + CUDA — см. официальный LMCache installation guide.
Примечание о совместимости
LMCacheMPConnectorнужна правка из LMCache#3282, которая уже есть в LMCachemain, но еще не выпущена. Без нее MP-путь падает на vLLM ≥ 0.20.0 (включаяvllm==0.21.0, который Dynamo сейчас закрепляет) сRuntimeError: Unsupported GPUKVFormat: 7— vLLM 0.20+ использует GPU KV formats 6 / 7, которые MP-путь пока не умеет обрабатывать.До следующего релиза LMCache собирайте LMCache из исходников с этой PR.
Агрегированный режим
Конфигурация
LMCache запускает cache engine как out-of-process sidecar (lmcache server); worker Dynamo подключается к нему через LMCacheMPConnector. Сначала запустите sidecar, затем worker:
lmcache server --l1-size-gb 100 --eviction-policy LRU &
python -m dynamo.vllm \
--model <model_name> \
--disable-hybrid-kv-cache-manager \
--kv-transfer-config '{"kv_connector":"LMCacheMPConnector","kv_role":"kv_both"}'
Настройка
LMCache MP server настраивается через CLI-аргументы. Полный список флагов lmcache server см. в Configuration Reference.
LMCache MP использует двухуровневую архитектуру хранения: in-memory L1 cache (размер задается --l1-size-gb) плюс необязательные persistent L2 adapters, настраиваемые через --l2-adapter. Поддерживаемые L2 storage backends:
- POSIX: Стандартный POSIX file I/O на любой файловой системе
- GDS / GDS_MT: NVIDIA GPU Direct Storage (одно- и многопоточный), обходящий CPU для NVMe SSD, поддерживающих GDS
- HF3FS: Backend распределенной / общей файловой системы
- OBJ: Backend object storage
- AZURE_BLOB: Azure Blob Storage
Развертывание
Для быстрого запуска используйте предоставленный launch script:
./examples/backends/vllm/launch/agg_lmcache_mp.sh
Это:
- Запустит LMCache MP server
- Запустит Dynamo frontend
- Поднимет одного vLLM worker'а с
LMCacheMPConnector, подключенным к sidecar
Архитектура агрегированного режима
В агрегированном режиме система использует:
- KV Connector:
LMCacheMPConnector - KV Role:
kv_both(обрабатывает и чтение, и запись)
Раздельный режим
Раздельный режим разделяет операции prefill и decode на выделенных worker'ов. Это дает лучшее использование ресурсов и масштабируемость для production-развертываний.
Развертывание
Используйте предоставленный disaggregated launch script (требуется минимум 2 GPU):
./examples/backends/vllm/launch/disagg_lmcache.sh
Это:
- Запустит Dynamo frontend
- Поднимет decode worker на GPU 0
- Дождется инициализации
- Поднимет prefill worker на GPU 1 с включенным LMCache
Роли worker'ов
Decode worker
- Назначение: Обрабатывает генерацию токенов (decode phase)
- Назначение GPU: CUDA_VISIBLE_DEVICES=0
- Конфигурация LMCache: Использует
NixlConnectorтолько для KV transfer между prefill и decode worker'ами
Prefill worker
- Назначение: Обрабатывает обработку prompt'ов (prefill phase)
- Назначение GPU: CUDA_VISIBLE_DEVICES=1
- Конфигурация LMCache: Использует
MultiConnectorс коннекторами LMCache и NIXL. Это позволяет prefill worker'у использовать LMCache для KV offloading и NIXL для KV transfer между prefill и decode worker'ами. - Флаг:
--disaggregation-mode prefill
Архитектура
Конфигурация KV Transfer
Система автоматически настраивает KV transfer в зависимости от режима развертывания и типа worker'а:
Aggregated Mode
kv_transfer_config = KVTransferConfig(
kv_connector="LMCacheMPConnector",
kv_role="kv_both",
kv_connector_extra_config={"lmcache.mp.port": 5555},
)
Prefill worker (Disaggregated Mode)
kv_transfer_config = KVTransferConfig(
kv_connector="PdConnector",
kv_role="kv_both",
kv_connector_extra_config={
"connectors": [
{"kv_connector": "LMCacheConnectorV1", "kv_role": "kv_both"},
{"kv_connector": "NixlConnector", "kv_role": "kv_both"}
]
}
)
Decode worker (Disaggregated Mode)
kv_transfer_config = KVTransferConfig(
kv_connector="LMCacheConnectorV1",
kv_role="kv_both"
)
Fallback (без LMCache)
kv_transfer_config = KVTransferConfig(
kv_connector="NixlConnector",
kv_role="kv_both"
)
Точки интеграции
-
Парсинг аргументов (
args.py):- Настраивает соответствующие параметры KV transfer
- Формирует конфигурации connector'ов в зависимости от типа worker'а
-
Настройка Engine (
main.py):- Создает vLLM engine с корректной конфигурацией KV transfer
- Обрабатывает и aggregated, и disaggregated режимы
-
Жизненный цикл sidecar (launch script):
- Запускает процесс
lmcache serverдо worker'а Dynamo - Останавливает его при выходе через cleanup trap скрипта
- Запускает процесс
Лучшие практики
-
Настройка chunk size: Передавайте
--chunk-sizeвlmcache serverв зависимости от сценария:- Меньшие chunks (128-256): Лучшая гранулярность повторного использования для разнообразного контента
- Большие chunks (512-1024): Эффективнее для повторяющихся паттернов контента
-
Выделение памяти: Задавайте
--l1-size-gbдляlmcache serverконсервативно:- Оставляйте достаточно RAM для других системных процессов
- Следите за использованием памяти в пиковые нагрузки
-
Оптимизация workload: LMCache лучше всего работает с:
- Повторяющимися prompt-паттернами (RAG, многооборотные conversations)
- Общим контекстом между сессиями
- Долго работающими сервисами с warm cache
Метрики и мониторинг
LMCache MP server записывает метрики через OpenTelemetry SDK и публикует их на собственном HTTP admin port (по умолчанию :8080/metrics) с префиксом lmcache_mp_:
curl -s localhost:8080/metrics | grep '^lmcache_mp_'
Метрики vLLM и Dynamo остаются на :8081/metrics Dynamo (задайте DYN_SYSTEM_PORT=8081 на worker'е, чтобы включить этот endpoint).
Подробную информацию о метриках LMCache, включая полный список доступных метрик и способы доступа к ним, см. в разделе LMCache Metrics в vLLM Prometheus Metrics Guide.
Устранение неполадок
Лог vLLM: Found PROMETHEUS_MULTIPROC_DIR was set by user
vLLM v1 использует prometheus_client.multiprocess и хранит промежуточные значения метрик в PROMETHEUS_MULTIPROC_DIR.
- Если вы задали
PROMETHEUS_MULTIPROC_DIRсами, vLLM предупреждает, что каталог нужно очищать между запусками, чтобы избежать устаревших или неверных метрик. - При запуске через Dynamo wrapper vLLM может внутренне задать
PROMETHEUS_MULTIPROC_DIRкак временный каталог, чтобы избежать проблем с очисткой vLLM. Если предупреждение все равно появляется, проверьте, что вы не экспортируетеPROMETHEUS_MULTIPROC_DIRв shell или container environment.
Ссылки и дополнительные ресурсы
- Документация LMCache - Полное руководство и API reference
- Справочник конфигурации - CLI-аргументы
lmcache server - Руководство по наблюдаемости LMCache - Подробности о метриках и мониторинге