# Развернуть большой MoE на DGX Spark через vLLM: от одного узла до пары

> Порядок развёртывания, обходящий тихие зависания, которые мы поймали на собственной паре GB10: запиненные веса и образ, head раньше peer, готовность по эндпоинту, а не по ощущению, и проверка выбора MoE-ядра, отделяющая быструю конфигурацию от той, которую гоняет большинство.

- Published: 2026-09-01
- Platform: DGX Spark (GB10)
- Time to complete: 2-3 ч
- Canonical: https://agmind.ai/ru/guides/deploy-llm-dgx-spark-vllm/

Это версия-туториал
[нашего серверного рецепта](https://agmind.ai/ru/reports/deepseek-v4-flash-0731-dgx-spark-recipe/) —
те же шаги, выстроенные для того, кто делает это впервые, с ловушками, за
которые мы заплатили, размеченными до того, как вы до них дойдёте.
Написана на настоящей паре юнитов GB10, обслуживающей MoE на 284B
параметров; одиночный Spark идёт тем же путём минус раздел про фабрику.

Понадобятся: один или два DGX Spark на актуальной прошивке, Docker с
NVIDIA runtime и много диска — веса фронтирного класса измеряются сотнями
гигабайт на узел.

## Шаг 1 — запините всё до того, как что-нибудь скачивать

Три идентичности решают, можно ли будет потом отладить ваше
развёртывание: ревизия модели, digest контейнера и версия прошивки.
Сначала запишите все три. `main` переезжает, теги переезжают, а обновления
прошивки Spark
[исторически меняли поведение достаточно](https://agmind.ai/ru/essays/benchmark-number-config-in-disguise/),
чтобы развернуть отношение сообщества к устройству в целом. Развёртывание, которое вы не можете точно назвать, никто не поможет вам отладить.

```
# запишите эти три строки куда-нибудь насовсем:
# model:    <repo> @ <revision>
# image:    vllm/vllm-openai@sha256:<digest>
# firmware: (из информации о вашей системе)
```

## Шаг 2 — веса на каждый узел

Для пары: полные веса кладутся на ОБА узла, идентичная ревизия. Это надолго: заложите время честно, а по завершении сверьте, что размеры совпадают. Для
одиночного узла выберите модель, которая действительно влезает в одно
устройство, — фронтирный класс не влезает,
[поэтому пара и существует](https://agmind.ai/ru/reports/dgx-spark-worth-it/).

## Шаг 3 — сначала один узел, даже если у вас два

Поднимите один узел в одиночку, прежде чем трогать тензорный параллелизм.
Сначала изучите поведение контейнера — время старта, паттерн памяти,
форму логов — без фабрики как второй переменной:

```
docker run -d --name vllm --gpus all \
  -v /var/lib/llm/models:/models -p 8000:8000 \
  vllm/vllm-openai@sha256:YOUR_DIGEST \
  --model /models/YOUR-MODEL --max-model-len 32768
```

Готовность — это эндпоинт, а не ощущение: сервер поднялся, когда отвечает
`curl localhost:8000/v1/models`. Загрузка весов у модели этого класса
занимает минуты — смотрите `docker logs -f vllm` и не перезапускайте
контейнер на полпути из нетерпения.

## Шаг 4 — для пары: сначала head, потом peer, именно в этом порядке

Узел rank 0 держит координационный стор. Peer, стартовавший до того, как
head начал слушать, умирает на broken pipe без внятной ошибки —
на бумаге этот баг порядка запуска очевиден, но
[стоил нам живых часов](https://agmind.ai/ru/reports/deepseek-v4-flash-0731-dgx-spark-recipe/).
Рабочая последовательность: запустите head, дождитесь, пока порт стора
появится в `ss -tln`, и только потом запускайте peer. Настройкам фабрики
(IP head и peer, HCA, GID index) место в переменных окружения в шапке
вашего скрипта запуска, а не россыпью по нему.

## Шаг 5 — убедитесь, что выбор ядра сработал

Для MoE-моделей автоматический выбор бэкенда в vLLM может сознательно
пропустить ядро, собранное ровно под квантизацию вашей модели. Грепните
логи по строке MoE-бэкенда и убедитесь, какой именно загрузился, —
разница [не косметическая](https://agmind.ai/ru/reports/dsv4-flash-moe-backend-dgx-spark/).
Если у семейства вашей модели есть специализированный бэкенд, задайте его
явно и проверьте лог ещё раз. Одна эта проверка чаще всего и отделяет опубликованную цифру Spark от разочарованного поста на форуме.

## Шаг 6 — smoke-тест

Та же дисциплина, что и [на любой коробке](https://agmind.ai/ru/guides/deploy-llm-strix-halo/):
отправьте настоящий chat completion, убедитесь, что `content` не пуст и
`finish_reason` — это `stop`, а токены считайте из
`usage.completion_tokens` — при спекулятивном декодировании счёт событий
стрима врёт.

## Шаг 7 — мониторинг, пока он не понадобился

Штатная наблюдаемость GPU на unified memory GB10 работает наполовину:
dcgm-exporter не работает вовсе, а NVML отвечает N/A на большую часть того,
по чему вы хотели бы алертить. Настройте
[обход через textfile-коллектор](https://agmind.ai/ru/reports/dgx-spark-gpu-monitoring/)
сейчас — обслуживающая коробка, за которой нельзя наблюдать, — это коробка, которую нельзя эксплуатировать, и лучше не обнаруживать этот пробел посреди первого инцидента.

## Куда дальше

- **Чего от него ждать**: измеренный ответ покупателю, кривая контекста и
  история конкурентности — в [отчётах про Spark](https://agmind.ai/ru/reports/dgx-spark-worth-it/).
- **Контексты 256K и дальше**: охота за конфигурацией и предупреждения о
  сломанных путях — [отдельная история](https://agmind.ai/ru/reports/dgx-spark-256k-vllm/).
- **Проверьте своё развёртывание**:
  [харнесс открыт](https://github.com/botAGI/agmind-bench); цифры для
  сверки живут в
  [репозитории бенчмарков](https://github.com/botAGI/dgx-spark-llm-benchmarks).

---

Machine-readable claim registry: https://agmind.ai/claims.json · llms.txt: https://agmind.ai/llms.txt
