Кодинг-модель на 12 ГБ видеопамяти
Серия замеров на одном домашнем ПК: что пробовали, что сработало, что нет.
Qwen3.8-27B, Q4_K_M
Qwen3.8-27B, Q6_K_M
Qwen3.6-35B-A3B, Q5_K_XL
16,5 ГБ
23,1 ГБ
27,2 ГБ
Светлая часть полосы не помещается в видеокарту и уходит в оперативную память. Ещё нужно место под контекст.
Как мы меряли
- Реальная глубина. Скорость смотрим в OpenCode, внутри длинной сессии, а не коротким запросом.
- Один параметр за раз. Иначе непонятно, что дало результат.
- Чистая машина. Перед серьёзным замером перезагружаем ПК.
Токенов в контексте при замере
короткий запрос curl
старт сессии OpenCode
глубокая сессия OpenCode
≈30
≈13,5K
до 36K
На коротком замере рейтинг конфигураций несколько раз выходил обратным тому, что показывала работа в OpenCode.
Три кванта Qwen3.8-27B на реальной глубине
Один и тот же рецепт, четыре хода в OpenCode, контекст 13,5–14,8K токенов.
IQ4_XS
Q4_K_S
Q4_K_M
4,4 tok/sпринято 80%
5,7 tok/sпринято 79%
6,6 tok/sпринято 87%
Q4_K_M весит больше, но драфт MTP угадывает у него чаще. Скорее всего, поэтому он быстрее. Это наше предположение, отдельно мы его не проверяли.
64 слоя модели. Рецепт сообщества: часть слоёв считает процессор.
Что не сработало
Плоский -ngl 56 с MTP вместо рецепта с переносом тензоров (IQ4_XS)
На коротком тесте 8,7–9,3 tok/s, на реальной глубине 2,9–3,0. Рецепт держал 4,3–4,7.
Вернуть 2 слоя Q6_K_M с процессора на видеокарту
На контексте 19K: 3,01 против 3,85 tok/s, на 22% медленнее. Запас видеопамяти съел кэш контекста.
ngram-mod для Qwen3.6-35B-A3B: подсказки из уже написанного текста
Принято 2–18% черновиков. Скорость 14,7 и 23,2 tok/s против 30–32 без него.
Gemma 4 26B A4B вместо Qwen
SWE-bench Verified: 17,4% против 73,4% у Qwen3.6-35B-A3B. Цифры из опубликованного сравнения, не наши замеры.
Обновление llama.cpp ускорило обработку промпта
Скорость чтения промпта при контексте около 8K токенов.
0.4.0-dev
сборка 10878
0.5.0-dev
сборка 11146
42–52
215–226
Системный промпт OpenCode, около 13,5K токенов: примерно 4–5 минут против минуты. Это расчёт по измеренным скоростям.
AVX-512 включён: llama.cpp загружает ggml-cpu-icelake.
Находка: MTP для Qwen3.6-35B-A3B
MTP: модель угадывает несколько токенов вперёд и проверяет их за один проход.
В обычном файле этого модуля нет. Он есть в отдельной сборке Unsloth, мы взяли Q5_K_XL.
40 слоёв. Эксперты 37 слоёв в оперативной памяти (--n-cpu-moe 37), остальное на видеокарте.
7,8K, без MTP
7,8K, с MTP
24K, без MTP
24K, с MTP
31,77
38,79 +22%принято 89%
29,63
27,61 −7%принято 58%
В рабочем диапазоне до 20K выигрыш есть. На 24K MTP угадывает хуже, и выигрыш пропадает.
Одна настройка до и после перезагрузки
Qwen3.8-27B, Q4_K_M. Конфиг, сборка и задача те же.
до перезагрузки, 17,6K
после, 25,4K
после, 35,4K
1,92
5,19
6,74
Скорость выросла в 2,7–3,5 раза, хотя контекст стал глубже. Нагрев процессора или состояние памяти: что именно, мы не выясняли.
Итог: скорость на разной глубине контекста
tok/s у Qwen3.6-35B-A3B с MTP на контексте 7,8K
На контексте около 25K: 27,6 tok/s у 35B с MTP и 5,2 у 27B. Разница в 5,3 раза.
35B-A3B с MTP
35B-A3B без MTP
27B Q4_K_M, замеры на разной глубине
Рабочая конфигурация и что осталось проверить
Qwen3.6-35B-A3B, Q5_K_XL с MTP, ежедневный запуск
llama-server -m Qwen3.6-35B-A3B-UD-Q5_K_XL.gguf --no-mmproj -ngl 999 --n-cpu-moe 37 -c 262144 -fa on -t 8 --parallel 1 --cache-type-k q8_0 --cache-type-v q8_0 --spec-type draft-mtp --spec-draft-n-max 2
Проверено в OpenCode на глубине 7,8K и 24K.
- --spec-draft-n-max 3. На 7,8K дал 44,5 tok/s и 93% принятых. На 24K не мерили.
- Число потоков -t. Значения 6, 8 и 12 не перебирали.
- MTP у 35B после свежей перезагрузки. На глубине не перемеряли.
- Качество кода. Модели сравнивали по скорости, а не своими тестами на качество.
Цифры и условия замеров
Все скорости это генерация ответа в OpenCode на проекте FastAPI. Замеры квантов 27B сделаны до обновления llama.cpp, замеры MTP для 35B после. Звёздочкой отмечено то, что не проверено на глубине.
| Конфигурация | Контекст, токенов | tok/s | Принято MTP |
|---|---|---|---|
| Qwen3.8-27B IQ4_XS, рецепт с переносом FFN | 13,5–14,8K | ≈4,4 | ≈80% |
| Qwen3.8-27B Q4_K_S, тот же рецепт | 13,5–14,8K | ≈5,7 | ≈79% |
| Qwen3.8-27B Q4_K_M, тот же рецепт | 13,5–14,8K | ≈6,6 | ≈87% |
| Qwen3.8-27B Q6_K_M, все 64 слоя FFN на процессоре | ходы OpenCode | ≈4,3 | |
| Qwen3.8-27B Q4_K_M до перезагрузки | 17,6K | 1,92 | 72,5% |
| Qwen3.8-27B Q4_K_M после перезагрузки | 25,4K | 5,19 | 63,1% |
| Qwen3.8-27B Q4_K_M после перезагрузки | 35,4K | 6,74 | 93,2% |
| Qwen3.6-35B-A3B Q5_K_M без MTP, --n-cpu-moe 34 | 7,8K / 24K | 31,77 / 29,63 | |
| Qwen3.6-35B-A3B Q5_K_XL с MTP, --n-cpu-moe 37, n-max 2 | 7,8K / 24K | 38,79 / 27,61 | 89% / 58% |
| То же, n-max 3* | 7,8K | 44,46 | 93% |