Repository navigation
FAQ.ru
Модель на 384 эксперта × 69 слоёв имеет ~118 GiB весов экспертов на TP rank. Четыре карты по 96 GB дают ~384 GB суммарно, но нужен ещё KV cache, CUDA graphs, активации и резерв. Без NVLink единственный разумный путь offload — PCIe в закреплённую память хоста (UVA). Балансировка экспертов решает, что остаётся резидентным.
Unified Virtual Addressing: GPU может читать закреплённую память хоста по PCIe напрямую,
без явного ядра копирования. run-tp4-uva.sh запускает vLLM с --offload-backend uva.
Холодные эксперты живут в UVA; горячие — в настоящей памяти устройства.
Часто это так и есть: холодные hits ограничены PCIe (этот хост: слоты PCIe 4.0, ~25 ГБ/с
на карту). Планировщик минимизирует холодные hits; dynamic-режим поднимает долю горячих
ещё выше. Смотрите строку лога hot/cold hit-rate.
Известный блокер. glm5_next использует rope-free MLA (qk_rope_head_dim=0), и ванильный
vLLM падает на SM120 (RTX PRO 6000): assert "pe_dim must be 64 for fp8_ds_mla"
(vLLM issues #53963, #55773). Кандидаты в фиксы — PR #55277 / #55778 / FlashInfer #4802 —
ещё не влиты в upstream. Рецепт честно документирует блокер; математика баланса готова
и протестирована — запуск заработает, как только фикс попадёт в upstream.
Нет. Все четыре рецепта спроектированы для TP4 только через PCIe. NUMA-размещение
(HOTSPLIT_NUMA_POLICY = preferred / bind) помогает держать память хоста локально
относительно PCIe root complex карты.
- Static: предсказуемо, нулевой оверхед, из вашей гистограммы трафика.
- Dynamic (по умолчанию): адаптируется к живому трафику, мизерная цена перестановки,
лучший hit-rate со временем. Измеримо:
hot/cold hit-rateна каждом обновлении.
Намеренно. Три параметра обязательны:
-
IMAGE— обязательно с@sha256:<digest>; плавающие теги отклоняются. -
MODEL_REVISION(40-символьный commit SHA) требуется при загрузке модели по id. -
API_KEYтребуется даже на127.0.0.1— толькоALLOW_NO_AUTH=1отключает его, и только на loopback. Лаунчер не будет «на авось» запускать неправильно настроенный сервер. См. Быстрый старт.
Три вещи, которые нужно понимать до первого запуска:
-
patches/MANIFEST.sha256ловит случайные правки и наивные подмены, но манифест лежит в том же дереве, что и патчи. Злоумышленник с доступом на запись может заменить и то, и другое. Закрепите ревизию git, которую вы ревьюили (git rev-parse HEAD), и сверяйтесь с ней. -
--trust-remote-codeпозволяет модели исполнять собственный Python. ФиксацияMODEL_REVISIONпредотвращает незаметные изменения при повторных загрузках, но не делает сам код безопасным. Изучите remote-code модели до первого запуска. -
API-ключ едет в окружении контейнера (
VLLM_API_KEY). Любой, кто может запуститьdocker inspect, его увидит. Доступ к docker эквивалентен root — ограничивайте его.
По умолчанию BIND=127.0.0.1 (только loopback). Для доступа из сети задайте BIND=0.0.0.0
и API_KEY — лаунчеры отказываются от не-loopback адреса без ключа (ALLOW_NO_AUTH=1
принимается только на loopback).
scripts/check-hotsplit-tp4.sh <container> <dynamic|static> — каждый rank должен отчитаться
dynamic_hook=ACTIVE (dynamic) и hotsplit done. Затем smoke-тест /v1/chat/completions.
Полные процедуры измерений (TTFT/TPOT, трафик PCIe, проверка гонок под compute-sanitizer):
см. README рецепта (раздел «Проверка») и check-скрипты.
Да — issues и PR приветствуются в sikkatu/recipes. Контракт: указывайте точно, что запускалось и на чём, сохраняйте sha256-пины патчей, перечисляйте известные ограничения и честно помечайте, что проверено, а что нет. Если публикуете что-то на основе этого репозитория — ссылайтесь на него (см. «Атрибуция» в README).
English
Русский
中文