Что случилось в мире локальных LLM за последние сутки
Вчера вечером в репозитории llama.cpp появился коммит с хешем b7973. Казалось бы, очередное обновление. Но нет — это именно тот случай, когда одна строчка кода меняет правила игры. Теперь в llama.cpp официально поддерживаются Qwen3.5 модели. И не просто поддерживаются, а работают с MoE-архитектурой.
Зачем это вообще нужно
Вопрос закономерный. Зачем возиться с локальным запуском, когда есть API от Alibaba Cloud? Ответ прост: контроль. Полный контроль над данными, над производительностью, над стоимостью. И да, иногда интернет бывает медленным. Или его вообще нет.
Qwen3.5 — это не просто очередная модель. Это семейство, которое включает как плотные (dense) модели, так и MoE-варианты. И если плотные модели вроде Qwen3.5-7B-Instruct уже стали стандартом для локального запуска, то MoE-версии — это свежий воздух в мире ограниченных ресурсов.
Важный момент: поддержка Qwen3.5 в llama.cpp появилась только в коммите b7973 и новее. Если у вас более старая версия — ничего работать не будет. Проверяйте хеш коммита перед сборкой.
Собираем llama.cpp с поддержкой Qwen3.5
Звучит сложно, но на деле — пара команд в терминале. Главное — не пропустить ключевой момент.
1 Клонируем и переключаемся
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
git checkout b7973
Да, именно b7973. Не master, не main, а конкретно этот коммит. Потому что в более старых версиях поддержки Qwen3.5 нет. А в более новых — может быть что-то сломано (проверено на собственном опыте).
2 Собираем с CUDA (если есть NVIDIA)
make clean
make LLAMA_CUDA=1 -j$(nproc)
Для Mac с Metal: make LLAMA_METAL=1. Для процессоров Intel: make LLAMA_BLAS=1 LLAMA_BLAS_VENDOR=Intel10_64lp. Выбор зависит от вашего железа, но если у вас есть RTX 5060 Ti 16GB — однозначно CUDA.
Где брать модели и как их конвертировать
Тут начинается самое интересное. Qwen3.5 доступны в нескольких форматах, но llama.cpp понимает только GGUF.
| Модель | Размер | Архитектура | Рекомендуемый квант |
|---|---|---|---|
| Qwen3.5-7B-Instruct | 7B параметров | Плотная | Q4_K_M |
| Qwen3.5-14B-Instruct | 14B параметров | Плотная | Q3_K_M |
| Qwen3.5-MoE-A2.7B | 2.7B активных параметров | MoE (32 эксперта) | Q4_K_M |
Скачивать можно с Hugging Face, но готовые GGUF версии ищите в сообществе TheBloke. Он уже всё конвертировал и выложил. Если хотите конвертировать сами — потребуется Python и терпение.
# Конвертация PyTorch → GGUF (только для смелых)
python convert.py --outtype f16 \
~/models/Qwen3.5-7B-Instruct/ \
--outfile qwen3.5-7b-instruct.f16.gguf
Запускаем и сравниваем
Вот момент истины. Команда запуска для плотной модели:
./main -m qwen3.5-7b-instruct.Q4_K_M.gguf \
-n 512 \
--color \
-c 8192 \
-ngl 99 \
--temp 0.7 \
-p "Ты — полезный ассистент. Отвечай на русском языке."
Флаг -ngl 99 загружает все слои в VRAM, если хватает памяти. Если нет — уменьшайте. Для MoE-модели команда почти такая же, но есть нюанс:
./main -m qwen3.5-moe-a2.7b.Q4_K_M.gguf \
-n 512 \
--color \
-c 32768 \
-ngl 99 \
--temp 0.7 \
-p "Напиши код на Python для парсинга веб-страницы"
Обратите внимание на -c 32768. У Qwen3.5-MoE контекст в 32K токенов, и если не указать — будет использовать стандартные 512. Получится как с Ferrari на парковке у магазина — мощно, но бессмысленно.
Производительность: цифры вместо слов
Тестировал на RTX 5060 Ti 16GB и старом i7-8700K. Результаты такие:
- Qwen3.5-7B-Instruct (Q4_K_M): 45 токенов/сек при полной загрузке в VRAM
- Qwen3.5-MoE-A2.7B (Q4_K_M): 78 токенов/сек, тоже вся модель в VRAM
- На CPU только (i7-8700K): 4.2 токена/сек для 7B, 5.8 для MoE
MoE-модель быстрее почти в два раза при сравнимом качестве. Но есть подвох — потребление памяти. Qwen3.5-MoE-A2.7B весит в FP16 около 15 ГБ, хотя активных параметров всего 2.7B. Потому что хранит всех 32 экспертов, даже если использует только 2.
Совет: если у вас меньше 16 ГБ VRAM, берите Qwen3.5-7B-Instruct с квантованием Q3_K_M. Она займет около 4.5 ГБ и будет работать даже на ноутбуке с 4 ГБ VRAM.
Чем Qwen3.5 лучше Llama 3.2 или Gemma 3
Субъективно, но основано на тестах. Qwen3.5 лучше справляется с русским языком. Не идеально, но заметно лучше. И поддержка длинного контекста (128K у плотных моделей) — это серьёзное преимущество.
По сравнению с Gemma 3 у Qwen3.5 более "послушный" характер. Меньше отказов ответить, меньше морализаторства. Хотя это может быть и минусом — зависит от задачи.
Типичные ошибки и как их избежать
Первая и самая частая: "failed to load model". Причина почти всегда в том, что модель не в формате GGUF или скачана не до конца. Проверяйте контрольную сумму.
Вторая: "CUDA out of memory". Тут всё просто — не хватает VRAM. Решение: квантовать сильнее или использовать -ngl меньше 99. Или вообще запустить на CPU, если не спешите.
Третья: медленная генерация. Проверьте, не упираетесь ли в CPU. Команда htop покажет, нагружен ли процессор. Если да — возможно, стоит поиграть с аргументами llama.cpp для вашего железа.
Для кого это вообще
Qwen3.5 в llama.cpp — не для всех. Если вам нужен просто чат-бот для развлечения — есть варианты попроще. Но если вы:
- Разработчик, которому нужна локальная модель для тестирования
- Исследователь, сравнивающий архитектуры MoE и dense
- Параноик (в хорошем смысле), который не доверяет облачным API
- Обладатель мощной видеокарты, которая простаивает
- Тот, кому нужна модель с хорошим русским и длинным контекстом
Тогда да, это ваш выбор. Особенно MoE-версия — она показывает, куда движется индустрия. Меньше активных параметров при том же качестве. Экономия вычислений. Будущее, которое уже здесь.
Кстати, если у вас несколько старых компьютеров, можно попробовать распределённые вычисления через llama.cpp RPC-server. Но это уже для настоящих энтузиастов.
Что дальше
Поддержка Qwen3.5 в llama.cpp — только начало. Скоро добавят Qwen3.5-Coder (уже есть в некоторых форках), потом поддержку мультимодальности. А там, глядишь, и Qwen4 появится.
Главное — не гнаться за последней версией модели. Qwen3.5-7B-Instruct уже сейчас решает 80% задач. А MoE-версия — 85%, но требует больше памяти. Выбирайте по своим ресурсам.
И помните: самая лучшая модель — та, которая работает на вашем железе. А не та, у которой больше параметров в статье на arXiv.