llama.cpp RPC-server: тесты и настройка распределенных вычислений | AiManual
AiManual Logo Ai / Manual.
29 Дек 2025 Инструмент

llama.cpp RPC-server: дистрибутивные вычисления на старом железе — тесты и настройка

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

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

Если вы экспериментируете с большими языковыми моделями (LLM) локально, то наверняка сталкивались с проблемой нехватки ресурсов. Современные модели вроде Llama 3 или Mistral требуют десятки гигабайт оперативной памяти и мощные GPU. Но что делать, если у вас есть несколько старых компьютеров или серверов, которые по отдельности не справляются с задачей?

Именно для этого создан llama.cpp RPC-server — компонент фреймворка llama.cpp, который позволяет распределить нагрузку по вычислениям между несколькими машинами по сети. Это открывает возможность использовать совокупную мощность старого «железа» для запуска крупных моделей, которые не помещаются в память одного устройства.

Ключевая идея: RPC-server превращает каждый компьютер в узел распределенной сети, где главный сервер (master) координирует работу, а воркеры (workers) выполняют тяжелые матричные вычисления для разных слоев нейросети.

Основные возможности llama.cpp RPC-server

  • Распределенный inference: Модель делится на слои, которые могут выполняться на разных физических машинах.
  • Поддержка различных бэкендов: Совместимость с CPU (через BLAS), Vulkan, CUDA, Metal и OpenCL, что позволяет задействовать даже старые видеокарты.
  • Простой протокол на основе HTTP: Легко интегрируется и отлаживается.
  • Эффективная загрузка моделей: Каждый воркер загружает только свою часть модели, экономя общую оперативную память.
  • Гибкая настройка: Возможность указать, какие именно слои модели выполнять на каждом воркере.

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

Инструмент / ПодходПлюсыМинусыКогда выбирать
llama.cpp RPC-serverМаксимальная гибкость, работа на разнородном железе, низкие системные требования на каждом узле, open-source.Требует ручной настройки сети, latency зависит от скорости соединения.Для объединения нескольких слабых машин, использования старых GPU (Vulkan/CUDA), экспериментов.
Единый мощный сервер (например, с vLLM)Высокая производительность, низкая задержка, проще в настройке.Требует дорогого современного железа (много VRAM).Для продакшена, когда есть бюджет на мощную GPU.
Облачные API (OpenAI, Anthropic)Нулевые затраты на инфраструктуру, высочайшая доступность и качество.Постоянные расходы, зависимость от интернета, вопросы приватности данных.Для коммерческих проектов без своей инфраструктуры.
Другие фреймворки (TensorFlow Serving, TorchServe)Промышленные решения, богатый функционал, кластеризация.Высокий порог входа, избыточны для простых LLM-задач, больший overhead.Для крупных ML-пайплайнов в корпоративной среде.
💡
Интересный факт: подход к распределенным вычислениям не нов. Аналогичные принципы используются в проектах вроде Vigil — нового инструмента для безопасности LLM, где задачи также могут распределяться для анализа угроз.

Практическая настройка: пошаговая инструкция

1Подготовка и сборка

Убедитесь, что на всех машинах (master и workers) установлены необходимые зависимости и собран llama.cpp с поддержкой RPC.

# Клонируем репозиторий на всех узлах
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# Собираем с поддержкой RPC и Vulkan (для старых AMD/NVIDIA карт)
make LLAMA_RPC=1 LLAMA_VULKAN=1 -j$(nproc)

2Запуск воркеров

На каждой машине-воркере запускаем сервер, указывая модель и слои, за которые он отвечает. Например, загрузим модель MiMo-V2-Flash — ту самую «темную лошадку от Xiaomi, которая бьет гигантов в математике и коде».

# На Worker 1 (отвечает за слои 0-15)
./server -m models/mixtral-8x7b-v0.1.Q4_K_M.gguf --rpc-serve --rpc-layers 0 15 --host 192.168.1.101
# На Worker 2 (отвечает за слои 16-31)
./server -m models/mixtral-8x7b-v0.1.Q4_K_M.gguf --rpc-serve --rpc-layers 16 31 --host 192.168.1.102

3Настройка и запуск главного сервера

На master-машине запускаем сервер, который будет координировать запросы к воркерам.

