Архив рубрики ~Лента новостей~

OpenCode с NorthMiniCode на своем железе

OpenCode с NorthMiniCode на своем железе
OpenCode с NorthMiniCode на своем железе

В последнее время большинство обсуждений агентской разработки крутится вокруг Claude Code, Codex, Gemini CLI и других облачных инструментов. Но, с одной стороны, киты индустрии блокируют нам доступы снаружи, с другой — чиновничьи умы блокируют нам доступ изнутри, потому необходимо иметь под рукой локальный инструмент для агентской разработки.

9 июня 2026 вышла модель NorthMiniCode, в отличие от qwen и подобных, специально заточенная под агентские циклы. Планирование, инструменты, редактирование, терминал — это то, на что заточена модель. Подробно разбирать архитектурные особенности будем в следующий раз, а сейчас опишу свой опыт развертывания данной модели и использования ее в OpenCode на домашнем компьютере.

Железо

Решение по компоновке было временным, но стало постоянным, лишь добавилась крышка под углом для защиты от животных

У меня такой домашний сервер/игровой/медиацентр, на котором гоняются всякие qwen, hashcat, Hermes и подобные, иногда играются StarCraft и каждый день ребёнок гоняет Minecraft и снимает видосы.

Компонент

Значение

CPU

Ryzen 7 5700G

RAM

64 GB

GPU #1

RTX 5060 Ti 16 GB

GPU #2

RTX 3060 12 GB

OS

Ubuntu 24.04 LTS

Если бы было две 5060 — было бы проще и быстрее. Но их нет. Вообще, для модели рекомендуется минимум одна H100, но ее у меня тоже нет, работаем с тем, что есть.

Настройка среды для инференса

Архитектура модели cohere2_moe в момент моего эксперимента была еще не добавлена в llama.cpp, пришлось собирать версию из PR. На момент написания статьи он уже влит в master, потому можно собирать из него:

git clone https://github.com/ggml-org/llama.cpp cd llama.cpp cmake -B build -DGGML_CUDA=ON cmake —build build —config Release -jf7de9e4362b36f14bf09110bb542adb4

Если сборка падает с ошибкой «Unsupported gpu architecture», следует обновить драйвер Nvidia и Nvidia CUDA до последней версии.

После успешной сборки:

./build/bin/llama-cli —list-devices8d16b72fe9bc67a741b28acf9fa6f0a3

должен показывать все имеющиеся видеокарты.

Качаем модель

Тут все просто, лучший способ — поставить huggungface cli, авторизоваться по токену и скачать GGUF версию в нужную директорию:

hf download unsloth/North-Mini-Code-1.0-GGUF —include «North-Mini-Code-1.0-UD-Q4_K_M.gguf» —local-dir ~/models/north-mini-code 7192c19755bd35bb620166fb35f407e0

Разумеется, при более мощном железе можно и нужно искать и качать другие веса.

Запускаем llama сервер

Первым делом следует учесть специфику железа — в случае с несколькими видеокартами правильно распределить по ним модель. В llama.cpp для этого используется параметр tensor-split. Для двух моих видеокарт:

RTX 5060 Ti = 16 GB
RTX 3060 = 12 GB

Правильное значение для этого параметра —tensor-split 16,12что дает нам распределение по картам:

57% -> GPU0
43% -> GPU1

Далее — контекст. Если просто запустить с параметром:

—ctx-size 131072684083c39673a0a2acdc1b0cbee72c5e

то в моем случае получается ошибка:

failed to allocate buffer for kv cached9bdcd087f79f808f236df837513e932

Хотя свободной памяти, казалось бы, достаточно. Лог показал:

n_parallel = 4e44cde59e7987da28a9127311fea99ed

То есть llama‑server автоматически создал четыре слота. Каждый слот хранит собственный KV Cache. Фактически я случайно попросил сервер зарезервировать память сразу под четыре независимых сессии. Если не планируется параллельная работа нескольких кодинг‑агентов и нет лишней памяти — это бессмысленно, стоит ограничить флагом:

—parallel 18606b85342ef17ba89e0752c75ebc1a4

Финальная конфигурация запуска для моего железа выглядит так:

