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

Комплектующие и ОС

В роли моего “LLM-сервера” выступает обычный домашний ПК, на данный момент его можно считать бюджетным игровым. Вот список железа, установленного в нем:

Процессор AMD Ryzen 5 5600X

Материнская плата на B550 чипсете

Видеокарта Intel Arc B580 (12 ГБ)

Два модуля оперативной памяти DDR4 3200 МГц по 8 ГБ

SSD NVMe с версией PCI Express 3.0

Операционная система Arch Linux

По производительности это самый обычный «народный» игровой ПК, в нем выделяется только дискретная видеокарта Intel и операционная система, но для наших целей это не минус. Видеокарта имеет 12 Гб не самой новой видеопамяти GDDR6, но благодаря шине в 192 бита даже немного обгоняет по пропускной способности памяти RTX 5060. К тому же, этот GPU обладает открытыми драйверами, а это плюс для Linux.

Arch Linux имеет отличный репозиторий, тратит менее 700 МБ ОЗУ в простое, имеет множество документаций и отличную совместимость, возможно, это лучшая ОС для меня.

Стоит отдельно сказать про память. Не секрет, что для современного ИИ нужно много памяти, желательно — быстрой. Если Intel и не обделили VRAM, то с RAM в моем ПК не все так гладко. Изначальная частота модулей всего 2666 МГц, что непростительно мало для нашей цели, мне пришлось разогнать их хоть немного, несмотря на чипы памяти Samsung C‑Die.

Я не стал сильно завышать частоты и вольтаж, оставив их на 3200 МГц и 1.30V, так как эти чипы «не любят» вольтаж более 1.35V. Если вы хотите запускать LLM на своем компьютере, вы можете делать это даже на менее производительном железе, однако меньшее количесвто памяти еще больше ограничивает вас в объеме запускаемой нейросети, а меньшая скорость памяти влияет на скорость генерации. Это далеко не все факторы, но пожалуй, наиважнейшие. Ладно, перейдем к софту.

Про LM Studio и Olama

Первым делом я установил LM Studio, запустил, программа предложила установить Gemma 4 E4B, я согласился. После установки, до запуска модели, я посмотрел общее потребление ОЗУ и немного удивился. Было занято 3 ГБ RAM, просто на главном экране, я считаю это большим объемом. После этого я немного изучил настройки LM Studio, закрыл программу и удалил ее. Интерфейс показался мне перегруженным, тяжелым во всех смыслах.

Это всего лишь мое мнение, возможно, я просто привык к терминалу, но против графики я ничего не имею, если она не переусложнена. Я решил установить обычный Ollama из оффициальных репозиториев, который, как выяснилось, не поддерживает Vulkan и SYCL, и от этого не видит мою видеокарту Intel. Мне пришлось установить другой пакет, он называется ollama-vulkan и присутствует в официальных репозиториях Arch Linux.

Gemma 4 E4B

Далее я установил Gemma 4 E4B в квантизации 8 бит. Это современная, компактная, мультимодальная dense LLM от Google. Эта модель не архитектуры MoE (dense модели используют все слои при вычислениях), поэтому для быстрой работы ей необходимо полностью находиться в VRAM. Через Modelfile я увеличил контекст этой модели с 4096 до максимальных 131 072 токенов.

Модель очень легкая, в такой квантизации весит всего 5.5 ГБ при максимальном контексте. Работает модель шустро, в среднем скорость около 50 tokens/s. Сама модель на мой взгляд интересная, произошел крупный технологический скачок относительно предыдущих поколений. Модель стала мультимодальной, имеет огромный конткест, Thinking Mode.

Большая Gemma 3 27b набрала примерно 21% в математическом тесте AIME, а вот новая компактная Gemma 4 E4B набрала внушительные 42.5%, несмотря на гораздо меньшее количество параметров. Именно Thinking Mode так сильно помог компактной Gemma 4. Из особенностей, могу выделить небольшие проблемы с русским языком, изредка она путает род/падеж, подставляя неправильный. Это главное, что нужно знать про Gemma 4, а теперь перейдем к следующей модели.

