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.
Передача KV-кэша
Общие возможности и конфигурацию TensorRT-LLM см. в справочном руководстве.
В архитектурах disaggregated serving KV-кэш должен передаваться между worker'ами prefill и decode. TensorRT-LLM поддерживает два способа такой передачи:
Использование NIXL для передачи KV-кэша
Чтобы запустить disaggregated service, см. раздел Disaggregated Serving, где объясняется, как поднять deployment.
Метод по умолчанию: NIXL
По умолчанию TensorRT-LLM использует NIXL (NVIDIA Inference Xfer Library) с UCX (Unified Communication X) в качестве backend для передачи KV-кэша между worker'ами prefill и decode. NIXL - это высокопроизводительная библиотека обмена данными NVIDIA, предназначенная для эффективной передачи данных в распределённых GPU-средах.
Указание backend'ов для NIXL
TensorRT-LLM поддерживает два коммуникационных backend'а NIXL: UCX и LIBFABRIC. Если backend явно не указан, по умолчанию используется UCX. Dynamo сейчас поддерживает оба backend'а. Для deployment'ов AWS EFA протестированным и рекомендуемым backend'ом является UCX с транспортом SRD (см. AWS EFA ниже).
Альтернативный метод: UCX
TensorRT-LLM также может напрямую использовать UCX (Unified Communication X) для передачи KV-кэша между worker'ами prefill и decode. Чтобы включить UCX как backend передачи KV-кэша, задайте cache_transceiver_config.backend: UCX в YAML-файле конфигурации engine.
Переменная среды TRTLLM_USE_UCX_KVCACHE=1 вместе с cache_transceiver_config.backend: DEFAULT не включает UCX. Нужно явно задать backend: UCX в конфигурации.
AWS EFA
В AWS UCX использует транспорт SRD (Scalable Reliable Datagram) поверх устройств EFA. NIXL автоматически обнаруживает устройства EFA rdmap* через UCX - на уровне NIXL ничего менять не нужно.
Варианты image:
- Предварительно собранный EFA image (только AMD64): на NGC доступен отдельный EFA image со встроенным EFA SDK. Его рекомендуется использовать для инстансов AMD64 (например,
p5.48xlarge):
nvcr.io/nvidia/ai-dynamo/tensorrtllm-runtime:1.2.0-efa-amd64
Все доступные EFA image см. в Release Artifacts.
- Подход с host mount (ARM64 / GB200): предварительно собранный EFA image для ARM64 не публикуется. Используйте стандартный image
tensorrtllm-runtimeи монтируйте EFA SDK с host node. Именно так мы тестировали на GB200 NVL72:
volumeMounts:
- name: efa-sdk
mountPath: /opt/amazon/efa
volumes:
- name: efa-sdk
hostPath:
path: /opt/amazon/efa
Запросы ресурсов EFA:
resources:
requests:
vpc.amazonaws.com/efa: "4"
limits:
vpc.amazonaws.com/efa: "4"
Обязательные переменные среды для worker'ов EFA (задайте и для prefill, и для decode):
env:
- name: FI_PROVIDER
value: "efa"
- name: FI_EFA_USE_DEVICE_RDMA
value: "1"
- name: FI_EFA_ENABLE_SHM_TRANSFER
value: "0"
- name: LD_LIBRARY_PATH
value: "/opt/amazon/efa/lib:/usr/local/lib:/usr/lib"
FI_EFA_ENABLE_SHM_TRANSFER должен быть 0. Передачи через SHM ломают регистрации GPU-буферов NIXL.Security context: AWS EFA сейчас требует privileged mode:
securityContext:
privileged: true
Несовпадение ABI NIXL Plugin при multinode decode
При запуске multinode decode лидер decode запускает worker'ы через mpirun -> mgmn_worker_node, который загружает встроенный NIXL из TRT-LLM, а не системный nixl_cu13. Значение NIXL_PLUGIN_DIR по умолчанию у контейнера указывает на системные plugins, несовместимые по ABI со встроенным NIXL TRT-LLM. Переопределяйте это только в службе decode:
env:
- name: NIXL_PLUGIN_DIR
value: "/opt/dynamo/venv/lib/python3.12/site-packages/tensorrt_llm/libs/nixl/plugins"
Не задавайте это для worker'ов prefill - они используют nixl_cu13, который совместим с системными plugins.
ComputeDomain для GB200 NVL72
На стойках GB200 NVL72 для корректной инициализации cuMem/NVLS нужен ComputeDomain CR. Без него worker'ы завершаются с NCCL error 'unhandled system error' во время загрузки модели.
apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
name: my-compute-domain
spec:
numNodes: 3 # total nodes across prefill + decode
channel:
resourceClaimTemplate:
name: my-compute-domain-channel
И prefill, и decode services должны включать ResourceClaims:
resources:
claims:
- name: compute-domain-channel
extraPodSpec:
resourceClaims:
- name: compute-domain-channel
resourceClaimTemplateName: my-compute-domain-channel
Обязательные переменные среды NCCL для GB200:
env:
- name: NCCL_MNNVL_ENABLE
value: "1"
- name: NCCL_CUMEM_ENABLE
value: "1"
- name: NCCL_NVLS_ENABLE
value: "1"
- name: NVIDIA_GDRCOPY
value: "1"
Проверка, что EFA активно
После deployment убедитесь по журналам worker'а, что NIXL использует SRD поверх EFA:
kubectl logs <prefill-pod> | grep -iE "NixlTransfer|srd|rdmap"
Ожидаемый вывод:
NixlTransferAgent using NIXL backend: UCX
ucp_context_2 self cfg#1 rma_am(srd/rdmap40s0:1) am(srd/rdmap40s0:1 srd/rdmap62s0:1 ...)
NixlTransferAgent mAddress: 100.x.x.x:32939
srd/rdmap*подтверждает транспорт SRD поверх устройств EFA- Несколько записей
rdmapсоответствуют одному устройству EFA на GPU