← На главную

Запускаем локального LLM-агента под Linux

Читателям данного блога наверняка знакомы облычные LLM, такие как Claude и Gemini. Однако, как и любые SaaS решения, они имеют свои недостатки. Оффлайн ничего не работает. Для обработки конфиденциальных данных облака не годятся. В связи с чем имеется интерес к запуску агентов локально.

Ставить эксперименты будем на Xiaomi Redmibook Pro 16 2025 под управлением Ubuntu 24.04 LTS. Ноутбук оснащен 32 Гб оперативной памяти и встроенной видеокартой Intel Arc Graphics 140T. Память общая для CPU и GPU. С одной стороны, это медленне, чем когда память распаяна на видеокарте. С дрогой стороны, имеем GPU с 32 Гб оперативки. Вот и посмотрим, насколько он пригоден для LLM.

Для запуска моделей нужно специально ПО, inference engine. На русский язык термин переводят как «движок инференса», «инференс-движок», «машина вывода» и т.д. Популярным движком является llama.cpp. Он поддерживает разные API для разных GPU. Видеокартам от Intel нужен Vulkan.

Собираем движок с соответствующими флагами:

$ sudo apt install git build-essential cmake libvulkan-dev glslc spirv-headers $ git clone https://github.com/ggml-org/llama.cpp.git $ cd llama.cpp $ cmake -B build -DGGML_VULKAN=1 $ cmake --build build --config Release -j8

Моделей с открытыми весами существует больше одной – Qwen, DeepSeek, Gemma и другие. Они распространяются в виде файлов с раширением .gguf через Hugging Face. Это своего рода GitHub для искусственного интеллекта. Помимо прочего, сервис зарабатывает на продаже мощностей для запуска и обучения моделей.

Обычно в имени файла .gguf указывают количество параметров / весов нейронной сети. Встречается два варианта. Если написано 12B, это значит, что модель имеет 12 миллиардов параметров. Говорят, что модель является плотной. Если написано 12B-A3B, то это модель архитектуры Mixture of Experts (MoE). Она также имеет 12 миллиардов параметров, но при обработке токена активны только 3 миллиарда.

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

Часто выбирают квантование Q5_K_M. В данном методе более важным параметрам выделяется больше бит, а менее важным – меньше, но в среднем около 5 бит на параметр. Если требуется запустить крупную модель в малом объеме памяти, то используют 4 бита на параметр, например Q4_K_XL.

Скачав файл модели, говорим:

$ ./build/bin/llama-server --port 8080 \ -m ~/HuggingFace/Qwen3.8-9B-Q5_K_M.gguf \ --ctx-size 32768 --n-gpu-layers 99

Параметр --ctx-size задает размер контекста / KV-кэша в токенах. Сколько Гб памяти выделится под контекст зависит от модели. Параметр --n-gpu-layers 99 заставляет движок разместить все слои нейросети на GPU.

Движок отвечает за выполнение LLM на конкретном железе. Для практического взаимодействия с моделью нужно еще одно ПО, называемое harness. Оно управляет контестом, работает с файлами, сетью и так далее. На русский язык термин переводят как «харнесс» или «обвязка».

В качестве харнесса был выбран Zed. Открываем settings.json и дописываем:

"language_models": { "llama.cpp": { "api_url": "http://127.0.0.1:8080", } },

Перезапускаем текстовый редактор. Взаимодействуем с LLM через Agent Panel, как обычно. Обработка первого запроса может занимать до нескольких минут. В это время модель выполняет системный промпт, который формируется по шаблону из gguf-файла. Это необходимо для инициализации модели.

В общей сложности я опробовал десяток моделей. Для всех использовался формат Q5_K_M. Некоторые модели не запустились. Некоторые работали слишком медленно. Сберегу ваше время и расскажу лишь о двух наиболее интересных.

DeepSeek-Coder-V2-Lite-Instruct. Является MoE моделью 16B-A2.4B. Скорость генерации составила 8 ток/с, что ощущается вполне комфортно. К сожалению, модель не умеет редактировать файлы, ходить в сеть и так далее. Вместо полноценного агента получаем чат-бота.

Qwen3.8-9B-Distill. Плотная думающая модель. Размышления отключаются, если в параметрах llama.cpp указать --reasoning off. Превосходно работает с файлами и сетью. Модель довольно компактна, что позволяет выделить ей большой контекст. Он может составлять до 262144 токенов. Скорость генерации составила 3.5 ток/c. Ощущается как «Anthropic по Dial-Up».

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

В наши дни доступны домашние ИИ-сервера. Например, популярны решения на базе процессора AMD Ryzen AI Max+ 395 со 128 Гб памяти LPDDR5X. Существует движок gufo, оптимизированный под данное железо. Сетап позволяет запустить Qwen 3.8 Flash Next. По бенчмаркам эта модель превосходит Claude Opus 4.6. Цена сервера составляет 3500$ .. 5000$ в зависимости от бренда, наличия и объема SSD, величины таможенных сборов и так далее.