Малые языковые модели (SLM) и локальные большие языковые модели (LLM) становятся все более популярными среди разработчиков. Александр Уильямс, разработчик полного стека и независимый ИТ-консультант, приводит на портале The New Stack список популярных моделей и дает советы по их оценке.

Хотя влияние GitHub Copilot и других распространенных ИИ-решений на кодирование неоспоримо, возникает множество вопросов вокруг этой тенденции в целом.

Для начала, многим разработчикам не слишком удобно делиться своим кодом, зачастую проприетарным, с третьими лицами. Есть и финансовый аспект, поскольку затраты на API могут накапливаться довольно быстро — особенно если вы используете самые продвинутые модели.

В то же время появились локальные LLM и их уменьшенные эквиваленты, такие как SLM. Сообщество разработчиков все громче заявляет об их преимуществах, так что давайте посмотрим, из-за чего вся эта шумиха. Помимо самой концепции, мы расскажем о лучших моделях, их преимуществах и о том, как это влияет на разработку с помощью ИИ в целом.

Что такое локально хостируемые LLM

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

Локальный запуск LLM обеспечивает тонкий контроль над оптимизацией и настройкой модели, что особенно полезно для специализированных сред разработки.

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

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

Что такое SLM

SLM (Small Language Models) — это более легкие версии своих LLM-аналогов. Они поддерживают меньшее количество параметров, что позволяет оптимизировать их скорость и эффективность без ущерба для основных возможностей, таких как завершение кода и простая обработка контекста. Они не могут делать все; но то, что они могут делать, они делают блестяще.

Более компактная архитектура SLM также делает их высокоэффективными для задач, где важны уменьшенные задержки и небольшие объемы памяти. SLM подходят для таких сценариев, как быстрое создание прототипов, разработка встраиваемых систем или работа на машинах с ограниченными вычислительными ресурсами.

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

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

В то время как Google, Microsoft, Anthropic и ряд других сосредоточены на гигантских моделях, распространяемых как сервис, Apple стала лидером в области SLM с открытым исходным кодом. Ее семейство OpenELM создано для работы на мобильных устройствах, и первые отзывы говорят о том, что эти модели способны эффективно выполнять задачи кодирования.

Как выбрать лучшую модель для кодирования

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

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

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

  • HumanEval. Бенчмарк, состоящий из 164 задач программирования и предназначенный для оценки функциональной корректности кода, генерируемого LLM. Модели оцениваются на основе их способности создавать корректные и исполняемые кодовые решения.
  • MBPP (MultiPL-E). Являясь расширением эталона HumanEval, MBPP включает в себя задачи на нескольких языках программирования, что позволяет более широко оценить возможности генерации корректного кода на различных языках.
  • BigCodeBench. Комплексный бенчмарк, который оценивает LLM в задачах понимания и генерации кода на 43 языках программирования и восьми задачах кодирования. Он измеряет производительность по трем параметрам: длина, сложность и эффективность.
  • LiveCodeBench. Динамический бенчмарк, который постоянно собирает новые задачи по кодированию с таких платформ, как LeetCode, AtCoder и CodeForces. Он оценивает LLM по генерации кода, самовосстановлению, выполнению кода и предсказанию результатов тестирования, обеспечивая целостную оценку возможностей кодирования.
  • EvoEval. Набор бенчмарков, который распространяет существующие задачи кодирования на новые области, оценивая способности LLM к синтезу. Он позволяет выявить потенциальную переобученность моделей и оценить их адаптивность к новым задачам кодирования.

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

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

Лучшие локальные LLM для кодирования

Я знаю, что слово «лучший» имеет большой вес, но надо понимать, что любой подобный список субъективен. Каждый бенчмарк, каждый тест и каждый сценарий использования — все они разные, поэтому модель, которая работоспособна у вас, может оказаться не подходящей для кого-то другого.

DeepSeek V2.5. Это Open Source-модель, которая объединяет возможности DeepSeek-V2-Chat и DeepSeek-Coder-V2-Instruct, повышая как общую разговорную компетенцию, так и навыки кодирования. Она поддерживает контекст длиной до 128 тыс. токенов, что позволяет управлять диалогами и обрабатывать сложные данные. Это делает ее идеальной для крупных проектов.

В ходе испытаний DeepSeek V2.5 продемонстрировала заметные улучшения в таких задачах, как письмо и следование инструкциям, превзойдя своих предшественников в таких бенчмарках, как AlpacaEval 2.0 и ArenaHard. Эта модель, доступная через веб-платформы и API, предлагает оптимизированный, интеллектуальный и эффективный пользовательский опыт.

Qwen2.5-Coder-32B-Instruct. Это Open Source-модель, разработанная командой Qwen в Alibaba Cloud. По возможностям кодирования она соответствует GPT-4o, демонстрируя сильные и всесторонние способности к кодированию наряду с хорошими общими и математическими навыками.

