Llama.cpp RPC-server: бенчмарк распределенных LLM на нескольких GPU | AiManual
AiManual Logo Ai / Manual.
28 Дек 2025 Инструмент

Llama.cpp RPC-server: тестирование распределенных вычислений для LLM на нескольких видеокартах

Подробный обзор и тестирование llama.cpp RPC-server для распределенных вычислений LLM на нескольких видеокартах. Сравнение производительности, настройка сети, п

Что такое llama.cpp RPC-server и зачем он нужен?

Llama.cpp RPC-server — это экспериментальная функция популярного фреймворка llama.cpp, позволяющая распределять вычисления больших языковых моделей (LLM) между несколькими компьютерами или видеокартами по сети. В отличие от стандартного многопоточного режима, который работает в пределах одной системы, RPC-server использует архитектуру клиент-сервер, где один узел координирует работу нескольких вычислительных узлов.

💡
Основная идея RPC-server — преодолеть ограничения одной видеокарты, объединив ресурсы нескольких устройств через сеть. Это особенно актуально для запуска моделей размером 70B+ параметров, которые не помещаются в память даже топовых GPU.

Архитектура и принцип работы

RPC-server в llama.cpp построен на основе протокола gRPC и состоит из двух основных компонентов:

  • Сервер (worker) — запускается на каждом вычислительном узле, загружает часть модели и выполняет вычисления по запросу
  • Клиент (master) — координирует работу серверов, распределяет слои модели и агрегирует результаты

Модель разделяется по слоям между доступными серверами. Когда клиенту нужно выполнить инференс, он последовательно отправляет данные через каждый слой, перемещаясь между серверами по сети.

КомпонентРольТребования
Master (клиент)Координация, агрегацияМинимальные, может быть CPU-only
Worker 1Слои 0-20GPU с достаточной VRAM
Worker 2Слои 21-40GPU с достаточной VRAM
Worker NОстальные слоиGPU с достаточной VRAM

Настройка и запуск: практический пример

1Подготовка окружения

Сначала нужно собрать llama.cpp с поддержкой gRPC. Убедитесь, что у вас установлены все зависимости:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -DLLAMA_BUILD_SERVER=ON -DLLAMA_GRPC=ON
make -j$(nproc)

2Запуск серверов (workers)

На каждом вычислительном узле запускаем сервер с указанием порта и части модели:

# На узле 1 (192.168.1.10):
./bin/llama-rpc-server --model /path/to/model.gguf \
  --host 0.0.0.0 --port 50051 \
  --n-gpu-layers 20 \
  --ctx-size 4096

# На узле 2 (192.168.1.11):
./bin/llama-rpc-server --model /path/to/model.gguf \
  --host 0.0.0.0 --port 50052 \
  --n-gpu-layers 20 \
  --ctx-size 4096

3Запуск клиента (master)

На основном узле запускаем клиент, который будет координировать работу:

./bin/llama-rpc-client \
  --servers 192.168.1.10:50051,192.168.1.11:50052 \
  --prompt "Расскажи о квантовой механике" \
  --n-predict 256

Важно: Сетевая задержка критически влияет на производительность. Для достижения максимальной скорости используйте InfiniBand или хотя бы 10 Гбит Ethernet. В нашем руководстве по масштабированию локальных LLM подробно разбираются оптимальные конфигурации сети.

Бенчмарк: производительность в различных конфигурациях

Мы провели тестирование на конфигурации с двумя RTX 4090 (24 ГБ каждая) и одной RTX 3090 (24 ГБ). Модель: Llama 3.1 70B в формате Q4_K_M.

КонфигурацияТокенов/секЗадержка первого токенаИспользование VRAM
Одна RTX 4090 (частично в RAM)4.2850 мс24 ГБ + 32 ГБ RAM
Две RTX 4090 (NVLink)18.7120 мс48 ГБ
Две RTX 4090 (RPC, 1 Гбит)9.3450 мс48 ГБ
Две RTX 4090 (RPC, 10 Гбит)14.1280 мс48 ГБ
RTX 4090 + RTX 3090 (RPC)12.8310 мс48 ГБ

Как видно из результатов, RPC-server показывает вполне конкурентную производительность при использовании быстрой сети. Разница с NVLink составляет около 25%, что приемлемо для многих сценариев использования.

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

Llama.cpp RPC-server — не единственный способ распределенных вычислений для LLM. Рассмотрим основные альтернативы:

РешениеПлюсыМинусыЛучший сценарий
Llama.cpp RPC-serverПростота, совместимость, оффлайнЭкспериментальный, требует ручной настройкиГетерогенные системы, существующий парк GPU
vLLM с Tensor ParallelismВысокая производительность, бэтчингТребует однородных GPU, сложная настройкаПродакшен-среда, инференс API
Ollama с несколькими GPUПростота использования, автоматизацияОграниченная гибкость, меньший контрольБыстрый старт, разработка
TensorFlow/PyTorch DistributedПолный контроль, гибкостьВысокий порог входа, ресурсоемкостьИсследования, кастомные архитектуры

