Два RTX 5060 Ti, одна задача: зачем NorthMiniCode нужен свингерский режим
Сегодня в мире локальных AI-агентов для кодинга происходит странное. Все гоняются за гигантами вроде Qwen3 Coder Next на 96GB VRAM, а потом сидят и смотрят, как модель генерирует „Hello, World!“ три минуты. Но есть другой путь — компактные, специализированные модели, которые могут работать в связке. NorthMiniCode — именно такая. Это агентская модель на базе архитектуры cohere2_moe (Mixture of Experts с 2,8B активных параметров из 12B total), заточенная под автономное кодирование в фреймворке OpenCode.
Почему именно два GPU? Потому что один RTX 5060 Ti с 16GB VRAM в упор не хватает, чтобы загрузить модель полностью в Q5_K_M (нужно около 10GB на веса + 4GB на кеш). Два таких — и получаем 32GB, можно держать всю модель на GPU без выгрузки в RAM. А llama.cpp умеет честно делить слои между картами. Но есть нюанс: стандартная сборка не поддерживает cohere2_moe. Придется собрать из ветки с PR.
Зачем вам это? Если вы пишете код, который должен остаться локальным (конфиденциальность), или не хотите платить $20 в месяц за агента в облаке, NorthMiniCode + OpenCode на домашнем сервере — ваш выход. Сборка llama.cpp из нужного PR даёт +15% скорости на MoE-моделях против релизной версии 2025 года.
Что нам понадобится (список на салфетке)
- Железо: 2x RTX 5060 Ti (16GB), 64GB RAM, Ubuntu 24.04 (или Fedora 40).
- Модель: NorthMiniCode (gguf-формат, квантование Q5_K_M).
- Инструменты: git, cmake, CUDA Toolkit 12.8.
- Фреймворк: OpenCode (последняя версия на 19.06.2026).
Внимание: если у вас одна карта, но 24GB+ VRAM (RTX 4090 или RTX 5090), модель поместится целиком. Два GPU — опция для тех, кто хочет дешевле и с запасом.
Сборка llama.cpp с PR #9876 (cohere2_moe)
В llama.cpp существует давняя проблема: поддержка MoE-моделей с архитектурой, отличной от Mixtral (например, cohere2_moe с dynamic expert routing) реализована во флагманских сборках, но не включена в master к июню 2026. Разработчики PR #9876 как раз добавляет правильную разметку тензоров и оптимизации для таких моделей.
1Клонируем репозиторий и переключаемся на PR
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
git fetch origin pull/9876/head:moepr
git checkout moeprНикогда не собирайте master, если знаете, что ваша модель не из списка поддерживаемых. Проверьте это заранее: откройте convert.py и найдите cohere2_moe. Если нет — ваш PR.
2Сборка с поддержкой CUDA и multi-GPU
mkdir build && cd build
cmake .. -DLLAMA_CUDA=ON -DLLAMA_CUDA_NUM_DEVICES=2 -DLLAMA_AVX2=ON -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)Обратите внимание на -DLLAMA_CUDA_NUM_DEVICES=2. Если у вас три карты, ставьте 3. Если не указать, llama.cpp будет использовать только первую.
После сборки проверьте, что llama-server и llama-cli появились в build/bin/.
Квантование модели: почему Q5_K_M, а не Q4_K_M
NorthMiniCode — гибридная модель: 12B total, но только 2,8B активных. Квантование Q4_K_M даёт 6,8 GB веса, но на cohere2_moe заметно падает качество (до 5% на HumanEval). Q5_K_M — 8,5 GB — компромисс. При двух картах по 16GB у нас 32GB суммарно, так что можем позволить больше точности.
huggingface.co/northminicode/NorthMiniCode-Q5_K_M.gguf (около 8.5 GB).Запуск сервера с двумя GPU: разбираем флаги
./bin/llama-server \
-m /models/NorthMiniCode-Q5_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-ngl 99 \
--tensor-split 8,8 \
--main-gpu 0 \
--ctx-size 32768 \
--numa numactlЧто здесь происходит:
-ngl 99— все слои на GPU. 99 гарантирует, что ни один слой не уйдёт в CPU.--tensor-split 8,8— распределение VRAM между картами: первому GPU 8GB, второму 8GB. Можно поменять пропорции, если одна карта мощнее (например, 10,6). Для RTX 5060 Ti симметрично.--main-gpu 0— на какой карте держать основную логику (кеш KV). Вторая — только для вычислений.--ctx-size 32768— контекст 32K. NorthMiniCode поддерживает до 64K, но на двух 16GB картах лучше не рисковать.--numa numactl— важно для многосокетных систем. Если у вас Threadripper или Intel Xeon, это выжмет ещё 5-7% производительности.
Проверьте логи: llama_new_context_with_model: total VRAM used: 16144 MB (device 0: 8072 MB, device 1: 8072 MB). Если видите значения около 16GB — всё ок.
Настройка OpenCode: как подружить с локальным сервером
OpenCode — это open-source агентный фреймворк для кодирования, который поддерживает OpenAI-совместимое API. После запуска llama-server вам нужно указать endpoint.
3Установка OpenCode
# Используем uv (быстрый менеджер Python)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv ~/opencode-env
source ~/opencode-env/bin/activate
uv pip install opencode-cli # актуальная версия 0.8.4 на 19.06.20264Конфигурация агента
Создайте файл ~/.opencode/config.yaml:
model: northminicode
endpoint: http://localhost:8080/v1
api_key: not-needed
token_limit: 32768
temperature: 0.2
max_turns: 50Почему token_limit равен 32768? Потому что мы задали такой же контекст в сервере. Если в OpenCode выставить больше — получите ошибку при запросах.
Теперь запускаем агента:
opencode --config ~/.opencode/config.yamlПоздравляю, у вас есть локальный агент для кодирования за $0 в месяц.
Типичные ошибки и их решение (я их сделал за вас)
| Проблема | Почему возникает | Решение |
|---|---|---|
| llama-server падает с „CUDA out of memory“ | Неправильный tensor-split или недостаточный ctx-size | Уменьшите --tensor-split (например, 7,7) или снизьте --ctx-size до 16384 |
| OpenCode пишет „Model not found“ | Неправильное имя модели в эндпоинте | Замените в config.yaml на любое имя, например „northminicode“ |
| Скорость ниже ожидаемой (менее 10 tok/s) | Слои распределяются неравномерно или включён NUMA без numactl | Добавьте --numa numactl и проверьте баланс через nvidia-smi |
| Модель генерирует белиберду | Квантование слишком низкое или температура выше 0.5 | Используйте Q5_K_M, поставьте temperature=0.2 в OpenCode |
Финальный совет: не пытайтесь запустить это на Windows
llama.cpp на Windows с multi-GPU работает, но стабильность — как у стула на трёх ножках. CUDA на Windows не умеет правильно делить память между картами через NCCL, поэтому постоянно вылетает. Linux — ваш выбор. Если у вас уже есть гордый опыт с Claude Code Router на Mac, то на Linux с двумя GPU вы будете чувствовать себя как рыба в воде. Для тех, кто ещё не определился с железом, рекомендую почитать обзор локальных агентов 2026: там сравнение NorthMiniCode с Qwen Coder Next и OpenCode 12B.
Помните: два дешёвых GPU лучше, чем один дорогой, если вы умеете правильно настроить --tensor-split. И не забывайте про cohere2_moe — без этой архитектуры NorthMiniCode не раскроет свой потенциал в агентных задачах. Удачи.