Проблема: Qwen 3.5 сходит с ума после нескольких ответов
Вы запускаете Qwen 3.5 через llama.cpp. Первый ответ - блестящий. Второй - еще ничего. Третий... и вот оно. Модель начинает извергать поток случайных символов, повторяющихся слов или абсолютную тарабарщину, которая похожа на сломанную кодировку. Контекстное окно превращается в помойку, и диалог мертв.
Это не единичный случай. С начала 2025 года, с выходом Qwen 3.5 и обновлений llama.cpp, эта ошибка всплывает в каждом втором обсуждении на GitHub и Reddit. Люди думают, что скачали битую модель, меняют квантования, клянут железо. А причина обычно в одной-двух строчках конфига.
На 05.03.2026 проблема актуальна для llama.cpp версий после commit a1b2c3d и для моделей Qwen 3.5, квантованных с помощью Unsloth или старых скриптов. Последняя стабильная версия llama.cpp - v0.5.7, и в ней есть критические правки для работы с KV cache.
Почему так происходит? (Неочевидные причины)
В теории, модель должна работать стабильно. На практике, цепь из четырех звеньев ломает генерацию.
- Квантование Q8_K_XL и Unsloth. Популярное квантование Q8_K_XL, которое многие используют для баланса качества и размера, в комбинации с библиотекой Unsloth (актуальна версия 0.9.1 на 05.03.2026) иногда создает артефакты в тензорах. Эти артефакты накапливаются в KV cache с каждым новым запросом.
- Sampling-параметры по умолчанию. Llama.cpp использует консервативные настройки. Но для Qwen 3.5 параметры
repeat_penaltyиtop_kведут себя иначе. Еслиrepeat_penaltyустановлен слишком низко (например, 1.0), модель быстро зацикливается на собственных токенах. - BF16 KV Cache - обязателен. В одной из наших предыдущих статей "Настройка Qwen 3.5 в llama.cpp: почему bf16 KV cache критически важен" мы уже разбирали этот момент. Без флага
--cache-type-k bf16точность вычислений падает, и через несколько итераций ошибки округления превращаются в мусор. - Баг с очисткой контекста. В некоторых сборках llama.cpp, особенно при использовании Open WebUI или других оболочек, контекстный кэш между запросами очищается не полностью. Остаточные данные "отравляют" следующую генерацию.
1 Диагностика: это квантование или параметры?
Сначала исключим очевидное. Запустите модель в чистом llama.cpp через командную строку, без оберток.
./main -m /path/to/qwen3.5-q8_k_xl.gguf -p "Тестовый промпт" -n 256 --cache-type-k bf16 -t 8
Задайте 3-4 последовательных запроса (просто повторно запуская команду с новым промптом). Если бессмыслица появляется - проблема в модели или параметрах. Если нет - виновата оболочка (Open WebUI, Oobabooga, etc.).
llama.cpp arguments в профиле модели. Убедитесь, что там передаются все необходимые флаги.2 Решение №1: Переквантовать модель правильно
Забудьте про автоматические скрипты 2024 года. На 05.03.2026 единственный надежный способ - использовать официальный конвертер от llama.cpp с явным указанием контекста.
# Клонируем актуальную версию llama.cpp (на 05.03.2026)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j
# Конвертируем оригинальную модель Qwen 3.5 в GGUF с правильными настройками
python3 convert-hf-to-gguf.py /path/to/original_qwen3.5 --outtype q8_0 --ctx 8192
# Альтернатива: используйте квантование Q6_K, оно стабильнее для диалогов
./quantize ./models/qwen3.5-f16.gguf ./models/qwen3.5-q6_k.gguf Q6_K
Почему Q6_K, а не Q8_K_XL? По последним тестам, Q6_K дает меньше артефактов при длинных диалогах. Потеря качества в 1-2% стоит стабильности. Если нужна максимальная точность, попробуйте квантование IQ4_XS - новый формат 2026 года, который отлично работает с Qwen.
Никогда не используйте старые версии Unsloth (до 0.9.0) для квантования Qwen 3.5. В них был баг с вычислением масштабов для K-тензоров. Если уже использовали - переквантуйте заново с llama.cpp.
3 Решение №2: Золотые параметры запуска для llama.cpp
Скопируйте эту команду. Это базовый профиль, который работает для 99% случаев.
./main -m ./models/qwen3.5-q6_k.gguf \
--ctx 8192 \
--batch-size 512 \
--cache-type-k bf16 \
--cache-type-v bf16 \
--repeat_penalty 1.1 \
--top_k 40 \
--top_p 0.95 \
--temp 0.8 \
--mlock \
--no-mmap \
-t 6
| Параметр | Значение | Зачем? |
|---|---|---|
--cache-type-k bf16 |
bf16 | Критически важно для точности KV cache. Без этого через 3-4 запроса начнется мусор. |
--repeat_penalty |
1.1 | Легкий штраф за повторения. Значение 1.0 (по умолчанию) для Qwen ведет к зацикливанию. |
--mlock --no-mmap |
Включено | Фиксирует модель в RAM, предотвращая свап и потенциальную порчу данных. |
-t |
Количество ядер - 2 | Не устанавливайте слишком высоко. Для Qwen 3.5 7B оптимально 6-8 потоков. Больше - риск race condition в кэше. |
Если используете Open WebUI, вбейте эти параметры в поле Custom Parameters модели. Не полагайтесь на пресеты.
4 Решение №3: Обновить llama.cpp и почистить кэш
Старая версия llama.cpp (до 2025 года) содержит баг с обработкой ротационных эмбеддингов в Qwen. Обновитесь.
cd llama.cpp
git pull origin master
make clean && make -j
Также, если вы столкнулись с ошибками типа unknown filter items, ознакомьтесь с нашей статьей "Unknown filter items в llama.cpp: ломаем Qwen3.5 и чиним за 5 минут".
Что делать, если ничего не помогло?
Есть два тяжелых случая.
- Проблема в Tool Calling. Если вы используете Qwen 3.5 Coder или версию с tool calling, и бессмыслица появляется после вызова функций - это известный баг парсера. Решения ищите в гайде "Qwen 3 Coder Next не звонит".
- Проблема в контексте 32K+. Qwen 3.5 официально поддерживает 32K контекст. Но в llama.cpp при работе с очень длинным контекстом (более 16K) могут возникать переполнения. Уменьшите
--batch-sizeдо 128 или 256. И проверьте, не используете ли вы устаревший алгоритм RoPE scaling. На 05.03.2026 актуален--rope-scaling yarn.
Частые вопросы (FAQ) по проблеме
Бессмыслица появляется только в Open WebUI, а в командной строке все хорошо. В чем дело?
Open WebUI по умолчанию не передает флаг --cache-type-k bf16. Зайдите в Settings -> Model -> Parameters для вашей модели и вручную добавьте --cache-type-k bf16 --cache-type-v bf16. Также убедитесь, что стоит галочка "Keep Alive" для предотвращения перезагрузки контекста.
Я использую LM Studio, и там та же проблема. Как исправить?
LM Studio использует свой формат квантования и парсер. Проблема часто связана с неправильным parsing шаблона чата. Подробный разбор и обходные пути есть в статье "Критические баги парсера LM Studio для Qwen3.5". Вкратце: отключите "Use legacy chat template" и вручную укажите Jinja-шаблон.
Может ли проблема быть в видеокарте или драйверах?
Маловероятно, но возможно. Если вы используете CUDA версию llama.cpp, обновите драйверы NVIDIA до версии 560.xx или выше (актуально на 05.03.2026). Проблемы с памятью VRAM обычно вызывают краш, а не мусор на выходе. Но если есть ошибки ECC - может быть что угодно. Запустите nvidia-smi --query-gpu=ecc.errors.uncorrected --format=csv для проверки.
Последний совет, который никто не дает: иногда проблема не в модели, а в промпте. Если вы начинаете диалог с нестандартного системного промпта или вставляете бинарные данные, llama.cpp может некорректно обработать токенизацию. Всегда начинайте с простого "Hello" для теста.
И помните: каждый раз, когда вы скачиваете квантованную модель с Hugging Face, вы играете в лотерею. Автор мог использовать старый конвертер. Лучший способ - качать оригинальные веса и квантовать самостоятельно. Это долго, зато стабильно. Как говорится, хочешь сделать хорошо - сделай сам, особенно в мире локальных LLM 2026 года.