./build/bin/llama-server —model /media/storage/models/north-mini-code/North-Mini-Code-1.0-UD-Q4_K_M.gguf —jinja —n-gpu-layers 99 —ctx-size 65536 —parallel 1 —cache-type-k q8_0 —cache-type-v q8_0 —tensor-split 16,12 —temp 0.2 —top-p 0.9 —top-k 40 —repeat-penalty 1.15 —repeat-last-n 2048 —host 0.0.0.0 —port 8080dabaeea3e83334897f6d09467732390c

Тут нужно прояснить — если модель поддерживает 500к контекста — она поддерживает, но не бесплатно. Каждый дополнительный токен контекста увеличивает KV Cache, который, если отдельно не шаманить, потребляет ту же видеопамять, которую потребляют загруженные веса модели. Поэтому, если с одним экземпляром контекста llama сервер всё равно падает, ругаясь на недостаток память — стоит попробовать уменьшить контекст.

Также можно уменьшить n‑gpu‑layers, уменьшив количество слоёв модели, загружаемых в видеопамять, но это может сильно ударить по производительности — часть слоёв будет лежать в озу и обрабатываться на cpu, мои эксперименты с подобным показали, что в этом случае видеокарты простаивают, ожидая cpu. Хотя, возможно, я чего‑то не знаю и можно это как‑то оптимизировать, глубоко не копал.

Также можно сэкономить видеопамять, увеличив квантование KV‑кешей. Если грубо — суть квантования в переходе с более точного формата на более грубый, от чего незначительно страдает качество ответов.

Подключаем OpenCode

Тут тоже все просто, llama.cpp предоставляет OpenAI-compatible API. Устанавливаем OpenCode, пишем в конфиг:

