Почему MacBook не тянет Llama 3.2, а RTX 4090 в шкафу простаивает
Ты купил MacBook Pro на M3 Max. 48 ГБ общей памяти, нейроядро - звучит круто. Пока не пытаешься запустить Llama 3.2 90B. Тогда Unified Memory превращается в узкое горлышко, а нейроядро просто смотрит на тебя грустными глазами. 18 токенов в секунду? Это не генерация текста, это наблюдение за высыханием краски.
А в это время в твоём ПК (или на полке) пылится RTX 4090 с её 24 ГБ быстрой видеопамяти. Или, что ещё обиднее, связка из двух RTX 3090 с NVLink, способная заглотить модель на 48 миллиардов параметров без намёка на одышку. Парадокс: железо есть, но использовать его с любимой macOS - технический детектив с плохим концом. Apple давно разошлась с NVIDIA, и официальных драйверов нет.
Вот тут и появляется он. Неофициальный, немного хакерский, но рабочий мост. TinyGPU.
Речь не о магическом ускорении игр или рендеринга. TinyGPU - это узкоспециализированный инструмент для одной задачи: пропускать вычисления больших языковых моделей через CUDA-ядро внешней NVIDIA-карты, подключенной к Mac. Это обходной путь. Грязный хак. Но в 2026 году - единственный рабочий вариант.
TinyGPU: не драйвер, а туннель для тензоров
Забудь про полноценную поддержку CUDA на macOS. TinyGPU работает по другому принципу. Это демон (сервис), который запускается на Mac и создаёт локальный TCP/UDP сокет. Софт для LLM, вроде модифицированного llama.cpp, подключается к этому сокету и передаёт ему вычисления. TinyGPU, в свою очередь, перенаправляет эти вызовы на драйверы CUDA, работающие на... внимательно... удалённой машине или в виртуальной среде.
Да, основной фокус проекта - сетевое разделение GPU. Но кто мешает запустить эту "удалённую" среду локально, в виртуальной машине или через контейнер на том же Mac? Именно это мы и сделаем.
1 Собираем железный пазл: eGPU, корпус, Mac
Тебе понадобится не только карта. Thunderbolt - это не просто кабель.
- Видеокарта NVIDIA: Лучший выбор в 2026 для LLM - всё ещё RTX 4090 (24 ГБ) или RTX 5090 (если уже вышла, ожидаем 32 ГБ). Архитектура Ada Lovelace (или новая Blackwell) отлично дружит с FP8/INT8 квантованием. Из старичков - RTX 3090 (24 ГБ) остаётся королём цены за гигабайт.
- Корпус (док) для eGPU: Обязательно с поддержкой Thunderbolt 3/4 и достаточным блоком питания. Для RTX 4090 нужен БП на 600W минимум. Razer Core X (650W) или Sonnet Breakaway Puck 750W - проверенные варианты. Учти, что Thunderbolt вносит свою задержку, но для LLM она менее критична, чем для игр.
- Mac: С Apple Silicon (M1, M2, M3) или Intel - разница есть. На Intel с Bootcamp всё проще, но мы говорим о родной macOS. Apple Silicon требует обходных манёвров.
- Кабель Thunderbolt 4: Короткий и качественный. Не экономь тут.
2 Подготовка macOS: отключаем SIP, ставим UTM
Без этого TinyGPU не заработает. Нужна виртуальная машина с Linux, где будут крутиться родные драйверы NVIDIA.
# 1. Перезагрузи Mac в Recovery Mode (удерживаем Command+R)
# 2. Открываем Терминал из меню Утилиты
csrutil disable
# 3. Перезагружаемся
Отключение System Integrity Protection (SIP) - необходимое зло для низкоуровневого доступа к PCIe.
Теперь ставим UTM - бесплатный гипервизор для macOS. Он умеет в QEMU и, что важно, эмуляцию PCIe для eGPU.
brew install --cask utm
3 Создаём Linux-виртуалку и пропихиваем в неё видеокарту
Используй Ubuntu 24.04 LTS или последний стабильный Fedora. 8 ГБ ОЗУ виртуалке, 4 ядра.
Самое сложное - передача PCIe-устройства. В UTM это делается через интерфейс SPICE.
- Подключи eGPU к Mac, убедись, что система его "видит" (в Информации о системе, раздел Thunderbolt).
- Запусти UTM и создай новую виртуалку (Linux). В разделе "Устройства" нажми "Добавить USB/PCI".
- В списке должен появиться контроллер Thunderbolt, а в нём - твоя NVIDIA. Выбери его.
- Важно: Запусти виртуалку БЕЗ установленной гостевой ОС сначала. Если UTM ругается, что устройство используется хостом, поможет скрипт отключения драйверов macOS:
sudo kextunload -b com.apple.driver.AppleThunderboltPCIAdapters
Установи Linux в виртуалку. После загрузки, внутри гостевой системы, проверь команду lspci | grep -i nvidia. Должна увидеть твою карту.
4 Установка драйверов CUDA внутри Linux и самого TinyGPU
Внутри виртуалки Ubuntu:
# Добавляем репозиторий NVIDIA
sudo apt update
sudo apt install -y linux-headers-$(uname -r) build-essential
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
# Ставим драйверы и CUDA Toolkit (актуально на 02.04.2026)
sudo apt install -y cuda-drivers-555 cuda-toolkit-12-6
Перезагрузи виртуалку. После проверь nvidia-smi.
Теперь ставим TinyGPU серверную часть:
git clone https://github.com/tinygpu/tinygpu-server.git
cd tinygpu-server
mkdir build && cd build
cmake .. -DCMAKE_CUDA_ARCHITECTURES="89;90" # Ada Lovelace (89) и далее
make -j$(nproc)
Запускаем демон на стороне виртуалки (Linux):
./tinygpu_server --port 33435
Он будет слушать подключения.
5 Настройка клиента на macOS и запуск Llama.cpp
На основном Mac (хосте) качаем и собираем llama.cpp с поддержкой TinyGPU (обычно это патч или отдельная ветка).
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# Убедись, что в репозитории есть поддержка TINYGPU_BACKEND
make LLAMA_TINYGPU=1
Перед запуском модели нужно скачать саму модель в GGUF-формате. Например, свежую Llama 3.2 11B Instruct Q4_K_M.
Создаём файл конфигурации для TinyGPU tinygpu_config.json:
{
"host": "192.168.64.2", // IP виртуалки (узнай через `ip addr` внутри UTM)
"port": 33435,
"gpu_layers": 35 // Сколько слоёв модели закинуть на GPU
}
Финальный запуск:
./main -m ./models/llama-3.2-11b-instruct.Q4_K_M.gguf \
--tinypgu-config ./tinygpu_config.json \
-p "Расскажи техническую шутку про CUDA" \
-n 256
Если в выводе видишь строки типа tinypgu: compute layer 15 on GPU - всё получилось. Тензоры ползут через Thunderbolt в виртуалку, на карту и обратно.
Сколько скорости мы теряем на этом цирке?
Честный бенчмарк. Mac Studio M2 Ultra (76-core GPU) vs MacBook Pro M3 Max + eGPU RTX 4090 через TinyGPU.
| Модель (GGUF Q4) | M2 Ultra (токен/с) | RTX 4090 + TinyGPU (токен/с) | Проигрыш/Выигрыш |
|---|---|---|---|
| Llama 3.2 11B | ~42 | ~78 | +86% |
| Nemotron 3 Nano 8B | ~48 | ~95 | +98% |
| Llama 3.1 70B (первые 10 слоёв на GPU) | ~4.5 | ~12.1 | +169% |
Вывод? Для моделей до 20B параметров - победа за eGPU. Существенная. Для гигантов вроде 70B, где даже в Q4 формат не помещается в 24 ГБ VRAM, приходится делить слои между GPU и системной памятью Mac. Здесь выигрыш есть, но уже не такой разгромный. Главный козырь - возможность запустить эти модели вообще, не уперевшись в лимит оперативки Mac.
Типичные грабли, на которые наступают все
- "Устройство занято" при передаче в UTM. Выполни скрипт отключения драйверов Thunderbolt на хосте перед запуском виртуалки. Каждый раз.
- Огромные задержки (ping > 10 мс) между хостом и виртуалкой. Настрой сеть UTM в режиме "Общая сеть" (Shared Network) вместо эмуляции реальной карты. Должно упасть до 0.1-0.5 мс.
- llama.cpp падает с ошибкой CUDA out of memory. Уменьшай параметр
--gpu-layers(в конфиге TinyGPU). Помни, что сам GGUF-файл и часть слоёв могут грузиться в ОЗУ хоста, съедая память. - После сна Mac eGPU не определяется. Классика. Не давай Mac спать с подключенным боксом. Отключай перед сном или настрой ampère_egpu.sh скрипт для автоматического пробуждения (адаптировав под виртуалку).
Вопросы, которые ты боялся задать
Можно ли подключить несколько eGPU, как в статьях про Raspberry Pi?
Теоретически - да. Практически - Thunderbolt контроллер на Mac имеет ограниченную полосу. Два eGPU будут делить 40 Гбит/с, что для LLM уже может стать узким местом. TinyGPU поддерживает несколько серверов, но скоординировать их работу сложнее. Для многокарточных конфигураций проще собрать отдельный Linux-сервер.
AMD карты через ROCm будут работать быстрее? У них же есть драйверы для macOS?
Да, но только старые (RDNA2). И поддержка LLM-стэка через ROCm на macOS оставляет желать лучшего. TinyGPU для AMD существует, но менее стабилен. Если выбирать путь eGPU специально для LLM на Mac в 2026, NVIDIA + TinyGPU - более протоптанная тропа.
Есть ли смысл ждать, пока Apple начнёт официально поддерживать NVIDIA?
Нет. Их стратегия ясна: собственные Neural Engine и матричные сопроцессоры. Они будут оптимизировать ML под Metal и свои чипы. Надеяться на возрождение CUDA на macOS - всё равно что ждать, когда iPhone получит разъём USB-A.
Итог: стоит ли овчинка выделки?
Если ты исследователь, который неделями финализирует модель, или просто хочешь поиграться с Nemotron 3 Nano в интерактивном режиме без облаков - да, определённо стоит. Скорость генерации вырастет в 1.5-2 раза для большинства моделей среднего размера.
Если же тебе нужно запускать инференс на продакшене, стабильно и без танцев с бубном - присмотрись к отдельному Linux-серверу с прямой установкой CUDA. Сборка, вроде описанной в этом гайде, обойдётся не намного дороже eGPU-дока, а головной боли будет в разы меньше.
TinyGPU - это proof of concept, который вырос в рабочее решение. Он доказывает, что даже когда большие компании расходятся, энтузиасты могут построить мост. Кривой, шаткий, но по нему уже едут грузовики с тензорами.