Qwen и llama.cpp

Мне стало интерсно испытать архитекруту Ultra MoE (Mixture of Experts) на своем ПК, я попробовал запустить Qwen 3.5 35B A3B (я еще не знал о существовании Qwen 3.6) в Q4 через ту же Ollama, ввел заветный ollama run, подождал окончания загрузки, и… модель запустилась, со скоростью генерации примерно 1 token/s.

Почему так медленно? Потому что это огромная модель, которая не помещается в VRAM, а Ollama не умеет работать с MoE архитектурой. Модель весит примерно 22 ГБ, видеопамяти у меня 12 ГБ, значит 10 ГБ от модели улетают в ОЗУ моему CPU. Так как это Ultra MoE, модель обладает 256 слоями, на один токен используется 3B параметров. Значит, можно загрузить слои Embedding и Attention в VRAM, а FFN отправить в VRAM? Да, так можно и нужно делать, но Ollama такого не умеет. Поэтому существует llama.cpp. Его можно скомпилировать с поддержкой SYCL/Vulkan, им можно пользоваться в браузере через llama-server (с интерфейсом как у ChatGPT), команду запуска можно упаковать в скрипт.

Как AUR-хелпер я использую yay. Вот так выглядит установка для Arch Linux, компиляция с поддержкой SYCL:

yay # обновляем пакеты
sudo usermod -aG render $USER
sudo usermod -aG video $USER
yay -S intel-deep-learning-essentials # необходимый пакет для компиляции под Intel
sudo pacman -S clinfo cmake # устанавливаем необходимые пакеты
sudo clinfo -l # служит для проверки драйверов
source /opt/intel/oneapi/setvars.sh # инициализируем переменные
sycl-ls # смотрим список доступных устройств
cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx # создаем Makefile
cmake --build build --config Release -j -v # компилируем

Я скомпилировал его, установил Qwen 3.6 c Hugging Face, запустил одной большой командой с нужными мне параметрами:

source /opt/intel/oneapi/setvars.sh # выполняем если еще не запущен
sudo LD_LIBRARY_PATH=/opt/intel/oneapi/compiler/latest/lib:$LD_LIBRARY_PATH \
  ~/llama.cpp/build/bin/llama-server \
  -m ~/Downloads/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf \
  -ngl -1 \ # переносит все возможные слои в видеопамять
  --cpu-moe \ # выносит тяжелые FFN слои в ОЗУ, оставляя attention и KV-кэш в VRAM
  -np 1 \ # указывает серверу выполять только 1 процесс паралельно
  --port 8080

Таким образом, скорость генерации увеличилась до 20 tokens/s, так как критически важные слои теперь находятся в скоростной видеопамяти. Сама модель интересная, хорошо подходит для кодинга. В бенчмарке по олимпиадной математике AIME Qwen 3.6 превосходит Gemma 4 E4B в 2 раза, но потребляет в 4 раза больше памяти, при том что находится в большей квантизации. При этом в ней много старых весов, она считает, что сейчас 2024 год, не знает, что она Qwen 3.6, считая себя Qwen 2.5 и даже более древними версиями.

Подведем итоги

Даже на бюджетном игровом железе можно запускать интересные LLM. Компактные dense модели хорошо подходят для запуска в видеопамяти, а большие Ultra MoE идеальны для развертывания на мощностях GPU и CPU одновременно. Ollama подходит для запуска моделей в пределах видеопамяти, llama.cpp более гибкий и сложный инструмент, имеет большее количество возможностей чем Ollama. Gemma 4 E4B показала себя как отличная «карманная» модель, будет летать в 40 tokens/s в Q8 на любой видеокарте с 8 ГБ памяти на борту, а Qwen 3.6 35B A3B отличная Ultra MoE для всех у кого есть вдобавок еще 16 ГБ RAM.

Всем удачи!