# llama.cpp RPC: модель на нескольких компьютерах без открытого порта

Источник: https://modelium.tech/zhurnal/llama-cpp-rpc-neskolko-kompyuterov/

llama.cpp RPC позволяет основному процессу передавать вычисления на устройства других компьютеров, но разработчики называют этот backend экспериментальным и небезопасным. Пробовать его стоит только в изолированном тестовом контуре с доверенными узлами: не открывайте RPC-порт в сеть. Для первого опыта соедините локальные RPC-серверы через защищённые туннели, а затем сравните логи и время ответа с запуском без RPC; ускорение не гарантировано.

**Безопасность важнее запуска.** Официальная документация v0.5.0 на 27 сентября 2026 года называет RPC proof-of-concept, хрупким и небезопасным: RPC-сервер нельзя открывать в общедоступной сети или использовать с чувствительными данными. Политика проекта прямо запрещает этот путь, если нет изолированного доверенного контура. Ниже — схема *лабораторного* опыта через SSH-туннели, не инструкция для корпоративного продакшена и не гарантия безопасности. Modelium команды и модель не запускал. [s1](#src-s1) [s2](#src-s2)

## Что делает RPC и когда его не выбирать

RPC здесь — не HTTP API для клиентского приложения. Главный процесс `llama-cli` либо `llama-server` соединяется с отдельными `ggml-rpc-server` на других машинах и использует их вычислительные устройства. Для этого и удалённые узлы, и главный процесс собираются с `GGML_RPC=ON`. По описанию разработчиков передаются вычисления, веса модели и KV-кэш; распределение между локальными и удалёнными устройствами по умолчанию учитывает доступную память, а не гарантирует равную нагрузку. [s1](#src-s1) [s4](#src-s4) [s5](#src-s5)

Не выбирайте этот путь для обработки рабочих документов, персональных данных, клиентов в общей сети и любой среды, где к порту могут обратиться чужие узлы. Исходный RPC README запрещает публичную сеть и чувствительное окружение; отдельная политика безопасности рекомендует не использовать RPC вовсе, если нельзя обеспечить безопасную изоляцию. В опубликованном advisory описана удалённая эксплуатация старого RPC-кода при доступе к TCP-порту. Указанная там граница затронутых сборок `<= b7991` **не** означает, что v0.5.0 проверена Modelium на отсутствие иных ошибок или пригодна для продакшена. [s1](#src-s1) [s2](#src-s2) [s8](#src-s8)

Если цель — просто запуск одного GGUF-файла, используйте обычный [llama.cpp](/zhurnal/llama-cpp/) на одной машине. Для нескольких одновременных клиентов или моделей не путайте RPC с роутером `llama-server`: это разные функции. [s5](#src-s5)

## Как подготовить тестовый контур

Понадобятся основной компьютер, хотя бы один тестовый узел с доверенным доступом по SSH, выделенные ресурсы CPU/GPU, совместимый GGUF-файл и одинаковый исходный код `llama.cpp` на всех узлах. Для сравнимости в этом примере используется стабильный тег `v0.5.0`, указывающий на commit `7fe450e19305b828c199d602c23a8337aaa1f03b`; это дата проверки материала, не обещание совместимости любых других версий. GPU-сборка зависит от драйвера и toolkit конкретной платформы. [s1](#src-s1) [s3](#src-s3) [s6](#src-s6)

Не передавайте реальные документы или секреты в этот опыт. Сетевое правило должно оставлять RPC-порт доступным только внутри каждой машины; SSH входить должен лишь с контролируемого основного узла. Туннель шифрует транспорт по выбранному маршруту, но не устраняет дефекты RPC-кода и не делает чужой сервер доверенным. Это защитное условие редакции, а не функция, которую мы проверили на стенде. [s1](#src-s1) [s2](#src-s2) [s7](#src-s7)

## Как собрать обе стороны по документации

На *каждом* узле получите одну и ту же ревизию исходников, затем настройте сборку. Пример CPU-сборки; для CUDA документация RPC добавляет `-DGGML_CUDA=ON`, если соответствующий toolkit уже установлен. [s1](#src-s1) [s3](#src-s3)

git clone https://github.com/ggml-org/llama.cpp.gitcd llama.cppgit checkout 7fe450e19305b828c199d602c23a8337aaa1f03bcmake -S . -B build -DGGML_RPC=ONcmake --build build --config Release

Это команды из способа сборки проекта и RPC-настройки, сведённые в один воспроизводимый пример; Modelium не проверял их исполнением. На основном компьютере сначала убедитесь, что обычный `build/bin/llama-cli` загружает выбранный локальный GGUF без RPC. Укажите путь к *своему* проверенному файлу, а не выдуманный идентификатор модели. Формат GGUF обязателен для llama.cpp; источник весов, лицензию и происхождение кванта проверяйте отдельно. Размер файла не равен требуемым RAM или VRAM: контекст и KV-кэш тоже используют память. [s1](#src-s1) [s4](#src-s4) [s6](#src-s6)

## Как соединить узлы, не публикуя RPC-порт

На удалённой тестовой машине запустите RPC-сервер с привязкой к loopback. Исходный код v0.5.0 задаёт `127.0.0.1:50052` по умолчанию; в документации RPC приведён такой же endpoint. Не меняйте `--host` на `0.0.0.0` ради удобства. Запись `CUDA0` в примере документации не означает, что GPU с таким именем есть на вашем узле: без ускорителя сервер может выставить CPU. [s1](#src-s1) [s7](#src-s7)

./build/bin/ggml-rpc-server --host 127.0.0.1 --port 50052

На основном компьютере откройте отдельный SSH-туннель к **каждому** удалённому узлу. Следующие адреса и имена — шаблон для вашей тестовой сети, не реальные серверы Modelium. Каждый туннель занимает свой локальный порт; если узел один, нужна только первая строка. [s1](#src-s1) [s7](#src-s7)

ssh -N -L 127.0.0.1:15052:127.0.0.1:50052 user@host-assh -N -L 127.0.0.1:15053:127.0.0.1:50052 user@host-b

Команды SSH выполняйте в отдельных сессиях. Если ваш SSH-клиент или политика узла не разрешают local forwarding, остановитесь и не заменяйте туннель публичной привязкой RPC. Проверка на основной машине: локальные порты должны слушать только `127.0.0.1`, на удалённых узлах RPC — тоже только `127.0.0.1`; закрытые ACL проверяются отдельно. Без этих условий к шагу запуска не переходите. SSH-туннель и эта проверка — предложенная редакцией схема снижения экспозиции, **не** официальный безопасный deployment pattern llama.cpp. [s1](#src-s1) [s2](#src-s2) [s7](#src-s7)

## Как проверить распределённый ответ

Сначала на основном узле запишите базовый ответ и время для того же GGUF, промпта и параметров без `--rpc`. После этого используйте локальные адреса SSH-туннелей; флаг `--rpc` документирован как список `host:port` через запятую, а `--n-gpu-layers` управляет выгрузкой слоёв на устройства. Замена документированных удалённых адресов на локальные tunnel-endpoints — составной пример, который Modelium не исполнял. [s1](#src-s1) [s4](#src-s4)

./build/bin/llama-cli -m ./model.gguf --single-turn -p 'Ответь одним словом: готово?' --rpc 127.0.0.1:15052,127.0.0.1:15053 --n-gpu-layers 99

Для одного узла удалите второй адрес. Проверьте не только текст ответа: сохраните stdout и stderr главного процесса, логи обоих RPC-серверов, список обнаруженных устройств и время загрузки модели. Без журналов offload ответ мог прийти только с локального устройства; одно слово в ответе не доказывает ни распределения, ни корректности. `--list-devices` позволяет посмотреть доступные устройства. Затем повторите идентичный тест без RPC и сравните время загрузки и генерации на собственных данных. [s1](#src-s1) [s4](#src-s4)

По документации RPC веса и KV-кэш распределяются пропорционально доступной памяти; `--tensor-split` задаёт ручные пропорции для распределения данных между устройствами. Не применяйте произвольное значение «пополам»: порядок и число обнаруженных устройств должны быть подтверждены логами. TCP-соединение может стать узким местом; документация описывает локальный кэш и RDMA, но включать кэш или RDMA до базовой проверки не нужно. Ускорение, минимальные требования памяти и надёжность разных сочетаний CPU/GPU Modelium не измерял. [s1](#src-s1) [s4](#src-s4)

Если нужен HTTP API для *тестового* клиента, `llama-server` также принимает `--rpc`; его HTTP-слой имеет собственные параметры и `/health`. Не выводите HTTP-порт или RPC-порт в недоверенную сеть; проверка `/health` говорит о готовности HTTP-сервера, а не о защищённости RPC и не о том, что задействованы оба удалённых устройства. [s2](#src-s2) [s5](#src-s5)

## Что делать, если опыт не удался

- **Нет соединения:** проверьте, работает ли RPC-процесс на удалённой машине, подняты ли оба туннеля, и слушают ли ожидаемые loopback-порты. Открывать `50052` наружу нельзя. [s1](#src-s1) [s7](#src-s7)

- **Не видно GPU:** сначала проверьте сборку нужного backend, доступность драйвера и `--list-devices`; без ускорителей RPC-документация показывает CPU fallback. [s1](#src-s1) [s3](#src-s3) [s4](#src-s4)

- **Не помещается модель:** уменьшайте модель или контекст, проверяйте реальное потребление на каждом узле; размер GGUF-файла не даёт достаточного расчёта. [s1](#src-s1) [s4](#src-s4) [s6](#src-s6)

- **Не быстрее одного компьютера:** отдельно сравните время загрузки, скорость генерации и сетевые задержки; дополнительные узлы не являются автоматическим ускорителем. Для начала вернитесь к [локальному запуску](/zhurnal/llama-cpp/) и [выбору GGUF](/zhurnal/gguf-i-kvantovanie/). [s1](#src-s1)

После опыта остановите оба RPC-процесса и SSH-туннели. Для задачи с чувствительными данными или корпоративным доступом не переносите этот прототип в работу по инерции: заново выбирайте архитектуру, изоляцию и границы доверия по собственной модели угроз. [s1](#src-s1) [s2](#src-s2)

## Источники

1. [llama.cpp v0.5.0 — RPC README](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/tools/rpc/README.md) — получено 2026-09-27
2. [llama.cpp v0.5.0 — Security Policy](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/SECURITY.md) — получено 2026-09-27
3. [llama.cpp v0.5.0 — Build guide](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/docs/build.md) — получено 2026-09-27
4. [llama.cpp v0.5.0 — CLI options](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/tools/cli/README.md) — получено 2026-09-27
5. [llama.cpp v0.5.0 — Server options and health](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/tools/server/README.md) — получено 2026-09-27
6. [llama.cpp v0.5.0 — Working with models](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/docs/models.md) — получено 2026-09-27
7. [llama.cpp v0.5.0 — RPC server source and CLI defaults](https://github.com/ggml-org/llama.cpp/blob/7fe450e19305b828c199d602c23a8337aaa1f03b/tools/rpc/rpc-server.cpp) — получено 2026-09-27
8. [llama.cpp maintainer advisory GHSA-j8rj-fmpv-wcxw](https://github.com/ggml-org/llama.cpp/security/advisories/GHSA-j8rj-fmpv-wcxw) — получено 2026-09-27
