Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Выбор и настройка локальной LLM для разработки: OMLX на MacBook M5 Pro

Просмотров: 83 Облачные API тормозят, деньги капают, а если интернет лёг - всё, ты без подсказок. Решил установить локальную LLM на MacBook и гонять её для Битрикс-разработки. Расскажу что получилось, на какой модели остановился и как всё настроил.
Выбор и настройка локальной LLM для разработки: OMLX на MacBook M5 Pro

Да, я в курсе про vibe coding. Нет, я так не работаю. Модель - это инструмент для рутины, а не замена головы. Всё перепроверяю, а она помогает не лазить каждые 30 секунд в dev.1c-bitrix.ru за сигнатурой метода или не вспоминать синтаксис очередного D7-запроса.

Кстати, для этого я сделал свой MCP-сервер для 1С-Битрикс - он даёт модели доступ к реальному API ядра: классы, методы, константы, события, ORM-поля. Всё в реальном времени, без датасетов и fine-tune-ов. Модель не гадает, а реально смотрит в код Битрикса и выдаёт точный ответ. Работает с любым AI-агентом.

Железо

MacBook Pro, M5 Pro, 48 ГБ unified memory. macOS 27.

ПараметрЗначение
ПроцессорApple M5 Pro
Память48 ГБ unified
Диск1 ТБ (плюс внешний SSD)
ОСmacOS 27

48 ГБ - хорошая конфигурация для локальных LLM. Не густо, но и не пусто. Можно таскать модели до 30-35 ГБ с квантованием, остаётся запас под систему и прочие приложения (PhpStorm, браузер с кучей вкладок, Telegram, etc.).

Почему Ornith-1.0-35B-6bit

Перебрал несколько моделей. Вот что было:

  • Qwen3.6-35B-A3B-MLX-6bit (MoE, ~7.5 ГБ активных) - шустрая, умная, но MoE-архитектура даёт странные лаги на переключение экспертов. Для кода норм, но не хватало «глубины» на сложных архитектурных вопросах.
  • Qwen3.6-27B-MLX-6bit (~22 ГБ) - хороша, но 27B не всегда хватало контекста для больших компонентов Битрикса.
  • gemma-4-26B-A4B-it-MLX-8bit - интересная, но Google упорно не доучивает Gemma для кода. Для общих вопросов ок, для PHP/Битрикс - так себе.
  • GLM-4.7-Flash-6bit - неожиданно приятная, но мало fine-tune-ов под код.
  • Ornith-1.0-9B-8bit - быстрая, но маловата.

Остановился на Ornith-1.0-35B-6bit. Почему:

  • 35B параметров в 6-битном квантовании - ~27-28 ГБ веса. Влезает в 48 ГБ с запасом.
  • Ornith делали на базе Qwen3.5, который отлично заточен под код (CodeQwen в основе).
  • Tool calling - умеет вызывать функции, что важно для работы через MCP/Kilo.
  • Длинный контекст - до 32K токенов (а с burst-режимом и больше). Для больших компонентов Битрикса самое то.
  • Скорость - на M5 Pro выдаёт ~55-70 токенов/с на простых запросах, на длинном контексте ~30-40 токенов/с. Комфортно.

Единственный минус - 6-битное квантование. Оно экономит память (28 ГБ вместо 36+), но на специфическом коде иногда проскакивают микрогаллюцинации. Поэтому не отключаем голову - всё перепроверяем. Рутина - ок, вайбкодинг - нет.

OMLX - что это и почему не LM Studio / Ollama

Коротко: OMLX - это сервер для MLX-моделей, который делал один чувак Jundot под свои нужды, но получилось годно. Версия 0.5.2rc2.

Чем отличается:

LM StudioOllamaOMLX
GUI-ориентирован, жрёт память на свой интерфейсGGUF (llama.cpp) или MLX, но без тонких настроек кешаЧистый MLX - нативный Metal фреймворк Apple. Максимальная скорость на Mac.
Нет горячего кеша на SSDЕсть кеш, но без гибких настроекPaged SSD cache + hot cache - можно тонко настроить сколько RAM под кеш, остальное на SSD
Нет раздельного prefill/decodeЕсть continuous batchingChunked prefill + adaptive throttling - не даёт уронить Mac в своп
Одна модель за разМульти-моделиMulti-model serving - можно держать несколько моделей загруженными и переключаться по мере надобности
OpenAI API - даOpenAI API - даOpenAI API + admin API + MCP - можно управлять моделью удалённо
Memory guard - нетMemory guard - нетProcess memory enforcer - следит за памятью и не даёт macOS уйти в жесткий своп

Ollama - хороший зверёк, и он умеет и GGUF, и MLX. Но у него нет главного - paged SSD cache и memory enforcer. На длинных контекстах он просто забивает всю RAM и Mac уходит в своп, пока всё не ляжет. У меня такое было не раз.

LM Studio - удобна, но интерфейс жрёт память (на MacBook это критично), и нет тонких настроек кеша. Плюс я не люблю GUI для серверных процессов мне нужен headless режим.

OMLX - это консоль. Запустил, забыл. Всё управление через API или веб-интерфейс на localhost:8000. Минимум оверхэда.

Настройка OMLX под Ornith-35B: грабли и решение

Настраивал методом научного тыка. Сначала выставил всё по-максимуму и получил Prefill capacity rejected на каждом втором запросе. Пришлось разбираться.