./server -m models/mixtral-8x7b-v0.1.Q4_K_M.gguf --rpc \
  --rpc-servers http://192.168.1.101:8080,http://192.168.1.102:8080 \
  --host 0.0.0.0 --port 8080

4Тестирование и использование

Теперь к master-серверу можно обращаться через стандартный HTTP API или CLI llama.cpp.

# Пример запроса через curl
curl http://192.168.1.100:8080/completion -d '{
  "prompt": "Объясни квантовую запутанность простыми словами",
  "n_predict": 128
}'

Важно: Скорость сети критична! Для достижения приемлемой производительности узлы должны быть связаны гигабитной сетью (LAN). Высокий latency между узлами сильно замедлит генерацию текста.

Результаты тестов производительности

Мы протестировали связку из двух старых систем:

  • Master: Intel Core i5-6500, 16 GB RAM (только CPU).
  • Worker 1: Intel Xeon E5-2670, 32 GB RAM, NVIDIA GTX 1060 6GB (Vulkan).
  • Worker 2: AMD FX-8350, 16 GB RAM, AMD Radeon RX 580 8GB (Vulkan).
Модель (квант.)КонфигурацияСкорость (токенов/с)Загрузка GPU
Llama 3 8B (Q4_K_M)Один Xeon + GTX 1060 (полная модель)~12.5 т/с~95% (1060)
Llama 3 8B (Q4_K_M)RPC: Xeon (слои 0-20) + FX (слои 21-40)~8.7 т/с~70% (1060), ~65% (RX 580)
Mixtral 8x7B (Q4_K_M)RPC: оба рабочих + мастер на CPU~4.2 т/с~85% на каждой GPU

Вывод: RPC-режим позволяет запустить модель, которая не помещается на одну видеокарту (например, Mixtral), ценой снижения общей скорости из-за накладных расходов на передачу данных по сети. Однако для интерактивного чата или batch-обработки 4-5 токенов в секунду может быть вполне достаточно.

Оптимизация и лучшие практики

  • Балансировка слоев: Распределяйте слои между воркерами так, чтобы загрузка GPU была примерно равной. Мониторьте ее через nvidia-smi или radeontop.
  • Квантование — ваш друг: Используйте квантованные модели (Q4_K_M, Q5_K_M). Они в разы меньше и быстрее при минимальной потере качества.
  • Локальная сеть: Используйте проводное гигабитное соединение (Ethernet). Wi-Fi не подходит из-за нестабильного latency.
  • Память: Убедитесь, что на master-ноде достаточно ОЗУ для обработки входных и выходных данных всех потоков.
💡
Творческий подход к распределению ресурсов напоминает принципы, используемые в приложении Splat, которое превращает фото в раскраски для детей с помощью ИИ. Там также тяжелые задачи рендеринга могут распределяться для ускорения процесса.

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

Идеальная аудитория для этого инструмента:

  1. Энтузиасты и исследователи с парком разнородного старого железа, желающие запускать современные LLM без капитальных вложений.
  2. Небольшие стартапы или лаборатории, тестирующие гипотезы с локальными моделями перед переходом на облака.
  3. Разработчики, создающие прототипы распределенных AI-систем или изучающие внутреннее устройство inference.
  4. Образовательные учреждения, которые могут задействовать компьютерные классы для параллельных вычислений.

Не стоит выбирать RPC-server, если: вам нужна максимально низкая задержка (чат-бот в реальном времени), вы работаете в продакшене с высокими нагрузками или у вас нет возможности обеспечить стабильную высокоскоростную сеть между узлами.

Заключение

llama.cpp RPC-server — это мощный и гибкий инструмент, который демократизирует доступ к большим языковым моделям. Он позволяет превратить кучу старого, казалось бы, бесполезного «железа» в распределенный вычислительный кластер. Как и в случае с нейросетью, переписывающей заголовки в смешные и ироничные, здесь важна не raw мощность, а креативное применение технологии.

Несмотря на накладные расходы и сложность начальной настройки, этот подход открывает уникальные возможности. Он служит мостом между локальными экспериментами и промышленными масштабами, напоминая, что иногда эффективность заключается не в обновлении оборудования, а в умном распределении того, что уже есть. Как показывает практика, даже старые системы могут внести свой вклад в современные AI-разработки, подобно тому как Google Gemini сделал голосовой поиск по-настоящему человечным — через оптимизацию и новые подходы к использованию ресурсов.