{ «provider»: { «llamacpp»: { «npm»: «@ai-sdk/openai-compatible», «name»: «llama.cpp», «options»: { «baseURL»: «http://127.0.0.1:8080/v1», «apiKey»: «sk-local» } } } } 58b0cc5f6cb58606bbfc1b44ee8515ef

После этого OpenCode начинает использовать локальную модель как обычный OpenAI API.

Результаты

Итоговая конфигурация:

Параметр

Значение

Модель

North Mini Code UD-Q4_K_M

GPU

RTX 5060 Ti + RTX 3060

RAM

64 GB

Контекст

65536

Параллельность

1

Скорость

~84 tok/s

OpenCode

Да

OpenAI API

Да

Под рукой был такой проект:

999a7af4e8b44fba3d353fe129090dbd

Проект не маленький, далеко не идеальный, связан с финансами, в общем, близок к боевому проду. Нужно было добавить новую фичу — форму редактирования транзакции. Фаза планирования прошла успешно, связка OpenCode + NorthMiniCode успешно определила недостающие endpoints в backend части, позадавала вопросы о том, как будем реализовывать. На фазе реализации началось странное:

Зациклилось
Зациклилось

Модель начала зацикливаться, но это вылечилось корректировкой параметра –repeat-penalty и более не повторялось. Работа пошла:

Логи llama сервера
Логи llama сервера

Довольно интересно наблюдать за работой видеокарт при исполнении задачи, можно заметить рывки и приседания при вызове тулзов:

nvtop: Сверху 5060, снизу 3060, оранжевое — память, голубое — загрузка gpu
nvtop: Сверху 5060, снизу 3060, оранжевое — память, голубое — загрузка gpu
Агент в процессе работы
Агент в процессе работы

По итогу OpenCode бодро отчитался о результатах:

Все готово (почти)
Все готово (почти)

Но ревью показало, что результаты хоть и работоспособны, но не идеальны, забылось несколько старых импортов в TypeScript коде, размылись архитектурные границы. После фидбека OpenCode так же бодро все поправил. Задача решена, фича добавлена, NorthMiniCode работает.

Итог

В итоге мы имеем инструмент, способный на обычном домашнем компьютере помогать с планированием и писать код на уровне бухого мидла. Планирование и самопроверка — не самая сильная сторона NorthMiniCode, тут, возможно, стоит поэкспериментировать с другими моделями. Если углубится в эксперименты с квантированием и поглубже закопаться в llama.cpp — возможно, можно выжать ещё больше.

Пока оно у меня работает только на персональных проектах, в режиме «запустил проработанный заранее подробный план в ralphex loop и забыл до вечера». Но и в таком варианте это работает лучше, чем кодинг-агенты всего год назад. Полновесной заменой ClaudeCode или Codex это назвать сложно — нужно больше ревью, нужен более ответственный подход к планированию. Однако экономия времени налицо.

Сам факт self-hosted решения на таких мощностях дает надежду на скорое избавление от зависимости от воли нескольких крупных корпораций.

Иметь под рукой не зависящую от интернет-соединения вообще штуку, которая может быстро автоматизировать небольшой фикс/фичу/рефакторинг — бесценно.

Источник: habr.com

❌ Нет похожих статей с такими тегами

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Обо всем~ Подсказки, ответы и помощь от NYT Connections за 19 июня, № 1104. Архив рубрики ~Обо всем~ Анализ отсканированных PDF-файлов для RAG с помощью EasyOCR: бесплатное распознавание текста позволяет получить не документ, а слова. Архив рубрики ~Лента новостей~ Комплект юбилейных комплектующих ASUS Family Bucket Collector’s Edition оценён в $16 545 Новости робототехники IEEE запускает виртуальный учебный курс по большим языковым моделям. Архив рубрики ~Обо всем~ IEEE запускает виртуальный учебный курс по большим языковым моделям. Архив рубрики ~Обо всем~ Предзаказы на GTA 6 откроются 25 июня. Новости робототехники Он сделал так, чтобы ваш бесплатный видеоплеер работал без сбоев. Теперь он делает то же самое для роботов. Новости робототехники ИИ добрался до коров. И оказался бизнесом на $2 млрд Архив рубрики ~Обо всем~ Российские ученые восстановили аксоны поврежденного спинного мозга свиней. Для этого они использовали фузогенный препарат Архив рубрики ~Обо всем~ Я провел тесты Siri AI на MacOS 27, используя те же методы, что и для ChatGPT и Gemini — вот результаты. Архив рубрики ~Обо всем~ Ранние земледельцы из неолитического поселения получали битум из двух источников. На это указал анализ находок из окрестностей Иерусалима Архив рубрики ~Обо всем~ Кишечные бактерии предскажут эффективность иммунотерапии только в сообществе: Медицина Архив рубрики ~Обо всем~ Ответы на мини-кроссворд NYT за пятницу, 19 июня. Архив рубрики ~Обо всем~ Магазин отказал в гарантии покупателю RX 9070 XT, пострадавшей от плавления 12V-2×6 Архив рубрики ~Обо всем~ Подсказки, ответы и помощь от NYT Connections за 19 июня, № 1104. Архив рубрики ~Обо всем~ Анализ отсканированных PDF-файлов для RAG с помощью EasyOCR: бесплатное распознавание текста позволяет получить не документ, а слова. Архив рубрики ~Лента новостей~ Комплект юбилейных комплектующих ASUS Family Bucket Collector’s Edition оценён в $16 545 Новости робототехники IEEE запускает виртуальный учебный курс по большим языковым моделям. Архив рубрики ~Обо всем~ IEEE запускает виртуальный учебный курс по большим языковым моделям. Архив рубрики ~Обо всем~ Предзаказы на GTA 6 откроются 25 июня. Новости робототехники Он сделал так, чтобы ваш бесплатный видеоплеер работал без сбоев. Теперь он делает то же самое для роботов. Новости робототехники ИИ добрался до коров. И оказался бизнесом на $2 млрд Архив рубрики ~Обо всем~ Российские ученые восстановили аксоны поврежденного спинного мозга свиней. Для этого они использовали фузогенный препарат Архив рубрики ~Обо всем~ Я провел тесты Siri AI на MacOS 27, используя те же методы, что и для ChatGPT и Gemini — вот результаты. Архив рубрики ~Обо всем~ Ранние земледельцы из неолитического поселения получали битум из двух источников. На это указал анализ находок из окрестностей Иерусалима Архив рубрики ~Обо всем~ Кишечные бактерии предскажут эффективность иммунотерапии только в сообществе: Медицина Архив рубрики ~Обо всем~ Ответы на мини-кроссворд NYT за пятницу, 19 июня. Архив рубрики ~Обо всем~ Магазин отказал в гарантии покупателю RX 9070 XT, пострадавшей от плавления 12V-2×6

Оставить комментарий