Модель поддерживает контекст длиной 128 тыс. токенов и владеет 92 языками программирования. Она достигла наивысших результатов в нескольких бенчмарках для генерации кода, включая EvalPlus, LiveCodeBench и BigCodeBench, и сравнима с GPT-4o в задачах по исправлению кода.

Мне нравится эта модель еще и тем, что она поставляется в различных вариантах квантования: 0,5, 1,5, 3, 7, 14 и 32 млрд. параметров. Таким образом, даже обладатели не сильно производительных устройств могут использовать ее для решения задач кодирования.

Nxcode-CQ-7B-orpo. Это локальная LLM, оптимизированная для задач кодирования. Она предлагает сбалансированную производительность для простых сценариев кодирования, представляя собой легкое решение для разработчиков, ищущих эффективные возможности генерации и понимания кода.

Интересно, что это не отдельная модель — как заявляют авторы, это тонкая настройка Qwen/CodeQwen1.5-7B на высокорейтинговых данных, относящихся к кодированию.

В отличие от Qwen2.5 и LLaMa 3, Nxcode-CQ-7B-orpo предназначена для эффективного решения фундаментальных задач кодирования, что делает ее подходящей для проектов с невысокой сложностью. Таким образом, это лучший помощник в изучении кодовых задач и основ веб-разработки на JavaScript. Мне показалось, что с работой с более сложной анимацией Three.js, например, она не справляется.

OpenCodeInterpreter-DS-33B. Это высокопараметрическая модель, ориентированная на расширенную интерпретацию кода и динамическое решение задач, созданная командой китайских ученых. Она отлично справляется с пониманием сложных структур кода и генерирует сложные кодовые решения.

В отличие от Qwen, она основана на другой модели, в основном на Deepseek-coder-33b-base. Она привлекла внимание сообщества сразу после выхода, показав отличные результаты в HumanEval и MBPP.

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

Artigenz-Coder-DS-6.7B. Эта разработанная индийской командой модель предназначена для быстрого создания прототипов кода и предлагает эффективные возможности генерации кода. Хотя она и не может сравниться по мощности с более крупными моделями, она представляет собой практичное решение для разработчиков, нуждающихся в быстрой подготовке кода и помощи в создании прототипов.

Artigenz-Coder-DS-6.7B подходит для проектов, в которых скорость и эффективность приоритетны по сравнению с решением сложных задач кодирования. Благодаря объему памяти в 13 Гб она является одной из самых доступных моделей кодирования и может легко работать на аппаратном обеспечении среднего уровня.

Недостатки локальных LLM для кодирования

Больше всего локальные модели ограничены аппаратным обеспечением. Учитывая, что топовый графический процессор H100 от Nvidia стоит до 40 тыс. долл., а технологические гиганты располагают миллиардами долларов, невозможно представить себе, чтобы кто-то лично или какая-то организация могли сравниться с ними по вычислительной мощности. И это еще не говоря о том, что в этих компаниях работают лучшие ИИ-инженеры и они имеют здесь преимущество перед целыми странами.

Конечно, вы можете арендовать время GPU для обучения или тонкой настройки LLM, но даже это непомерно дорого. Пока что лучшее, на что можно надеяться, — это накопить на домашнюю серверную стойку с парой RTX 3090.

Кроме того, эти LLM-данные небезопасны уже потому, что находятся на вашем устройстве. Не удивляйтесь, если люди станут более осторожными с доступом к порталам-захватчикам при подключении к сетям Wi-Fi, поскольку хакеры будут пытаться украсть данные локальных LLM. Помните, что эта область еще только зарождается, и в ней еще есть уязвимости, о которых мы даже не подозреваем.

Наконец, есть еще и тот прискорбный факт, что Claude 3.5 Sonnet и o1-preview намного опережают всех локально выполняемых конкурентов с открытым исходным кодом. Вы не можете превзойти миллиарды гигабайт VRAM и миллиарды долларов, выделенных на исследования и разработки. Тем не менее, цель не в этом — а в том, чтобы получить что-то категории Open Source, бесплатное и настраиваемое, что разработчики смогут использовать надежно и последовательно, верно?

Заключение

Многие считают локальные LLM и SLM будущим ассистентов по кодированию. Copilot, ChatGPT и Claude могут иметь десятки миллиардов долларов финансовой поддержки, но с ними вы всегда будете во власти чужого ПО, ограничений, цензуры и, конечно же, проблем с дата-центрами.

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

Так в чем же проблема? Ну, эти LLM не только менее впечатляющи с точки зрения производительности, но и менее интуитивны и сложнее настраиваются, чем готовые no-code-ассистенты по кодированию, такие как Copilot. Тем не менее, они уже приблизились к производительности основных моделей, а такие компании, как Apple, сосредоточили свои усилия на Open Source. Наступают захватывающие времена.