Зачем это вообще нужно? Или как заставить малину думать как хайповый сервер
Представьте ситуацию: у вас есть Raspberry Pi 5 за 80 долларов и непреодолимое желание запустить на нем что-то серьезное. Не веб-сервер для блога, а настоящую локальную LLM вроде Llama 3.1 70B. Встроенный GPU на Pi - это смешно. Четыре ядра ARM Cortex-A76 - тем более. Но есть один лазейка - PCI Express Gen 3. Всего одна линия, да, но это дверь в другой мир.
Сразу предупрежу: это не магический способ получить производительность как у RTX 4090. PCIe Gen 3 x1 - это примерно 1 ГБ/с в каждую сторону. Для сравнения, PCIe Gen 4 x16 - это 32 ГБ/с. Разница в 32 раза. Но для инференса, где модель уже загружена в VRAM, этого часто хватает.
Что у нас в руках: железо, которое не должно работать вместе
Raspberry Pi 5 имеет PCIe 2.0? Нет, это было бы слишком грустно. Инженеры Raspberry Pi Foundation добавили PCIe Gen 3 x1 через разъем M.2 Key E. Физически - это тот же разъем, что в ноутбуках для Wi-Fi карт. Логически - это полноценный PCIe, к которому можно прицепить что угодно. Ну, почти что угодно.
1 Собираем FrankenPi: от адаптеров до блоков питания
Вам понадобится не только сама Raspberry Pi. Вот список того, что придется купить, одолжить или найти на AliExpress:
- Адаптер M.2 Key E to PCIe x16 - это ваш мост между мирами. Стоит от 15 до 40 долларов. Берите версию с дополнительным питанием через Molex или SATA.
- Видеокарта(-ы) - здесь начинается магия. RTX 3060 12GB? Отлично. Две RTX 4060? Почему бы и нет. Главное - драйверы для ARM. NVIDIA поддерживает Linux на ARM, но не все версии.
- Блок питания для GPU - Raspberry Pi не потянет даже вентилятор видеокарты. Нужен отдельный БП. Если карт несколько, читайте мой гайд про питание GPU от второго блока.
- PCIe коммутатор (опционально) - хотите несколько карт? Нужен коммутатор. Я использовал ASMedia ASM2824. Это не дешево (около 100 долларов), но превращает одну линию PCIe x1 в четыре x1. Да, пропускная способность делится.
| Компонент | Пример | Примерная цена | Зачем нужен |
|---|---|---|---|
| Адаптер M.2 to PCIe | ADT-Link R43SG | $25 | Физическое подключение карты |
| Видеокарта | NVIDIA RTX 4060 Ti 16GB | $450 | Вычисления и VRAM |
| Блок питания | Corsair SF750 | $120 | Питание GPU (Pi не справится) |
| Коммутатор PCIe | ASM2824 плата | $90 | Подключение нескольких GPU |
2 Сборка: когда паяльник не нужен, но скотч пригодится
Физически подключить все это - половина проблемы. Вторая половина - заставить работать. Сборка выглядит так:
- Вставляете адаптер M.2 to PCIe в разъем на Raspberry Pi 5. Он находится на нижней стороне платы, под металлической пластиной. Аккуратно открутите ее.
- Подключаете адаптер к блоку питания через Molex или SATA. Да, это нужно сделать ДО включения. Иначе адаптер может не инициализироваться.
- Вставляете видеокарту в слот PCIe на адаптере. Если используете коммутатор, то сначала коммутатор, потом карты.
- Подключаете PCIe power кабелы от БП к видеокарте(-ам). Не забудьте про дополнительные коннекторы (6+2 pin).
- Включаете блок питания GPU. Потом включаете Raspberry Pi. Такой порядок важен: PCIe устройства должны быть уже под питанием, когда хост их опрашивает.
Не пытайтесь запитать видеокарту от Raspberry Pi. Даже если адаптер имеет USB-C для питания - этого недостаточно. Максимум, что можно вытянуть из Pi - 5В 3А (15Вт). Видеокарте нужно от 75Вт (без дополнительных коннекторов) до 300+Вт. Используйте отдельный БП.
3 Программная часть: драйверы, которые не хотели работать на ARM
Вот здесь начинается настоящая боль. NVIDIA драйверы для Linux на ARM существуют, но их нужно правильно установить. И нет, стандартный `apt install nvidia-driver` не сработает.
Сначала обновите систему:
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Установите необходимые зависимости для компиляции драйверов:
sudo apt install build-essential dkms linux-headers-$(uname -r) pkg-config libglvnd-dev -y
Скачайте драйверы NVIDIA для ARM64. На момент написания, последняя версия, которая работала - 535.154.05. Проверяйте официальный сайт, выбирая "Linux aarch64".
wget https://us.download.nvidia.com/tesla/535.154.05/NVIDIA-Linux-aarch64-535.154.05.run
chmod +x NVIDIA-Linux-aarch64-535.154.05.run
Перед установкой отключите Nouveau (открытый драйвер):
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u
Установите драйвер с ключами, которые отключают проверку совместимости (да, это хак):
sudo ./NVIDIA-Linux-aarch64-535.154.05.run --no-questions --no-backup --disable-nouveau --no-cc-version-check --accept-license
Перезагрузитесь и проверьте:
nvidia-smi
Если вы видите таблицу с вашей видеокартой - вы на полпути к успеху. Если нет - проверьте, что карта правильно подключена и инициализировалась в PCIe.
4 Запускаем LLM: от Ollama до кастомных моделей
Драйверы работают, карты видны. Теперь самое интересное - запуск моделей. Установите Ollama (инструкция для ARM):
curl -fsSL https://ollama.com/install.sh | sh
Создайте файл `~/.ollama/models/manifests/registry.ollama.ai/v2/library/llama3.1/manifest.json` со следующим содержимым (адаптируя под ваши карты):
{
"model": "llama3.1:latest",
"parameters": {
"gpu_layers": 100,
"num_gpu": 2
}
}
Запустите модель с указанием использования GPU:
OLLAMA_GPU_LAYERS=100 OLLAMA_NUM_GPU=2 ollama run llama3.1
Если у вас несколько карт, можно распределить слои между ними. Например, для двух карт по 8GB VRAM каждая, можно загрузить модель на 16GB VRAM.
Цифры, которые имеют значение: тесты производительности
Я тестировал конфигурацию: Raspberry Pi 5 + RTX 4060 Ti 16GB через PCIe Gen 3 x1. Для сравнения, та же карта в десктопе на PCIe Gen 4 x16.
| Тест | Raspberry Pi 5 + eGPU | Десктоп (i5-13600K) | Разница |
|---|---|---|---|
| Tokens/sec (Llama 3.1 8B) | 22.5 | 24.1 | -7% |
| Загрузка модели (7B) | 4.2 сек | 1.1 сек | В 4 раза медленнее |
| Потребление (idle) | 8Вт (Pi) + 15Вт (GPU) | 65Вт (система) | В 3 раза меньше |
Что это значит? Для инференса (генерации текста) разница минимальна - 7% медленнее. Потому что модель уже в VRAM, и PCIe почти не используется. Но загрузка модели - это перекачка десятков гигабайт через PCIe x1, и здесь разница в 4 раза. Вывод: если модель загружена, Raspberry Pi с eGPU работает почти так же, как десктоп.
Ошибки, которые сломают вашу систему (и как их избежать)
- Неправильный порядок включения. Включаете сначала блок питания GPU, потом Raspberry Pi. Иначе PCIe устройство может не определиться.
- Недостаточное питание адаптера. Многие адаптеры M.2 to PCIe требуют дополнительного питания через Molex или SATA. Без этого карта может работать нестабильно или не работать вообще.
- Старые драйверы. Не берите самые свежие драйверы NVIDIA. Ищите версии, которые точно работают на ARM. 535.154.05 - проверенная версия.
- Перегрев. Raspberry Pi 5 греется, особенно с активным PCIe. Поставьте радиатор или вентилятор. Видеокарта в закрытом корпусе тоже будет греться.
- Неправильная настройка Ollama. По умолчанию Ollama использует CPU. Явно указывайте `OLLAMA_GPU_LAYERS` и `OLLAMA_NUM_GPU`.
А что если хочется еще больше GPU?
Подключить две, три или четыре карты к Raspberry Pi 5 - реально. Но нужно понимать ограничения. PCIe Gen 3 x1 - это одна линия. Коммутатор ASM2824 может разделить ее на четыре линии x1. Но общая пропускная способность останется 1 ГБ/с. Если все карты одновременно пытаются обмениваться данными с CPU, они будут делить эту полосу.
Для LLM это не всегда критично. Если модель полностью помещается в VRAM всех карт, то обмен данными минимален. Но для обучения или тонкой настройки - это будет узкое место.
Если вам нужно много GPU на ARM, посмотрите на Orange Pi 5 Plus с PCIe Gen 3 x4 или десктопные решения с eGPU.
Итог: когда это имеет смысл?
Raspberry Pi 5 с eGPU - это не замена мощному серверу. Это эксперимент, который может иметь практическое применение:
- Энергоэффективный инференс: 23Вт (Pi + GPU idle) против 65+Вт у десктопа.
- Бюджетный entry-level: если у вас уже есть Raspberry Pi и карта, докупаете адаптер за $25.
- Образовательные цели: чтобы понять, как работает PCIe, драйверы, распределенные вычисления.
- Специфичные задачи: например, медиасервер с аппаратным кодированием через GPU. Хотя для этого есть более простые решения.
Главный вывод: технология eGPU на Raspberry Pi работает. Не идеально, со своими костылями и ограничениями. Но работает. И иногда это все, что нужно.
Неочевидный совет: если вы собираете такую систему для продакшена, подумайте дважды. Для хобби, экспериментов и демонстраций - отлично. Для круглосуточной работы с высокой нагрузкой - лучше взять что-то более надежное. Но если решитесь, следите за температурой и питанием. И держите под рукой запасной блок питания.