Для более полного сравнения фреймворков рекомендую наш обзор фреймворков для локального запуска LLM в 2025.

Практические сценарии использования

Сценарий 1: Объединение разнородного железа

У вас есть сервер с RTX 6000 Ada (48 ГБ) и рабочая станция с RTX 4090 (24 ГБ). Вместе они могут запускать модели 120B+ параметров:

# Пример Python-клиента для RPC-server
import grpc
import llama_pb2
import llama_pb2_grpc

# Подключаемся к серверам
channels = [
    grpc.insecure_channel('192.168.1.100:50051'),
    grpc.insecure_channel('192.168.1.101:50052')
]

stubs = [llama_pb2_grpc.LlamaServiceStub(ch) for ch in channels]

# Отправляем запрос
request = llama_pb2.GenerateRequest(
    prompt="Напиши техническое описание системы",
    max_tokens=500
)

# Распределяем вычисления
response = stubs[0].Generate(request)
# Дальнейшая обработка через цепочку серверов

Сценарий 2: Масштабирование для исследовательских задач

При тестировании различных архитектур моделей или сравнительного анализа промптов можно временно объединять ресурсы нескольких машин для ускорения экспериментов.

Сценарий 3: Резервирование и отказоустойчивость

RPC-архитектура позволяет создавать системы, где при отказе одного GPU вычисления автоматически перераспределяются на остальные узлы.

Совет: Для production-среды рассмотрите использование Kubernetes с llama.cpp в контейнерах. Это даст автоматическое масштабирование, мониторинг и отказоустойчивость.

Оптимизация производительности

Чтобы добиться максимальной скорости в распределенной конфигурации:

  1. Сеть: Используйте минимум 10 Гбит Ethernet, а лучше InfiniBand или NVLink over Fabric
  2. Балансировка: Распределяйте слои пропорционально производительности GPU
  3. Квантование: Используйте Q4_K_M или Q3_K_M для лучшего баланса качества/скорости
  4. Буферизация: Настройте размеры буферов в соответствии с сетевыми задержками
  5. Тепловой режим: Обеспечьте адекватное охлаждение всех GPU

Подробнее о настройке железа читайте в нашем гайде про Dual RTX 3090 с NVLink.

Ограничения и проблемы

Несмотря на потенциал, llama.cpp RPC-server имеет существенные ограничения:

  • Экспериментальный статус: Функция находится в активной разработке, возможны breaking changes
  • Сетевая задержка: Каждый слой требует сетевого обмена, что создает bottleneck
  • Отсутствие бэтчинга: Невозможно эффективно обрабатывать несколько запросов одновременно
  • Ограниченная документация: Приходится разбираться в исходном коде
  • Нет динамической балансировки: Распределение слоев фиксировано при запуске

Кому подойдет llama.cpp RPC-server?

АудиторияРекомендацияАльтернативы
Исследователи/энтузиастыОтлично подходит для экспериментовOllama, локальный запуск
Малый бизнесМожно использовать с осторожностьюvLLM, облачные API
Корпоративные пользователиТолько для PoC, не для продакшенаNVIDIA NIM, Triton
Облачные провайдерыНе рекомендуетсяСобственные решения

Будущее распределенных вычислений для локальных LLM

Развитие таких инструментов, как llama.cpp RPC-server, указывает на важный тренд: демократизация доступа к большим моделям. В будущем мы можем ожидать:

  • Более эффективные протоколы обмена между узлами
  • Автоматическую оптимизацию распределения слоев
  • Поддержку гетерогенных вычислений (GPU + NPU)
  • Интеграцию с оркестраторами типа Kubernetes

Уже сегодня такие подходы позволяют создавать интересные проекты, как офлайн-ассистент для слепых на Gemma 3n, используя доступное железо.

💡
Если вы только начинаете работать с локальными LLM, рекомендую сначала изучить основные ошибки при локальном запуске, а уже потом переходить к распределенным конфигурациям.

Выводы

Llama.cpp RPC-server — это мощный, хотя и экспериментальный инструмент для тех, кто хочет выйти за пределы возможностей одной видеокарты. Он особенно полезен для:

  • Исследователей, тестирующих большие модели
  • Энтузиастов с разнородным железом
  • Организаций, имеющих парк GPU, которые хотят использовать их более эффективно

При правильной настройке сети можно достичь 70-80% производительности от идеальной конфигурации с NVLink. Главное — понимать ограничения и использовать инструмент в подходящих сценариях.

Распределенные вычисления для локальных LLM — это не будущее, а настоящее. И llama.cpp RPC-server — один из самых доступных способов прикоснуться к этой технологии уже сегодня.