Важная особенность OMLX - он не держит весь контекст в RAM. Когда модель обрабатывает длинный диалог, paged SSD cache автоматически скидывает старые блоки контекста на диск. В памяти остаётся только hot cache - самые свежие блоки (у меня 1 ГБ). Остальное - на SSD.

Это принципиально отличает OMLX от Ollama и LM Studio - те при длинном контексте просто забивают всю память и Mac уходит в жесткий своп, пока всё не ляжет. OMLX же сбрасывает контекст на диск ещё до того, как память закончится.

По умолчанию кеш пишется на системный диск - в ~/.omlx/cache. Если не хочется нагружать системный SSD (особенно на MacBook с распаянным диском), можно перенести на внешний. Я пробовал внешний USB-C SSD со скоростью ~500 МБ/с чтение/запись - работает стабильно, скорость генерации падает примерно до 25 токенов/с вместо 60 на RAM-кеше. Для длинных контекстов вполне терпимо.

Главное - внешний диск должен быть быстрым (USB 3.2 или Thunderbolt). Дешёвая флешка с 50 МБ/с превратит генерацию в слайд-шоу.

TurboQuant KV: сжимаем кеш перед записью на диск

В OMLX есть ещё одна полезная штука - TurboQuant KV. Это квантование KV-кеша перед тем, как сбросить его на SSD.

Что это даёт: без TurboQuant каждый блок кеша пишется на диск в fp16 (16 бит). С TurboQuant можно сжать до 8 или даже 4 бит. Меньше данных - быстрее чтение/запись, меньше износ SSD, меньше места на диске.

РежимРазмер блокаСкорость на внешнем SSDКачество
Выключено (fp16)16 бит~25 токенов/сПолное
8-bit8 бит~35-40 токенов/сПочти неотличимо
4-bit4 бита~45-50 токенов/сЗаметно на специфичных задачах

Я выставил 8-bit на всех моделях - данные на диск пишутся в 2 раза компактнее, а разницы в ответах я не заметил. Для Ornith-35B это было выключено по умолчанию, пришлось включить руками.

Настраивается в ~/.omlx/model_settings.json для каждой модели отдельно:

"turboquant_kv_enabled": true,
"turboquant_kv_bits": 8.0

hot_cache_only: истина где-то посередине

Вторая грабля - hot_cache_only: true. Сначала пробовал 3 ГБ горячего кеша в RAM - не хватило. Потом уменьшил до 1 ГБ, а остальное пусть само как-то. Не хватило. При длинных контекстах (25K+ токенов) вылетали ошибки:

[guard:external] context too large at progress=1024 
kv_len=70656: predicted peak would exceed prefill safety cap

Потому что с hot_cache_only: true OMLX пытается весь контекст держать в RAM. Ты даёшь ему 1 ГБ кеша, но модель уже заняла 28 ГБ, а система - ещё 10-12 ГБ.

Решение - выключить hot_cache_only:

"hot_cache_only": false

Теперь работает так:

  • 1 ГБ hot cache в RAM - для свежих блоков контекста (быстрый доступ)
  • Всё, что не влезло - уходит на SSD (/Users/mb/.omlx/cache)
  • Когда память поджимает - процесс memory enforcer сам чистит hot cache и сбрасывает на SSD

Да, холодные блоки читаются с SSD - это чуть медленнее. Но лучше читать с SSD, чем не читать вообще, получая ошибки.

Итоговые настройки

ПараметрЗначениеПочему
hot_cache_max_size1GBМинимум в RAM, остальное на SSD — больше памяти под модель и систему
hot_cache_onlyfalseСбрасывать на SSD при нехватке RAM
ssd_cache_dir~/.omlx/cache (или внешний SSD)Можно перенести на внешний быстрый SSD, чтобы не нагружать системный
memory_guard_tierbalancedНе даёт сожрать всю память, но и не душит модель
max_context_window3276832K контекста - больше редко нужно, а память жрётся зря
chunked_prefilltrueДообучать контекст частями, а не целиком - меньше пик памяти

Как это выглядит в работе

Запускаю OMLX, загружаю Ornith-35B-6bit, подключаю к Kilo Code через MCP-сервер bxmcp.camouf.ru.

Типовой сценарий:

  • Пишу компонент каталога - модель подсвечивает D7-запросы, подсказывает правильные события для OnBeforeProductAdd, проверяет сигнатуры вызовов.
  • Нужно вспомнить как работает \Bitrix\Main\ORM\Query\Filter\ConditionTree - не лезу в документацию, просто спрашиваю модель.
  • Рефакторинг старого кода - модель переписывает CIBlockElement::GetList на D7 getList с правильными селектами и фильтрами.

Всё перепроверяю. Но скорость разработки выросла - не надо отвлекаться на гуглёж и документацию каждые 5 минут.

Что в итоге

OMLX + Ornith-35B-6bit на MacBook M5 Pro 48GB - годная связка для Битрикс-разработчика. Не серебряная пуля, но инструмент, который реально ускоряет рутину.

Главное - не заигрываться. Модель ошибается. Я ошибаюсь. Но вместе мы ошибаемся реже, чем я один без модели. Особенно когда речь идёт о сигнатурах методов и правильных событиях Битрикса.

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Индивидуальная разработка магазина
от 400 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс