Распределённый инференс больших LLM по локальной сети расширяет доступную память

Распределённый инференс больших LLM по локальной сети позволяет обойти лимит видеопамяти: веса слоёв размещаются на разных узлах, вычисления локальные, обмен KV‑кешем минимален. Реализации: llama.cpp через RPC и exo. Эффективно даже для MoE, без крупных задержек
Новости 2025 06 20

Распределённый инференс больших LLM по локальной сети расширяет доступную память

Автор отмечает, что главное для инференса крупных LLM — объём памяти под веса и активации. При локальном распределении слоёв по нескольким узлам память снимается как узкое место: каждый хост держит веса своих слоёв и вычисляет их локально, а передача промежуточных данных между машинами существенно легче загрузки весов. Важное архитектурное свойство: слои остаются последовательными, поэтому распараллеливание идёт за счёт распределения памяти, а не ускорения за счёт параллельности вычислений. По мнению автора, при достаточной скорости локальной сети общая инференс‑производительность не падает существенно, а суммарная видеопамять растёт линейно с числом машин. Реализация реализована в llama.cpp и exo, что делает идею практичной и доступной в обычной домашней сети.

Проблема ограничений памяти

Проблема ограничения памяти стоит перед большими моделями: их веса занимают сотни гигабайт. Так, 8-битные веса некоторых крупных моделей достигают примерно 700 ГБ, квантованные варианты — около 350 ГБ, а при квантовании до одного бита размер опускается примерно до 100 ГБ, что уже сильно ограничивает полезность такой версии. Веса финетюнов на базе популярных конфигураций тоже не помещаются в память большинства видеокарт.

Если веса не влезают в ОЗУ или видеопамять, каждый токен требует повторной загрузки с диска, и минимальная задержка становится понятна: размер модели делится на скорость чтения. Это означает, что даже при хорошей аппаратуре инференс теряет значительную часть ожидаемой скорости.

Архитектурная идея распределения

Архитектурная идея распределения инференса заключается в том, чтобы вычисление слоёв трансформера разместить сразу на нескольких машинах в локальной сети. Каждому узлу выделяется часть слоёв: он хранит веса соседних слоёв и выполняет их расчёт локально, не передавая всё в одну точку.

Передача промежуточных данных между машинами существенно меньше по объёму, чем загрузка весов, и потому не становится узким местом. Основной предел остаётся за памятью на узле, а не за сетью, поэтому при быстрой локальной сети распределение слоёв почти не снижает общую производительность. Возможна работа и по Wi‑Fi, хотя проводная сеть предпочтительнее для стабильности и скорости.

Практические реализации

Существуют как минимум два открытых проекта, поддерживающих локальное распределение инференса: llama.cpp и exo. В llama.cpp распределённый инферен добавлен ещё давным-давно поверх MPI, но настройка оказалась сложной, и позже перешли к реализации на основе RPC. Требуется единый билд на всех хостах с включённой поддержкой RPC (-DGGML_RPC). Затем на каждом узле, кроме главного, запускается rpc-server -H $IP_ADDR -c -m $USE_RAM_MB, а на главном выполняется инференс через llama-cli или llama-server с указанием опций и --rpc ${IP1}:50052, ${IP2}:50052 и т. д. При работе на Apple Silicon полезно увеличить общую память GPU командой "sudo sysctl iogpu.wired_limit_mb=$GPU_RAM_MB". Обёртки над llama.cpp/llama-server работают прозрачно.

Выбор реализации: llama.cpp против exo

llama.cpp предлагает разнообразие реализаций инференса под разные архитектуры: Apple, Nvidia, AMD GPUs, а также x86 с разной векторизацией и ARM CPU. При распределённой обработке допускается наличие хостов с разной архитектурой, что упрощает работу в локальной сети и позволяет объединять разные устройства. В exo процесс упрощён: запускаете exo на каждом хосте в LAN — и они автоматически соединяются ( Zeroconf ). Проблема в том, что у exo меньше оптимизированных бэкендов, и иногда возникают сложности с веб-интерфейсами. По общему мнению автора, llama.cpp остаётся более предсказуемым выбором, поскольку предлагает больше оптимизаций и обеспечивает стабильную работу в распределённых конфигурациях.

Особенности MoE и практические ограничения

Особенности MoE и практические ограничения. Если модель реализована через Mixture of Experts, задача распределения слоев становится чуть сложнее: в каждом слое сотни или тысячи экспертов, и выбор активных требует согласования между машинами, что усложняет маршрутизацию и синхронную загрузку параметров. Но общая идея не меняется: пропускная способность памяти остаётся узким местом, а не сеть. Весовые матрицы экспертов занимают основную часть памяти, а данные между узлами передаются лишь небольшими порциями. Чудес не бывает: требуется столько видеопамяти, сколько занимают веса модели, плюс немного контекстного окна. MoE может дать перераспределение вычислений, но не отменяет ограничений памяти и не превращает инференс в полностью параллельный процесс.

Вывод

Распределённый инференс по локальной сети позволяет увеличить доступную видеопамять за счёт хранения весов на разных узлах и последовательного вычисления слоёв. Это не даёт безграничной параллельности, но компенсирует ограничение памяти одной машины: веса занимают основную часть ресурсов, а передача промежуточных данных между слоями существенно меньше по объему, чем сами веса.

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

Поиск