Локальные LLM для написания кода: тест и сравнение

Локальные LLM для написания кода: тест и сравнение

В этой статье мы рассмотрим, как использовать локальные большие языковые модели (LLM) для написания кода, сравнивая их с облачными аналогами. Мы протестируем различные модели на MacBook Pro с процессором M4 Pro, оценивая скорость, качество и удобство использования в режимах чата и агентской работы.

Ограничения облачных моделей

Облачные LLM имеют ряд существенных ограничений:

  • Лимиты: Часовые, суточные и недельные квоты на использование, после исчерпания которых доступ к модели блокируется до начала нового периода. Решение — переход на другой тариф или другой сервис.
  • Приватность: Все данные (код, промпты, файлы), обрабатываемые агентом, передаются на удалённые серверы провайдера LLM. Это вызывает опасения при работе с конфиденциальной информацией.
  • SLA и сетевая задержка: Зависимость от стабильности сети и серверов провайдера, что может приводить к задержкам и недоступности сервиса.

Альтернативой является развёртывание LLM локально, что решает проблемы приватности и зависимости от сети.

Локальные модели: компромисс качества и ресурсов

Использование локальных моделей требует компромисса между качеством и доступными ресурсами компьютера. Мощные облачные модели требуют значительных объёмов оперативной (RAM) и видеопамяти (VRAM). Локально такие ресурсы ограничены, поэтому приходится выбирать модели с меньшим числом параметров.

Идеальный сценарий — полная загрузка модели в VRAM для максимальной скорости. Загрузка в RAM также возможна, но скорость будет ниже.

Основная цель тестирования — оценить, могут ли локальные модели отвечать с приемлемой скоростью и качеством, сравнимым с облачными.

Память Apple Silicon

Тестирование проводилось на MacBook Pro с процессором M4 Pro и 48 ГБ унифицированной памяти. Эта архитектура объединяет RAM и VRAM в один пул, что позволяет использовать весь объём для модели. Однако, другие запущенные приложения также потребляют эту память, что может влиять на производительность.

Поиск и выбор локальной модели

Для поиска локальных моделей удобно использовать платформы вроде Hugging Face, где доступны фильтры для выбора:

  • Специализация: Модели могут быть узконаправленными (например, для кода — с префиксом 'coder') или универсальными.
  • Ресурсы и совместимость: Важно учитывать требования модели к железу и доступный объём памяти, включая память для контекста.
  • Форматы: GGUF — универсальный формат, MLX — оптимизированный для Apple Silicon.
  • Режим «думающей модели» (thinking mode): Модели, которые демонстрируют процесс рассуждения перед ответом. Они медленнее, но могут давать более качественные результаты для сложных задач.
  • Поддержка Function Calling: Важна для агентов, позволяя моделям взаимодействовать с внешними программами.

Разбор аббревиатур в названии модели

Понимание обозначений в названиях моделей помогает сделать правильный выбор:

  • Семейство и назначение: Например, Qwen3-Coder указывает на модель семейства Qwen, ориентированную на код.
  • Размер (параметры): 30B означает 30 миллиардов параметров. Большее количество параметров обычно улучшает качество, но увеличивает требования к ресурсам и снижает скорость.
  • Архитектура: A3B (Mixture of Experts) позволяет активировать только часть параметров, ускоряя работу.
  • Тип модели: Instruct — модель, отвечающая напрямую, без режима размышления.
  • Оптимизация: MLX — для Apple Silicon.
  • Квантизация: 4bit указывает на количество бит на слой. Меньшее число бит ускоряет модель, но может снизить качество ответов.

Оценки скорости работы моделей

Для оценки производительности используются специальные калькуляторы (например, VRAM-калькуляторы) и инструменты вроде oMLX для Mac. Они помогают прогнозировать скорость генерации токенов, но реальные замеры могут отличаться.

Запуск LLM локально

Существует несколько популярных инструментов для локального запуска LLM:

  • Ollama: Консольный интерфейс, удобен для серверов.
  • LM Studio: Графический интерфейс с удобным чатом и совместимым API, что делает его предпочтительным для локального использования.

После установки LM Studio необходимо включить локальный сервер для подключения агентов.

Загрузка и настройка модели в LM Studio

