- BrainTools - https://www.braintools.ru -

Как я Zabbix с LLM дружил в свободное время. Архитектурный обзор взаимодействия с нейросетью. Часть 2 «Выбор модели»

Введение

У котика есть не только лапки

У котика есть не только лапки

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

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

Часть 1: Вводная и формирование ТЗ [1]

Часть 2: Выбор локальной LLM (Вы здесь)

Часть 3: Формирование HLD и немного LLD

Часть 4: Что из этого вышло

Из практического опыта [2] работы, подход к задаче начался не с кода (в целом код был отдан на 99% нейросети, но об этом в следующих статьях), а с привычного для любого инфраструктурного проекта шагов:

  • ТЗ (в предыдущей части);

  • критерии выбора локальной LLM;

  • архитектурное решение приложения (HLD);

  • детализация (LLD);

  • реализация.

Спойлер

В моем случае именно такая последовательность дала хороший результат: нейросеть работала внутри заранее заданной конструкции, не подменяя архитектурное мышление [3], при этом обладая максимально полными данными для реализации. Все самое интересное представлю через статью.

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

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

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

Для текущего проекта модель должна быть не просто чатом для общения, а выполнять конкретные функции, указанные в ТЗ (в прошлой статье [1]). То есть выбор должен быть основан так же по определенным критериям.

Обобщенно:

  • осуществлять триаж событий уровня Warning и ниже (низкая критичность);

  • осуществлять формирование рекомендаций только для диагностики;

  • выполнять корреляцию при отсутствии детерминированной логики;

  • работать в локальном контуре.

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

  • получение быстрого ответа на домашнем сервере;

  • интеграцию через Ollama для упрощения взаимодействия.

Спойлер

Ollama вполне может снижать скорость работы локальной LLM. Например, недавно на Хабре мне попалась вполне достойная статья [5]наглядно показывающая замедление работы в 3 раза. Однако, хоть для описываемого мной кейса это не критично, для уже настоящих проектов необходимо иметь это в виду.

Критерии выбора модели

Для указанной задачи в разрезе прикладной инфраструктурной системы были выделены следующие критерии.

1. Возможность локального запуска без облачной зависимости и API внешнего провайдера.

Причинами данного решения были:

  • уведомления и контекст алертов содержать чувствительные инфраструктурные данные (имена, IP-адреса и т.д.);

  • подход к построению домашней инфраструктуры изначально подразумевал минимальную зависимость от внешних сервисов;

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

2. Достаточность качества при следовании точным инструкциям и кратком анализе

От модели требуется:

  • работать по шаблону;

  • стабильно отвечать на короткие прикладные запросы;

  • поддерживать краткую уверенную стилистику;

  • возвращать структурированный результат.

Другими словами, от модели не требуется написание текстов, моделирование многослойного агентного поведения [6] или генерации кода.

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

3. Требование к ресурсам и размер

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

А вот и домашний стенд

А вот и домашний стенд

4. Скорость инференса

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

  • растет очередь;

  • audit log становится бесполезным в реальном времени;

  • происходят критические задержки до получения результата с потерей актуальности информации.

Таким образом важен баланс между качеством ответа и скоростью подачи.

5. Предсказуемость поведения

Модель не должна быть излишне творческой, т.к. задача у нее в проекте не быть чат-бот ассистентом. Соответственно модель не должна:

  • уходить в длинные рассуждения;

  • выдумывать что-то за пределами строгих рамок;

  • менять формат ответа от запроса к запросу;

  • развертывать ответ за пределами поставленной задачи.

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

6. Нормальная работа в Ollama

Критерий для упрощения развертывания и взаимодействия. Модель должна быть:

  • доступной по тегу;

  • без проблем тянуться;

  • стабильно существовать в локальной системе;

  • не требовать отдельной сборки;

  • не требовать кастомной конвертации или runtime.

Чем меньше нестандартных телодвижений – тем проще будет интеграция.

7. Разумная квантизация

При изучении основных параметров для меня это понятие было самым сложным для понимания, т.к. часто упоминается вскользь. На деле – это так же важный критерий при запуске локально (тем более в домашнем контуре), поэтому рассмотрю квантизацию отдельным подпунктом.

Что такое квантизация для проекта?

Квантизация — это способ уменьшить размер модели и требования к ресурсам (памяти [7]) за счет представления весов в более компактной форме (температура модели).

Иными словами квантование – это метод снижения вычислительных затрат и затрат памяти на инференс путем представления весов и активаций с помощью типов данных низкой точности.

Мне очень помогла о представлении вот эта статья [8]на Хабре.

Для проекта это будет значить уменьшение потребления ресурсов, порога входа self-hosted среды и повышения общей скорости модели.

Однако существует ряд минусов:

  • возможна потеря качества;

  • возможно падение стабильности следования формату.

