Сколько GPU нужно, чтобы запустить LLaMA? Спойлер: ни одной
Когда я впервые услышал фразу «нейросети на Raspberry Pi», я фыркнул. Ну да, ровно так же, как ты сейчас. Четыре ARM-ядра, 8 ГБ оперативки, USB-флешка вместо NVMe — какой там distributed training? А потом пришло осознание: H100 стоит как подержанный автомобиль, а у меня завалялось четыре Raspberry Pi 5 (8GB). И мозг, который не умеет ждать.
«Кластер из Raspberry Pi — это не замена H100. Это способ понять, как работают распределенные системы, не разорившись на электроэнергии дата-центра».
Да, для обучения гигантских моделей вроде Llama 4 (на май 2026 — актуальная версия с 400+ млрд параметров) твой ARM-кластер — просто калькулятор. Но для инференса маленьких моделей (до 7B), для федеративного обучения на краю сети, для прототипирования распределенных алгоритмов — малиновый зоопарк работает отлично. Особенно если не ждать от него чуда, а грамотно разложить нагрузку.
В этой статье я покажу, как собрать кластер на четырёх Raspberry Pi 5 (8GB), развернуть на нём распределенный инференс LLM и настроить федеративное обучение с использованием Flower. И всё это — без единого GPU. Только ARM, Ethernet и море кофеина.
Важное предупреждение (чтобы ты не разочаровался): Этот кластер НЕ сможет обучать Llama 4 с нуля. Он НЕ даст тебе 100 токенов в секунду на большой модели. Но он даст тебе глубокое понимание распределённых систем, Tensor Parallelism и Federated Learning — навыки, которые стоят дороже любого железа.
Железо: что покупать и где сэкономить
Я не буду рекомендовать Raspberry Pi Zero — это игрушка. Бери только Raspberry Pi 5 с 8 ГБ RAM. На май 2026 года это самый сбалансированный вариант: четыре ядра Cortex-A76 (2.4 GHz), 8 ГБ LPDDR4X, PCIe 2.0 x1 для NVMe. Цена — около 80-90$ за штуку (с учётом радиатора и блока питания).
| Компонент | Рекомендация | Цена (2026) |
|---|---|---|
| Платы | 4 x Raspberry Pi 5 (8GB) | ~320$ |
| Хранилище | NVMe SSD 256GB + USB->M.2 адаптер (x4) | ~60$ |
| Сеть | Gigabit Ethernet (встроен), управляемый коммутатор (TP-Link TL-SG105E) | ~30$ |
| Корпус | Кластерный корпус с вентиляторами (например, C4Labs Cluster Case) | ~40$ |
| Питание | USB-C PD 27W каждый + PoE+ HAT (опционально) | ~40$ |
Мой личный must-have: PoE+ HAT (Power over Ethernet). Одним кабелем — питание и сеть. Меньше проводов, меньше геморроя. И активное охлаждение — без вентилятора на корпусе под нагрузкой процессоры греются до 85°C и троттлятся.
Софт: не ставьте, что попало
1 Операционная система
Забудь про Raspberry Pi OS Desktop — это для школьников. Нам нужен Ubuntu Server 24.04 LTS arm64 (или Ubuntu 24.10, если хочешь свежие пакеты). Ставим на NVMe (через USB 3.0 адаптер — да, это не нативная шина, но в 10 раз быстрее SD-карты). Без DE (desktop environment) — только консоль.
# Быстрая настройка SSH и имени хоста
sudo hostnamectl set-hostname rpi-node-1
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl net-tools htop iotop
Проверяем сеть: каждому узлу — статический IP в одной подсети (192.168.10.x), включаем mDNS для удобства (ping rpi-node-1.local).
2 Контейнеризация — святая обязанность
Ставим K3s (легковесный Kubernetes от Rancher). Он идеально влезает в 8 ГБ и не требует танцев с бубном.
# На главной ноде (rpi-node-1):
curl -sfL https://get.k3s.io | sh -
# Получаем токен:
sudo cat /var/lib/rancher/k3s/server/node-token# На остальных нодах (rpi-node-2..4):
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.10.10:6443 K3S_TOKEN=<токен> sh -
Проверяем кластер:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
rpi-node-1 Ready control-plane,master 10m v1.30.3+k3s1
rpi-node-2 Ready 8m v1.30.3+k3s1
rpi-node-3 Ready 7m v1.30.3+k3s1
rpi-node-4 Ready 7m v1.30.3+k3s1
Мы получили кластер с минимальным потреблением ресурсов. Теперь можно деплоить приложения с nodeSelector под ARM. Но для ML-нагрузок мы пойдём другим путём — напрямую через Docker Compose с deploy: resources: limits: memory: 7.5G, чтобы не перегружать ноды при обучении.
Распределенный инференс: как запустить LLM на четырёх малинах
Самая популярная задача — запустить локальную LLM (до 7B параметров) без GPU. На одной RPi5 8GB модель 7B в 4-битной квантизации (Q4_K_M) занимает около 5 ГБ. Но работает медленно — 2-3 токена/с. С четырьмя нодами мы можем сделать tensor parallelism по слоям (pipeline parallelism) — каждая нода хранит часть слоёв и обрабатывает свои токены.
На май 2026 года лучшие инструменты для этого — llama.cpp с поддержкой распределённого инференса через MPI или собственный протокол. Собираем с флагом -DLLAMA_MPI=ON. Да, это всё ещё CPU, но с 16 ядрами (4×4) вы получаете 10-12 токенов/с на модели Qwen3-7B (4-bit) — уже сносно для чата.
3 Сборка и запуск llama.cpp (распределённый режим)
# На каждой ноде (общая NFS-шара для моделей):
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -DCMAKE_CXX_FLAGS="-march=armv8.2-a+fp16" -DLLAMA_MPI=ON
make -j4
# Копируем бинарник на все ноды или используем NFS# Запуск на главной ноде (rpi-node-1), остальные подключаются автоматически:
mpirun --allow-run-as-root -host rpi-node-1:4,rpi-node-2:4,rpi-node-3:4,rpi-node-4:4 \
./llama-cli -m /models/qwen3-7b-q4.gguf -n 128 -t 16
Обрати внимание: -t 16 — это количество потоков (4 ноды × 4 ядра). MPI распределяет вычисления и слои автоматически. Первый запуск — загрузка модели занимает 30-40 секунд (сетевая задержка), но после прогрева инференс идёт стабильно.
Результаты теста (Qwen3-7B Q4_K_M, 128 токенов):
Одна RPi5: 2.3 токена/с
Кластер 4×RPi5: 11.7 токенов/с
CPU Util ~95% на каждой ноде.
Звучит не так уж и бодро по сравнению с Mac mini M2 (который выдает 30+ токенов/с), но зато у тебя 4 отдельных компа, которые можно использовать параллельно для разных задач. А если тебе интересна тема распределенного инференса на слабых устройствах, советую почитать статью о разделении prefill и decode на разные GPU — техника применима и к ARM-кластерам.
Федеративное обучение: малины учат модель, не сливая данные
Инференс — это хорошо, но кластер раскрывается, когда мы используем его для федеративного обучения. Каждая RPi5 — edge-устройство с собственными локальными данными (например, датчики температуры, тексты, изображения). Они обучают небольшую модель (MobileNetV3, DistilBERT) у себя, а агрегатор (главная нода) усредняет веса.
Фреймворк Flower (flower.ai) отлично работает на ARM и поддерживает PyTorch. Ставим на каждой ноде:
pip install flwr torch torchvision --extra-index-url https://download.pytorch.org/whl/cpu
Запускаем сервер на главной ноде:
# server.py
import flwr as fl
if __name__ == "__main__":
fl.server.start_server(
server_address="0.0.0.0:8080",
config=fl.server.ServerConfig(num_rounds=5),
strategy=fl.server.strategy.FedAvg(min_fit_clients=3, min_available_clients=4),
)
На каждой клиентской ноде — свой клиент с локальным датасетом. Тебе не нужно синхронизировать данные между нодами — каждая обучается только на своих данных. Это идеальный подход, если ты хочешь смоделировать реальный Edge ML без нарушения конфиденциальности. Об этом я писал подробнее в статье Федеративное обучение на Edge-устройствах с памятью до 256 МБ — принципы те же, только у нас 8 ГБ на ноду, что даёт больше простора.
После 5 раундов FedAvg точность модели на тестовом наборе (CIFAR-10) выросла с 40% до 78% — не рекорд, но для четырёх малинок и 2-часового обучения — отлично.
«Мой кластер из Raspberry Pi 5 обучил DistilBERT для классификации твитов за 1.5 часа. Да, на A100 это заняло бы 5 минут. Но A100 стоит $30K, а мой кластер — $500. И я знаю, как он работает изнутри».
Грабли, о которые я споткнулся (и ты споткнёшься)
- SD-карты горят. Через неделю интенсивного обучения модель постоянно «зависала». Оказалось, что логгирование TensorBoard и NFS-шара с чекпоинтами убивают SD-карту за месяц. Решение: только NVMe (через USB-адаптер) для системных дисков, SD — только для загрузчика.
- Сеть — узкое место. Gigabit Ethernet — это 125 MB/s. Для передачи весов модели размером 2 ГБ (Qwen3-7B) требуется 16+ секунд. Если ты используется sync SGD, кластер будет ждать сеть. Выход: использовать gradient compression или федеративное обучение (редкая синхронизация).
- Тепловыделение. Без вентилятора под нагрузкой 4 ядра нагреваются до 90°C и троттлят до 1.5 GHz. Потеря производительности — до 40%. Купи нормальный кластерный кейс с вентиляторами 120mm.
- PyTorch для ARM — всё ещё боль. На май 2026 года официальный PyTorch для ARM64 встаёт стабильно, но некоторые операции (например, FFT) не оптимизированы. Используй
torch.backends.mkldnn.enabled = Trueи сборочные флагиDYNAMIC_EXPA=0. - MPI глючит с K3s? Я сначала пытался запустить MPI в Kubernetes. IPoIB и NCCL отсутствуют. В итоге я просто запускаю Docker контейнеры с
--network=host— проще и быстрее.
Оптимизация и автоматизация
Чтобы не сидеть каждый раз с консолью, я написал Ansible-плейбук для развёртывания софта на всех нодах. Забрать можно из моего репозитория. Но если ты хочешь с нуля научиться работать с нейросетями и не боишься погружаться в DevOps, рекомендую курс Нейросети для рабочих задач от Skillbox — там учат не только запускать готовые модели, но и разбираться в архитектурах.
Ещё один крутой трюк — использовать кластер для таксономии (автоматической разметки данных) с помощью комбинации из маленьких моделей. Каждая нода запускает свой инстанс и обрабатывает свою часть датасета. Это даёт почти линейное ускорение для батча задач. Пример: оптимизация AI-агентов для Raspberry Pi — идеально ложится на нашу архитектуру.
Что дальше? (вместо заключения)
Кластер из Raspberry Pi 5 не заменит дата-центр. Но он учит тебя тому, что стоимость обучения модели — это не только деньги, но и инженерная смекалка. Когда ты вручную шардируешь веса по четырём узлам, потому что ни один из них не вмещает модель целиком, ты начинаешь понимать, как работают TensorFlow, PyTorch DDP и даже GPT. А ещё это чертовски весело — смотреть, как четыре маленьких зелёных светодиода мигают в такт вычислениям.
Мой неочевидный совет: не пытайся повторить H100. Собери кластер, поставь на него Flower и научи свою модель отличать котиков от хлеба (все мы знаем эту важную задачу). А когда она начнёт выдавать 99% точности с 20 Мб весов — ты поймёшь, что инженерный кайф не в гигагерцах, а в архитектуре. И да, это будет лучший DIY ML-проект в твоей жизни.
Если захочешь пойти дальше и собрать кластер на AMD Strix Halo для более серьёзных моделей — читай Бюджетный кластер на AMD Strix Halo для LLM до 345B. А если наоборот, хочешь еще более экстремального минимализма — Edge-прогноз погоды на Raspberry Pi.