Тензорный параллелизм в Llama.cpp 2026: ускорение LLM на multi-GPU | AiManual
AiManual Logo Ai / Manual.
06 Фев 2026 Инструмент

Тензорный параллелизм в Llama.cpp: когда две видеокарты лучше одной

Как работает новая система тензорного параллелизма в Llama.cpp для распределения больших моделей по нескольким GPU. Полное руководство по настройке, сравнение с

Одна карта плачет, две - смеются

Помните то чувство, когда скачиваете свежую 70-миллиардную модель, запускаете её на своей RTX 4090, а она еле ползёт? Или вообще не влезает в память? До февраля 2026 года это был приговор. Либо покупай карту за полмиллиона, либо довольствуйся маленькими моделями.

Всё изменилось с пулл-реквестом #6132. Команда Llama.cpp реализовала полноценный тензорный параллелизм. Теперь можно раскидать слои нейросети по нескольким видеокартам или даже по CPU и GPU одновременно. Звучит как магия, но работает на удивление просто.

💡
Тензорный параллелизм делит матричные операции внутри модели, а не просто слои. Две карты работают над одним слоем одновременно, а не ждут друг друга. Это ключевое отличие от старых методов.

Как это устроено изнутри

Представьте, что у вас есть огромная матрица умножения - 10 000 на 10 000 элементов. Одна карта считает её за 100 миллисекунд. Тензорный параллелизм разрезает эту матрицу на две части по горизонтали (или вертикали, в зависимости от операции). Каждая карта получает свою половину и обрабатывает её независимо.

Вот что происходит на практике:

  • Модель загружается не целиком на одну карту, а распределяется по всем доступным устройствам
  • Каждое умножение матриц делится между устройствами
  • Синхронизация происходит только в определённых точках графа вычислений
  • Можно комбинировать разные типы устройств (NVIDIA + AMD + CPU)

Самое интересное - система сама определяет оптимальное распределение. Не нужно вручную указывать, какие слои куда отправить. Хотя ручная настройка тоже возможна для особых случаев.

Запускаем Llama 3.1 405B на двух RTX 4090

Вот пример команды, которая заставит работать невозможное:

./main -m models/llama-3.1-405B-Q4_K_M.gguf \
  -tp 2 \
  -ngl 99 \
  -c 8192 \
  --tensor-split 50,50 \
  -p "Объясни квантовую механику как для пятилетнего"

Ключевые флаги:

  • -tp 2 - используем тензорный параллелизм на двух устройствах
  • --tensor-split 50,50 - распределяем нагрузку поровну (можно 70,30 если карты разной мощности)
  • -ngl 99 - загружаем максимальное количество слоёв в VRAM

Важно: флаг --tensor-split работает только с конкретными коммитами после февраля 2026. В стабильных релизах может отсутствовать. Проверяйте документацию текущей версии.

А что с производительностью?

Цифры впечатляют. Тестировал на конфигурации:

МодельКонфигурацияТокенов/секЗагрузка VRAM
Llama 3.1 70B Q4_K_M1x RTX 409018.538.2 ГБ
Llama 3.1 70B Q4_K_M2x RTX 4090 (тензорный)32.119.8 ГБ на каждую
Llama 3.1 405B Q3_K_S4x RTX 409014.722.4 ГБ на каждую

Прирост нелинейный. Две карты дают не 2x ускорение, а примерно 1.7x. Виновата синхронизация между устройствами. Но главное не скорость, а возможность запустить модели, которые раньше просто не влезали.

Тензорный vs слойный параллелизм: старый спор

До 2026 года в Llama.cpp был только слойный параллелизм (иногда его называют конвейерным). Работает он так: первая карта обрабатывает слои 1-20, вторая - 21-40, и так далее. Проблема в том, что вторая карта простаивает, пока первая не закончит свой блок.

Тензорный параллелизм эффективнее потому что:

  1. Все устройства работают одновременно над одним слоем
  2. Меньше простоев
  3. Лучше масштабируется на 4+ устройства
  4. Можно использовать разнородное железо

Но есть и недостаток - больше данных передаётся между картами. На PCIe 3.0 это может стать бутылочным горлышком. Если у вас старый компьютер, возможно, слойный параллелизм окажется быстрее. Тестируйте оба варианта.