В локальном проекта квантизация неизбежна, но остается вопрос, насколько модель сохраняет полезность после квантизации.

Что было важно для текущего проекта

Для моего пайплайна модель в квантизированном виде должна была остаться полезной для триажа, коротких и структурированных вердиктов, рекомендаций с ограничением на безопасную диагностику, fallback корреляцию (вспоминаем ТЗ).

8. Лицензия и практическая доступность

Для домашнего проекта не самый важный критерий, однако все равно его нельзя игнорировать для дальнейшего использования.

Поэтому необходимо понимать:

  • правовую возможность тянуть и запускать локально;

  • ограничения на использование;

  • актуальность экосистемы вокруг модели.

Какая же модель выбрана?

Суммаризируя все критерии и отсеяв по ним предложения, выбор пал на Qwen3.5-4B.

Спойлер

К моменту публикации кейса уже вышла Qwen3.6, однако, если верить описанию [9]самое главное улучшение относится к кодингу, а также отсутствует 4B версия.

Пройдем по чек-листу

Требование

Соответствие / примечания

Возможность локального запуска без облачной зависимости и API внешнего провайдера

Соответствует.

Ollama официально поддерживает локальный запуск моделей в Docker и через локальный API на localhost:11434; для семейства qwen3.5 в Ollama есть готовый тег qwen3.5:4b, который можно запускать локально командой ollama run qwen3.5:4b

Достаточность качества при следовании точным инструкциям и кратком анализе

Частично соответствует.

Для точного тега qwen3.5:4b Ollama не публикует отдельные instruction-following benchmark’и, но саму линейку qwen3.5 позиционирует как family с “utility and performance [10]“, а в официальных материалах [11] Qwen для близких малых instruct-моделей Qwen2.5 видно, что семейство хорошо держится на instruction-following и прикладных задачах по сравнению с моделями сопоставимого класса. Для проекта окончательное подтверждение шло уже практическим пилотом

Требование к ресурсам и размер

Соответствует.

Для qwen3.5:4b в Ollama [12] указан размер модели 4.66B parameters, а размер конкретного тега – 3.4 GB, что хорошо укладывается в локальный self-hosted контур и заметно проще для эксплуатации, чем более крупные open-weight модели.

Скорость инференса

Частично соответствует.

Для exact-тега Ollama не публикует TTFT/tokens-per-second, но на странице qwen3.5:4b [12] прямо указаны “Efficient Hybrid Architecture”, “high-throughput inference” и “minimal latency and cost overhead”. Конечно же – это не гарантия SLA, но приемлемый (для начала) архитектурный индикатор. Однако фактическую пригодность по latency все равно надо подтверждать пилотом на своем железе.

Предсказуемость поведения [13]

Частично соответствует.

Прямого критерия “predictability” в карточке нет, но для прикладного использования важны instruction-following и стабильность structured-output. В официальных Qwen-материалах [11] (да, это снова для 2.5, но исходим из предположения, что мажорная версия не стала хуже) у близких instruct-моделей семейства Qwen видны конкурентные или превосходящие результаты на instruction-following и прикладных тестах, однако для конкретного qwen3.5:4b этот критерий все равно должен подтверждаться уже в собственном пайплайне через промпты, guardrails и audit.

Нормальная работа в Ollama

Соответствует.

Модель доступна как официальный тег в библиотеке Ollama (qwen3.5:4b [12]), запускается через стандартный механизм ollama run, а доступ к ней идет через обычный локальный API Ollama.

Разумная квантизация

Соответствует.

Для тега qwen3.5:4b [12] на странице Ollama явно указана квантизация Q4_K_M, что и делает локальный запуск практичным по памяти и размеру. Дополнительно для семейства Qwen3 есть отдельное эмпирическое исследование квантизации [14], подтверждающее вполне эффективное использование.

Лицензия и практическая доступность

Соответствует.

На странице [12]тега в Ollama указана лицензия Apache 2.0; в официальном репозитории Qwen также сказано, что open-weight модели лицензируются под Apache 2.0. Практическая доступность хорошая: модель есть в библиотеке Ollama, подтягивается стандартным способом и не требует нестандартного рантайма.

 

Сравнение с другими моделями

Выбор оказался сложнее, чем меню ресторана

Выбор оказался сложнее, чем меню ресторана

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

Поэтому в первую очередь сравнение было с близкими по назначению малыми моделями – Llama3.2-3B и Gemma3-4B.

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

Спойлер

Пока готовил материал, уже зарелизилась и gemma4-e4B [15], что может стать фаворитом, так как в бенчмарках [16]показывает прекрасные результаты, да еще и, наконец-то, Apache 2.0 лицензия [17]! Обязательно попробую, но уже после завершения этого цикла.

Размерная линейка

