# Тесты NCCL на сервере с несколькими GPU: all_reduce_perf шаг за шагом

> Как запустить тесты NCCL на сервере с несколькими GPU: проверка топологии NVLink, сборка nccl-tests, busbw в all_reduce_perf и запуск задач torchrun на 8 GPU.

Источник: https://fullgpu.com/ru/docs/multi-gpu-nccl  
Обновлено: 2026-10-22  
Издатель: FullGPU (https://fullgpu.com/)

Тесты NCCL на сервере с несколькими GPU — самый быстрый способ убедиться, что GPU, NVLink и коммуникационный стек работают слаженно, прежде чем браться за длительное обучение. Эта страница относится к нашим 8-GPU-серверам: проверьте топологию, соберите nccl-tests от NVIDIA, запустите all_reduce_perf на восьми GPU, оцените busbw, а затем запускайте задачи PyTorch через torchrun. Заметки о работе на нескольких узлах — в конце. На серверах AMD используется RCCL, о нём — в руководстве [по настройке ROCm](https://fullgpu.com/ru/docs/amd-rocm).

## Проверка топологии GPU

```
nvidia-smi topo -m
nvidia-smi nvlink --status
systemctl status nvidia-fabricmanager
```

В матрице `topo -m` запись `NV#` означает, что два GPU соединены через NVLink, а # — число каналов. `PIX`, `PXB`, `PHB`, `NODE` и `SYS` — пути через PCIe, от самого близкого к самому дальнему. Матрица также показывает, к каким процессорам и узлам NUMA привязан каждый GPU.

На серверах HGX (H100, H200, B200, B300) для каждой пары GPU должна быть запись `NV`, а Fabric Manager должен находиться в состоянии `active (running)`. В сервере с RTX PRO 6000 NVLink нет: его GPU обмениваются данными через PCIe, поэтому записи PCIe там ожидаемы. Подробнее — в статье [о сравнении NVLink и PCIe](https://fullgpu.com/ru/blog/nvlink-vs-pcie).

## Сборка nccl-tests

1. Установите инструменты сборки и проверьте, есть ли заголовочный файл NCCL для разработки: `sudo apt install -y git build-essential ls /usr/include/nccl.h`
2. Если `nccl.h` нет, установите NCCL из репозитория CUDA от NVIDIA, подключённого так, как описано в руководстве [по версиям драйвера и CUDA](https://fullgpu.com/ru/docs/nvidia-drivers-cuda). Выведите список версий и выберите самую новую, у которой суффикс CUDA (например, `+cuda12.8`) не новее значения «CUDA Version» в выводе nvidia-smi: `apt-cache madison libnccl2 | head sudo apt install -y libnccl2=VERSION libnccl-dev=VERSION`
3. Соберите тесты: `git clone https://github.com/NVIDIA/nccl-tests.git cd nccl-tests make -j"$(nproc)" CUDA_HOME=/usr/local/cuda` Исполняемые файлы появятся в `./build/`.

Чтобы ничего не менять на хосте, соберите тесты так же внутри контейнера NGC с PyTorch, в котором уже есть CUDA и NCCL.

## Запуск all_reduce_perf на 8 GPU

```
./build/all_reduce_perf -b 8 -e 8G -f 2 -g 8
```

Один процесс управляет восемью GPU (`-g 8`) и перебирает размеры от 8 байт (`-b`) до 8 ГБ (`-e`), удваивая размер на каждом шаге (`-f 2`). В каждой строке — время и два значения пропускной способности, `algbw` и `busbw`, для прогонов out-of-place и in-place. Проверьте, что:

- в столбцах `#wrong` в каждой строке стоит 0, то есть результаты верны;
- busbw растёт с увеличением размера сообщения и выходит на плато на самых больших размерах;
- итоговая строка «Avg bus bandwidth» стабильна от запуска к запуску.

Другие коллективные операции тестируются так же: `all_gather_perf`, `reduce_scatter_perf` и `sendrecv_perf`.

## Что означает busbw

`algbw` — это объём данных, делённый на время. Это значение меняется в зависимости от числа GPU, поэтому его трудно сравнивать между разными конфигурациями. `busbw` вводит поправочный коэффициент, чтобы значение отражало трафик, который реально проходит по каждому каналу. Для all-reduce коэффициент равен 2 × (n − 1) / n, то есть 1,75 для восьми GPU. Благодаря этому busbw можно сравнивать с пропускной способностью каналов самого оборудования, а также между серверами одной модели.

Заявленные производителем скорости каналов — пиковые значения, которых тест не достигает, поэтому оценивайте стабильность результатов: сравнивайте запуски между собой и с идентичным сервером, если он у вас есть. Резкое падение на больших размерах, результат намного ниже, чем у такого же сервера, или зависание обычно указывают на проблему с топологией, Fabric Manager или оборудованием. Пришлите нам полный вывод и матрицу топологии в [тикете в поддержку](https://fullgpu.com/ru/help/getting-support) через личный кабинет.

## Отладка с NCCL_DEBUG=INFO

```
NCCL_DEBUG=INFO ./build/all_reduce_perf -b 1G -e 1G -g 8 2>&1 \
  | tee nccl-debug.log
```

В журнале видны версия NCCL, транспорт, выбранный между GPU (P2P или NVLS через NVLink, SHM через память хоста, NET через сеть), а также кольца и деревья, которые построил NCCL. На серверах HGX должны использоваться транспорты NVLink. Если вместо них вы видите SHM, проверьте топологию и Fabric Manager. Если на сервере RTX PRO 6000, где GPU связаны через PCIe, тест зависает или сообщает об ошибках, перезапустите его с `NCCL_P2P_DISABLE=1`. Если такой запуск проходит успешно, проблема в прямом обмене данными между GPU (peer-to-peer): создайте тикет в личном кабинете, и мы поможем разобраться.

## Запуск задач DDP или FSDP через torchrun

torchrun запускает по одному процессу на каждый GPU и задаёт переменные, которые нужны пакету распределённых вычислений PyTorch. В окружении с PyTorch сохраните эту проверку как `allreduce_check.py`:

```
import os
import torch
import torch.distributed as dist

dist.init_process_group("nccl")
rank = int(os.environ["LOCAL_RANK"])
torch.cuda.set_device(rank)
x = torch.ones(1024, device="cuda") * (rank + 1)
dist.all_reduce(x)
print(f"rank {rank}: {x[0].item()}")
dist.destroy_process_group()
```

Запустите её на всех восьми GPU:

```
torchrun --standalone --nproc_per_node=8 allreduce_check.py
```

Каждый ранг должен вывести `36.0` — сумму чисел от 1 до 8. Ваш обучающий скрипт с DDP или FSDP запускается так же. DDP хранит полную копию модели на каждом GPU и усредняет градиенты. FSDP шардирует параметры, градиенты и состояние оптимизатора между GPU, поэтому можно обучать модели, которые не помещаются в память одного GPU. Если задача зависает, добавьте `NCCL_DEBUG=INFO` перед командой.

## Работа на нескольких узлах

- **Сеть.** Попросите настроить [частную сеть](https://fullgpu.com/ru/products/private-networking) между вашими серверами — в примечаниях к заказу при их [развёртывании](https://fullgpu.com/ru/deploy) или в тикете через личный кабинет — и используйте частные адреса для rendezvous и трафика NCCL.
- **Интерфейс.** Найдите частный интерфейс с помощью `ip -br addr` и на каждом узле задайте его имя в `NCCL_SOCKET_IFNAME`, чтобы NCCL не выбрал публичный интерфейс.
- **Запуск.** Выполните одну и ту же команду на каждом узле, меняя только ранг. Здесь `10.0.0.1` — частный адрес первого узла: `torchrun --nnodes=2 --nproc_per_node=8 --node_rank=0 \ --master_addr=10.0.0.1 --master_port=29500 train.py` На втором узле укажите `--node_rank=1` и, если включён файрвол, разрешите этот порт между узлами.
- **Сетевая фабрика.** Чтобы GPU разных узлов обменивались данными на полной скорости, нужна RDMA-фабрика (InfiniBand или RoCE), проложенная и настроенная между вашими серверами, — частная сеть её не обеспечивает. Если одной задаче нужно больше восьми GPU, которые обмениваются данными на скорости NVLink, стойка [GB300 NVL72](https://fullgpu.com/ru/gpus/nvidia-gb300-nvl72) объединяет все 72 GPU в одном домене NVLink.

## Связанные страницы

- [Аренда сервера с 8 GPU: bare metal на базе NVIDIA HGX и AMD Instinct](https://fullgpu.com/ru/products/8-gpu-servers): Аренда bare-metal-сервера с 8 GPU: NVIDIA HGX B300, B200, H200, H100, AMD MI355X или 8× RTX PRO 6000. 50 ТБ трафика, помесячно, выдача менее чем за 10 минут.
- [Частная сеть между GPU-серверами](https://fullgpu.com/ru/products/private-networking): Частная сеть между GPU-серверами по запросу: объедините свои серверы FullGPU в изолированную сеть для конвейеров данных и многоузловых задач. Как это работает.
- [GPU-серверы для обучения LLM на выделенных 8-GPU-узлах](https://fullgpu.com/ru/solutions/llm-training): GPU-серверы для обучения LLM: bare-metal-узлы HGX B300, B200 и H200 с NVLink и сетью 400–800G, аренда помесячно. Сначала посмотрите расчёт памяти.
- [Команды nvidia-smi для мониторинга GPU-серверов](https://fullgpu.com/ru/docs/gpu-monitoring): Команды nvidia-smi для мониторинга загрузки GPU в Linux: просмотр в реальном времени, логи в CSV, nvtop, экспортер DCGM, ошибки ECC и Xid, аналоги в rocm-smi.