Для примера возьмём модель Qwen3-Coder-30B-A3B-Instruct-MLX-4bit. После скачивания в LM Studio, модель загружается. Для корректной работы с внешними агентами требуется включить CORS в настройках сервера.

LM Studio предлагает встроенный чат для прямого взаимодействия с LLM и замер скорости генерации ответов.

Подключаем агентов

Тестирование проводилось с использованием следующих агентов:

  • Kilo Code: Плагин для VS Code, IntelliJ IDEA и CLI-версия.
  • Open Code: Популярный CLI-агент.
  • Claude Code: CLI-агент от Anthropic.
  • Aider: Простой CLI-агент-помощник по кодингу.

Подключение агентов к локальной модели LM Studio обычно сводится к настройке переменных окружения и указанию пути к локальному API.

Настройка агентов

  • Claude Code: LM Studio поддерживает его API напрямую. Требуется указать переменную окружения с именем модели.
  • Kilo Code: Поддерживает LM Studio «из коробки».
  • Open Code: Настраивается через конфигурационный файл.
  • Aider: Настраивается через переменные окружения, указывается путь к модели.

Тестирование: Замеры в режиме чата

Тестирование проводилось в чате LM Studio с использованием различных локальных моделей. Оценивались скорость генерации токенов, время выполнения этапов задачи (рефакторинг, ревью, исправление) и качество полученных результатов по 10-балльной шкале.

Ключевые наблюдения:

  • Скорость локальных моделей в чате сопоставима с облачными, но качество ответов может быть ниже.
  • Модели с архитектурой MoE (Mixture of Experts) показывают хороший баланс скорости и качества.
  • Режим thinking улучшает качество ответов как локальных, так и облачных моделей.
  • Модели Qwen3.5-27B-4bit и Gemma-4-26B-A4B показали высокие результаты на этапе ревью.
  • Gemma-4-26B-A4B выделяется хорошим качеством и скоростью.
  • Большая битность (например, 6 бит против 4 бит) увеличивает время ответа без заметного прироста качества.
  • Разница в скорости между форматами GGUF и MLX на Mac оказалась не столь значительной.

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

Тестирование: Замеры в режиме агента

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

Ключевые наблюдения:

  • Режим агента требует значительно больше времени и ресурсов, чем чат. Локальные модели испытывают высокую нагрузку, что приводит к нагреву MacBook и шуму кулеров.
  • Модели Qwen3.5-27B-4bit и nvidia-nemotron-3-nano-30b-a3b были остановлены из-за слишком долгого выполнения первого этапа.
  • Gemma-4 показала хорошие результаты на этапе ревью.
  • Облачные модели демонстрируют лучшее качество, скорость и комфорт в агентском режиме.
  • При работе агентов требуется значительный объём памяти как для модели, так и для контекста.
  • Более простые агенты (Aider, OpenCode) работают быстрее, но требуют большего взаимодействия. Продвинутые агенты (Kilo Code, Claude Code) генерируют больше контекста, что увеличивает нагрузку на модель.
  • Некоторые агенты и модели предлагают компиляцию и запуск кода, что зависит от их возможностей и конфигурации.

Итоги и рекомендации

Общие выводы

Работа с локальными LLM на современном компьютере уровня MacBook M4 возможна, но с оговорками.

В режиме чата локальные модели обеспечивают приемлемую скорость и качество, сохраняя приватность данных. Рекомендуются модели с MoE-архитектурой.

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

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

Рекомендации для использования локальных моделей

  • Отдельный компьютер: Разверните модель на отдельном устройстве (например, Mac mini), чтобы не нагружать рабочую станцию и избежать конфликта ресурсов.
  • Выбор моделей: Отдавайте предпочтение свежим моделям на MoE-архитектурах (например, Qwen3.6) и тестируйте их под свои задачи.
  • Режим чата: Для простых задач используйте режим чата — это быстрее и продуктивнее.
  • Агентский режим: При выборе агентов для локальных моделей отдавайте предпочтение более простым (Aider, OpenCode) вместо ресурсоёмких (Kilo Code, Claude Code).
  • Выбор оборудования: При покупке компьютера для LLM ориентируйтесь на реальные замеры производительности и требования к VRAM.
  • Качество: Помните, что локальные модели, как правило, уступают в качестве большим облачным моделям.

Полные таблицы с замерами и исходные коды тестов доступны на GitHub.

Читать оригинал