У Meta в текстовой lightweight-линейке Llama 3.2 доступны 1B и 3B модели. То есть ближайший малый вариант – это 3B, а следующего шага на 4B внутри той же lightweight-линейки просто нет. Официальная карточка [18] прямо указывает, что текстовые Llama 3.2 – это именно 1B и 3B модели с контекстом 128K.

У Gemma 3 линейка шире: 270M, 1B, 4B, 12B и 27B; в Ollama отдельно указано [19], что 4B-модель (так же, как и остальные) относится к multimodal-вариантам с контекстом 128K.

У Qwen3.5 в Ollama [10] размерная линейка выглядит более плавной: 0.8B, 2B, 4B, 9B, 27B, 35B и 122B. На странице тегов Ollama для семейства Qwen3.5 прямо видны эти размеры, а для актуального тега указывается контекст 256K.

Это не доказательство качества той или иной модели, но дает информацию о позиционировании в самом семействе.

Сравнение по контекстному окну

Для текущего сценария длинный контекст не является главной причиной выбора. Однако полностью отбрасывать его нельзя, так как при обогащении информацией алерта, audit log, корреляции с соседними событиями (RCA) и пояснениями, промпт может увеличиваться.

У Qwen3.5-4B в официальной карточке на Hugging Face [20] указан default context length 262,144 tokens, и отдельно отмечено, что при OOM можно снижать окно, но для сохранения thinking capabilities рекомендуется держать не менее 128K.

У Gemma 3 4B в Ollama и модельной карточке [19] фигурирует 128K context window.

У Llama 3.2 3B официально указан [18] 128K context length.

Исходя из этого получаем, что Qwen дает запас по контексту среди моделей своего класса.

Сравнение по лицензированию

Qwen3.5-4B в карточке на Hugging Face [20] указана лицензия Apache 2.0.

У Llama 3.2 используется Llama 3.2 Community License [18] – собственная лицензия Meta.

У Gemma модели поставляются с open weights и допускают “ответственное коммерческое использование”, но это отдельный набор условий Google/Gemma Terms of Use [21].

Для пет-проекта это не критично, но глобально Apache 2.0 делает модель более предсказуемой с точки зрения [22] лицензирования при включении в собственный self-hosted стек.

Вывод

Цена - свободное время

Цена – свободное время

Из 3-х основных требований, по которым проводилось сравнение близких малых LLM мне больше подошла Qwen3.5-4B.

Спойлер

Идеальным вариантом было бы развертывание 3-х моделей с последующим тестированием, однако эту активность откладываю в “долгий ящик”, возможно когда-нибудь опишу тестирование в рамках этого кейса и других моделей. Но сроки реализации дать не могу, т.к. это хобби, на которое не всегда хватает времени.

Итог второго этапа

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

Данный шаг я решил выделить до HLD и LLD по нескольким причинам:

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

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

Изыскания по выбору модели действительно были интересными и дали более полноценное понимание работы этого инструмента.

Спойлер

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

Что будет дальше

В следующей статье уже перейдем к дизайну проекта, разберем, какие вещи в архитектурном планировании можно отдать нейросети (конечно же не бесконтрольно), представлю полученную архитектуру, и, через статью, перейду к реализации и описанию результата.

Автор: it_zoobik

Источник [23]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/30157

URLs in this post:

[1] Часть 1: Вводная и формирование ТЗ: https://habr.com/ru/articles/1031140/

[2] опыта: http://www.braintools.ru/article/6952

[3] мышление: http://www.braintools.ru/thinking

[4] логично: http://www.braintools.ru/article/7640

[5] статья : https://habr.com/ru/articles/1025132/

[6] поведения: http://www.braintools.ru/article/9372

[7] памяти: http://www.braintools.ru/article/4140

[8] статья : https://habr.com/ru/articles/975468/

[9] описанию : https://ollama.com/library/qwen3.6

[10] utility and performance: https://ollama.com/library/qwen3.5

[11] официальных материалах: https://qwen.ai/blog?id=qwen2.5-llm

[12] Ollama: https://ollama.com/library/qwen3.5%3A4b

[13] поведения: http://www.braintools.ru/article/5593

[14] есть отдельное эмпирическое исследование квантизации: https://arxiv.org/html/2505.02214v1

[15] gemma4-e4B: https://ollama.com/library/gemma4

[16] бенчмарках : https://habr.com/ru/companies/bothub/articles/1021636/

[17] Apache 2.0 лицензия: https://huggingface.co/google/gemma-4-E4B

[18] Официальная карточка: https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct

[19] в Ollama отдельно указано: https://ollama.com/library/gemma3%3A4b

[20] в официальной карточке на Hugging Face: https://huggingface.co/Qwen/Qwen3.5-4B

[21] отдельный набор условий Google/Gemma Terms of Use: https://ai.google.dev/gemma/terms

[22] зрения: http://www.braintools.ru/article/6238

[23] Источник: https://habr.com/ru/articles/1033798/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1033798

www.BrainTools.ru

Rambler's Top100