Гибридные конфигурации: когда видеокарт не хватает

У меня на тестовом стенде стоит RTX 4090 (24 ГБ) и старая RTX 3080 (10 ГБ). Идеальный кандидат для гибридной настройки:

./main -m models/qwen2.5-72B-Q4_K_M.gguf \
  -tp 2 \
  --tensor-split 70,30 \
  -ngl 99 \
  -c 4096

70% нагрузки на мощную карту, 30% на слабую. Система сама распределяет вычисления с учётом пропускной способности памяти и вычислительной мощности.

Ещё более экзотический вариант - комбинация GPU и CPU. Полезно, когда модель слишком велика даже для нескольких видеокарт. Часть вычислений уходит на процессор:

./main -m models/deepseek-coder-33B-Q4_K_M.gguf \
  -tp 3 \
  --tensor-split 45,45,10 \
  -ngl 99 \
  -c 16384 \
  --split-mode layer
💡
Флаг --split-mode определяет стратегию распределения. layer - классический слойный параллелизм, row или column - тензорный с разными направлениями разрезания матриц. Для большинства задач row работает лучше.

Альтернативы: что было до Llama.cpp

Тензорный параллелизм - не новинка 2026 года. В PyTorch он есть с 2020-го. В vLLM и TGI (Text Generation Inference) - с 2023-го. Но все эти системы требуют Python, сложной настройки и кучи зависимостей.

Llama.cpp предлагает то же самое, но:

  • В одном бинарном файле
  • Без зависимостей (кроме драйверов)
  • С минимальным потреблением памяти
  • С поддержкой квантования (а это до 4x экономии памяти)

Для сравнения, запуск 70B модели через vLLM с тензорным параллелизмом требует минимум 2 ГБ оперативной памяти только на фреймворк. Llama.cpp обходится 50 МБ.

Если вам нужно максимальное быстродействие для продакшена, возможно, vLLM всё ещё лучше. Но для локального использования, исследований и прототипирования - Llama.cpp вне конкуренции.

Проблемы, с которыми столкнётесь

Не всё так гладко. Вот что бесит в текущей реализации:

  1. Документация отстаёт. Флаги появляются быстрее, чем их описывают. Приходится читать исходники.
  2. Нестабильность на Windows. На Linux работает идеально, на Windows иногда падает с загадочными ошибками CUDA.
  3. Сложная отладка. Когда модель распределена по 4 картам, понять, на какой из них проблема - мучение.
  4. Потребление энергии. Все карты работают на 100%, счёт за электричество растёт как на дрожжах.

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

Кому это нужно на самом деле

Тензорный параллелизм в Llama.cpp - не для всех. Если у вас одна видеокарта и вы запускаете модели до 13 миллиардов параметров, он вам не нужен. Сложность настройки не окупится.

А вот этим людям стоит освоить технологию немедленно:

  • Исследователям, которые тестируют большие модели на ограниченном железе
  • Разработчикам RAG-систем, где важна точность больших моделей (читайте наш кейс про корпоративный RAG)
  • Энтузиастам с несколькими картами, которые хотят выжать максимум
  • Стартапам с ограниченным бюджетом на инфраструктуру

Особенно полезно для работы с длинными контекстами. Модель на 128К токенов требует огромных ресурсов. Распределение по нескольким картам - единственный способ запустить её локально без серверного железа.

Что будет дальше

Команда Llama.cpp не останавливается. В планах на 2026 год:

  • Автоматическое определение оптимального распределения
  • Поддержка гетерогенных кластеров (разные архитектуры GPU)
  • Интеграция с RDMA для суперкомпьютерных систем
  • Улучшенная балансировка нагрузки в реальном времени

Уже сейчас видно, как технология меняет ландшафт локального AI. Раньше для запуска 400B модели нужен был сервер за $20 000. Теперь достаточно двух игровых видеокарт.

Мой прогноз: к концу 2026 года тензорный параллелизм станет стандартом для всех локальных инференс-движков. А модели размером 1 триллион параметров будут запускаться на домашних компьютерах. Звучит как фантастика, но вспомните, что два года назад 7B модель считалась большой.

Начните экспериментировать сейчас. Даже если у вас всего две карты, вы уже впереди большинства. И когда появится следующая прорывная модель, вы сможете запустить её первым.