Как ускорить генерацию локальных LLM на Arch Linux в 20 раз

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

Спецификации и ОС

Мой «LLM-сервер» — это типичный домашний ПК, который на сегодняшний день можно классифицировать как бюджетную игровую сборку:

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

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

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

Оперативная память: 2 модуля DDR4 по 8 ГБ (3200 МГц)

Накопитель: SSD NVMe PCI Express 3.0

ОС: Arch Linux

Железо стандартное, однако наличие дискретной видеокарты от Intel и выбор дистрибутива Linux делают систему довольно любопытной. GPU оснащен 12 ГБ памяти GDDR6 и 192-битной шиной, что по пропускной способности даже превосходит RTX 5060. К тому же, открытые драйверы Intel идеально вписываются в экосистему Linux. Arch Linux я выбрал за лаконичность (менее 700 МБ ОЗУ в простое), качественную документацию и отличную поддержку актуального софта.

Отдельного упоминания заслуживает оперативная память. Для нейросетей важен не только объем, но и пропускная способность. Мои модули изначально работали на 2666 МГц, что явно недостаточно. Пришлось выполнить ручной разгон до 3200 МГц при напряжении 1.30V (чипы Samsung C-Die капризны к вольтажу выше 1.35V). Для комфортного запуска LLM желательно иметь запас по скорости памяти, так как это напрямую влияет на «токены в секунду». Перейдем к выбору программных инструментов.

LM Studio против Ollama

Первым в списке был LM Studio. После запуска и предложения загрузить Gemma 4 E4B, программа заняла 3 ГБ оперативной памяти еще в главном меню, что показалось мне избыточным. Перегруженный интерфейс не вызвал симпатий, поэтому я предпочел Ollama. Стоит учесть: стандартный пакет Ollama из репозиториев не поддерживал Vulkan/SYCL, поэтому для корректной работы с видеокартой Intel я установил версию ollama-vulkan из официальных репозиториев Arch.

Gemma 4 E4B

Я протестировал Gemma 4 E4B (квантизация 8 бит) — современную мультимодальную dense-модель от Google. Поскольку это dense-архитектура, где задействуются все параметры при расчетах, для высокой скорости модель должна полностью умещаться в видеопамять. Используя Modelfile, я расширил контекстное окно с 4096 до впечатляющих 131 072 токенов.

При весе в 5.5 ГБ модель работает очень резво, выдавая порядка 50 tokens/s. Она демонстрирует значительный прогресс относительно прошлых версий: появилась мультимодальность, поддержка Thinking Mode и расширенный контекст. В математическом тесте AIME эта «малютка» показала 42.5%, что вдвое лучше результатов крупной Gemma 3 27b. Из нюансов — модель иногда ошибается в падежах при работе с русским языком.

Qwen и возможности llama.cpp

Мне было интересно испытать архитектуру Ultra MoE на практике, поэтому я попробовал запустить Qwen 3.5 35B A3B в квантовании Q4. Стандартная Ollama выдала около 1 token/s. Проблема в том, что модель весом 22 ГБ не умещается в 12 ГБ видеопамяти, и часть данных сбрасывается в ОЗУ, замедляя процесс. Кроме того, Ollama не умеет грамотно распределять MoE-архитектуру между GPU и CPU.

На помощь приходит llama.cpp. Его можно скомпилировать с поддержкой SYCL/Vulkan, что позволяет тонко настроить работу с «железом». Вот процесс сборки с поддержкой SYCL для Arch Linux:

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 с параметрами, которые выгружают наиболее критичные слои в быструю видеопамять:

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 \ # перенос слоев в VRAM
  --cpu-moe \ # вынос FFN-слоев в оперативную память
  -np 1 \ # ограничение на 1 поток
  --port 8080

В результате скорость генерации выросла до 20 tokens/s. Модель великолепно справляется с написанием кода и в олимпиадной математике обходит Gemma 4 E4B вдвое, хотя и требует в 4 раза больше памяти. Единственный забавный момент: модель «не осознает» свою версию, часто называя себя Qwen 2.5 или более старыми релизами, и ошибочно считает текущим годом 2024-й.

Заключение

Даже на бюджетном ПК можно эффективно работать с современными нейросетями. Компактные модели типа Gemma 4 идеально подходят для работы в видеопамяти, тогда как архитектуры Ultra MoE при грамотной настройке через llama.cpp позволяют задействовать связку GPU + CPU. Gemma 4 E4B — отличный «карманный» ассистент для карт с 8 ГБ VRAM, а Qwen 3.6 — мощный выбор для тех, у кого есть запас оперативной памяти.

Удачи в экспериментах!

 

Источник

Читайте также