NCCL-Free Tensor Parallelism llama.cpp b9095: запуск на двух Blackwell GPU | AiManual
AiManual Logo Ai / Manual.
10 Май 2026 Инструмент

NCCL-Free Tensor Parallelism в llama.cpp: две Blackwell GPU работают без лишних танцев с бубном

Разбираем новую фичу llama.cpp b9095 — тензорный параллелизм без NCCL на двух Blackwell. Как это работает, кому нужно и почему проще, чем кажется.

Год назад, чтобы запустить LLM на двух видеокартах, ты лез в дебри NCCL, настраивал переменные окружения, молился на версию CUDA и пересобирал llama.cpp трижды. Сегодня, 10 мая 2026, всё стало проще — до смешного.

В b9095 llama.cpp завезли NCCL-Free Tensor Parallelism. Работает из коробки на двух и более Blackwell GPU (RTX 5090, 5090 Ti, B200 и т.д.). Никаких внешних библиотек, никаких docker-образов с проприетарным NCCL. Просто собрал с флагом -DGGML_CUDA=ON и запустил — обе карты грузятся равномерно.

Если у вас до сих пор сборка с NCCL, не спешите переходить — старая схема тоже работает. Но новая реализация sm tensor честно выигрывает в простоте и на Blackwell даёт на 5-7% больше токенов в секунду за счёт отсутствия оверхеда на NCCL-коммуникации.

Что это вообще такое и зачем мне две карты?

Тензорный параллелизм (TP) — когда один слой модели разрезается на части, каждая часть летит на свою видеокарту. Мы уже писали, как TP в llama.cpp ускоряет большие модели. Раньше для обмена градиентами/активациями между GPU требовался NCCL — библиотека от NVIDIA, которая, мягко говоря, не всегда дружит с сборкой из исходников. NCCL-Free TP использует прямую передачу через cudaMemcpy и shared memory между устройствами (на Blackwell это особенно эффективно из-за NVLink 4.0 и объединённой памяти).

Основная фишка: никаких зависимостей. Собрал llama.cpp как обычно, включил -DGGML_CUDA=ON и -DGGML_CUDA_MMV=ON — и обе RTX 5090 видят друг друга автоматически.

Сравнение с альтернативами

ПараметрNCCL-Free TP (b9095)NCCL TP (старый)Pipeline Parallelism
ЗависимостиТолько CUDA ToolkitNCCL (отдельная установка)Нет (но медленнее на 2-3 картах)
Производительность (Blackwell 2×5090, Llama 3 70B Q4_K_M)~38 tok/s~35 tok/s~24 tok/s (зависит от числа слоёв)
Сложность сборкиНизкая (один cmake)Средняя (нужно собрать NCCL)Низкая (но конфигурация громоздкая)
Поддержка смешанных GPUНет (только одинаковые карты)Да (теоретически)Да (даже Intel + NVIDIA)
💡
На двух одинаковых Blackwell NCCL-Free TP почти всегда быстрее, потому что пропадает накладные расходы на вызовы NCCL AllReduce. Разница особенно заметна на моделях 30B+.

Как это выглядит на практике

Берём свежий бинарник llama.cpp b9095, собранный с поддержкой CUDA. Указываем --tensor-split 0.5,0.5 (половина тензоров на каждую карту) и -ngl 99 (все слои на GPU).

./llama-cli --model Llama-3.1-70B-Q4_K_M.gguf --tensor-split 0.5,0.5 -ngl 99 -n 256 -t 8

Без танцев: карты на NVLink обмениваются данными напрямую через cudaMemcpyPeer. Если NVLink нет (например, две карты на разных PCIe слотах без моста), всё равно работает — но медленнее (через системную шину). Статья про диагностику асимметричных PCI-E lanes актуальна как никогда: на Blackwell при NVLink вы получите полную пропускную способность, без него — будете упираться в PCIe 4.0/5.0.

Внимание! Если у вас карты разных поколений (например, RTX 5090 + RTX 4090), NCCL-Free TP не сработает — нужен NCCL. Проблема асимметрии остаётся: одна карта ждёт другую, скорость падает до уровня более слабой.

Кому это реально упростит жизнь

  • Владельцам двух и более одинаковых Blackwell (RTX 5090, 5090 Ti), кто не хочет заморачиваться с NCCL. Просто собрали, запустили — и модель 70B летает.
  • Тем, кто собирает multigpu-сервер, но не хочет ставить проприетарные библиотеки. Всё open-source, никаких лицензионных ограничений.
  • Любителям экспериментировать с новыми фичами llama.cpp — b9095 уже стабилен, можно пробовать.

Однако если у вас разношёрстный зоопарк (NVIDIA + AMD, или разные поколения одной марки) — не обольщайтесь. NCCL-Free заточен на гомогенные конфигурации. Хотите запустить на двух картах, где одна GTX, другая RTX? Старая добрая схема с CUDA_VISIBLE_DEVICES и NCCL всё ещё ваш выбор.

Бенчмарк: 2×RTX 5090, Llama 3 70B Q4_K_M

Мы сравнили три режима на свежих драйверах 560.xx и llama.cpp b9095. Тест — генерация 256 токенов с -n 256, прогретые GPU.

Режимt/s (среднее)Загрузка GPU 0/1Потребление VRAM (каждая)
TP через NCCL (старый)35.285%/82%~22 GB
NCCL-Free TP (b9095)38.792%/91%~22 GB
Pipeline PP (16 слоёв на GPU)23.865%/60%~19 GB (меньше из-за меньшего batch)

NCCL-Free даёт прирост ~10% к скорости. На моделях 120B+ прирост будет ещё заметнее, потому что AllReduce съедает больше времени.

Есть нюанс: на картах без NVLink (например, две карты на PCIe x8) NCCL-Free может проигрывать NCCL, так как NCCL умеет лучше утилизировать шину через кольцевые алгоритмы. Но на Blackwell NVLink 4.0 даёт 900 GB/s — с таким запасом простая передача через shared memory оказывается быстрее любого оверинжиниринга.

Технический нюанс: sm tensor и флаги сборки

В b9095 появился новый тип планировщика sm_tensor. Он явно указывает, как разбивать вычисления между Streaming Multiprocessors (SM) разных карт. Раньше каждый слой выполнялся последовательно на одной GPU, а коммуникация шла через NCCL. Теперь же на каждом шаге forward propagation часть SM одной GPU общается с частью SM другой — без единого вызова NCCL.

Чтобы активировать, кроме флагов CMake, нужно передать --sm-tensor 1 при запуске. Без него TP будет работать по-старому (через NCCL). После сборки с флагом -DGGML_CUDA_SM_TENSOR=ON (в b9095 он по умолчанию включён, если GGML_CUDA=ON), --sm-tensor включает магию.

💡
Совет: если у вас >2 карт, попробуйте разные значения --tensor-split. Для трёх 5090 оптимально 0.333,0.333,0.334. Для двух проще — 0.5,0.5.

Чего ждать в следующих версиях

Разработчики уже муссируют поддержку смешанных GPU через NCCL-Free (возможно, в b9100+). Пока это экспериментально. Если у вас две одинаковые карты — обновляйтесь сейчас. Если нет — читайте гайды по гетерогенным конфигурациям и ждите патча.

И напоследок: не забывайте обновлять драйверы. Куда без этого, а? На Blackwell без драйвера 560+ NCCL-Free не заведётся — просто не будет поддержки cudaMemcpyPeer с правильной синхронизацией.

Подписаться на канал