Недавно я обновил свою видеокарту до RTX-5060-TI 16GB. Получив новую карту я решил исследовать, что можно на ней запустить из нейросетей. Традиционно пишут, что нормальные ИИ модели начинаются с rtx3090 и выше, что ниже 24GB VRAM жизни нет. В этой статье я постараюсь развеять этот миф.
Модели на ограниченном железе всегда имеют компромисс между скоростью, качеством и контекстом. Сформирую требования, пригодные для агентик кодинга:
-
Контекстное окно > 80к (системный промпт + пара скиллов уже 15к токенов, при низком контексте модель постоянно будет забывать детали и сжимать историю сообщений)
-
Скорость >= 50 тпс (чем выше скорость, тем быстрее проходят циклы разработчки, тем быстрее новые фичи идут в релиз. До этого пробовал с 30 тпс работать, агент кажется заторможенным)
-
Интеллект должен быть достаточным для того, чтобы допускать мало ошибок в коде и чтобы его дебагинг больше чинил, чем ломал
Выбор модели
Бесспорным флагманом локальных нейросетей на низкой врам сейчас является Qwen3.8–27b. Также имеется более умный Qwen3.8-Next‑Flash, но он требует не менее 64гб ОЗУ для нормальной работы и его ТПС на моем железе держится в районе 20, что не удовлетворяет требованиям скорости. В качестве целевой модели будет выбран Qwen3.8–27b
Начнём с очевидного – стандартный qwen весит 51,77ГБ – получим почти полную выгрузку в ОЗУ и скорость 0.3 токена в секунду. Исходная модель кодирует веса в формат bf16, что означает 16 байт на один вес модели. Для высокой скорости работы модель и её веса должны целиком помещаться в гпу, поэтому необходимо брать квантованную модель.
Кратко расскажу суть квантования. Специалисты ML с Hugging Face сжимают веса моделей так, чтобы минимизировать потери её интеллекта, при этом значительно уменьшив вес файла. Сейчас уже научились квантовать модели практически без потерь навыков в кодинге. Именно такие кванты используются для нашей задачи. Под целевое железо нам подходят 3 и 4 кванты, обеспечивающие размеры модели менее 16 гигабайт.
В процессе тестирования моделей всплыло дополнительное требование. Стандартные модели поставляются с цензурой, которая часто вставляет палки в колеса, отказываясь выполнить запрос. Для решения этой проблемы выбирались кванты с модификацией на удаление цензуры. На HF популярны методы Abliteration и Heretic. Abliteration находит в активациях модели направление, связанное с отказами, и модифицирует веса так, чтобы подавить его влияние без полноценного переобучения. Heretic развивает этот подход и автоматически подбирает параметры такой модификации, стараясь одновременно снизить число отказов и минимизировать отклонение поведения модели от оригинала.

Qwen3.8-27B-IQ4_XS
Помимо чисел у квантов ещё есть категории от XXS до XXL, от них зависит насколько агрессивное было сжатие. Стандартный Q4 квант весит чуть больше 16гб и имеет выгрузку в озу, поэтому для тестов использовался более малый IQ4_XS (вес 15.3 ГБ). Популярных децензоров с минимальными потерями в кодинге два – orcarouter и JonathanColetti. Я протестировал оба и разницы не заметил, orca по ощущением немного лучше рисует svg, поэтому остановился на ней.
Для запуска модели использовался llama‑server последней версии. Конфиг к этой модели выглядел так:
llama-server ^
-m models/Qwen3.8-27B-Uncensored-IQ4_XS.gguf ^
-ngl all ^
--fit off ^
-c 64000 ^
-np 1 ^
--flash-attn on ^
-ctk q4_0 ^
-ctv q4_0 ^
-b 512 ^
-ub 128 ^
--jinja ^
--reasoning off
Обьяснение параметров
ngl all – попытаться положить всю модель и контекст на гпу, ускоряет вычисления
fit off – запрещает серверу менять параметры контекста и слоёв модели на гпу. По умолчанию может срезать контекст или выгрузить часть слоёв на процессор при нехватке гпу памяти
c – доступный контекст, в данном случае 64000 токенов
np 1 – ограничивает параллельность запросов к серверу до одного, благодаря нему делает некоторые оптимизации ускоряя вычисления
flash-attn – быстрое внимание, делает вычисления блоками, снижает потребление врам и повышеат скорость
ctk, ctv – квантование контекста до 4 бит, снижает потребление врам
b, ub – батчи на которых выполняется prefill, тоесть обработка input токенов. Повышение b увеличивает скорость появления первого такена вместе с расходом врам, 512/128 компромисс скорости и расхода памяти
jinja – формат общения с моделью удобный для агентов и llama ui
reasoning – влияет на уровень рассуждений и бюджет токенов на них
Данный конфиг дал примерно 25 тпс, что недостаточно для нормальной работы. В качестве оптимизации был изучен механизм mtp (Multi‑Token Prediction) – подход, при котором модель пытается предсказывать сразу несколько последующих токенов вместо одного. Этот метод особенно хорош в написании кода, на нём прирост достигает х3 скорости. В рассуждениях скорость становится ниже, поскольку модель реже угадывает токены. В текущую модель mtp уже встроен, для его активации потребовалось добавить в конфиг несколько новых параметров:
-ctkd q4_0 ^
-ctvd q4_0 ^
--spec-type draft-mtp ^
--spec-draft-n-max 3 ^
Обьяснение
ctkd, ctvd – квантование мтп кэша, также экономит врам
spec-type draft-mtp – метод спекулятивного декодинга. Кроме мтп есть другие методы, один из них будет описан дальше
spec-draft-n-max – сколько токенов за раз пытается угадать модель. Число индивидуально под каждую модель, вычисляется эмпирическим путём через тестирование на одинаковых промптах
Добавление этих параметров повысило средний тпс до 40-50, что в целом удовлетворяет требованию по скорости, но мтп увеличило расход врам и потребовало уменьшить контекст до 32к. С открытом браузером на несколько вкладок контекст пришлось дополнительно понизить до 20к, что сделало этот вариант непригодным для агент кодинга. Я оставил этот квант в качестве модели для чата, как эксперта для одноразовых задач. Пример открытки, нарисованной этой моделью с помощью html+svg:
Qwen3.8-27B-UD-Q3_K_XL
Чтобы вместисть больше контекста пришлось искать модели в третьем кванте. Подходящей под эту задачу мне показалась UD‑Q3_K_XL (13.2 ГБ) от outsourc‑e. Эта модель является форком популярной версии от unsloth с вырезанной цензурой, сохраняя максимальные навыки кодинга. Под эту модель был написан отдельный конфиг:
llama-server ^
-m models/Qwen3.8-27B-Unleashed-UD-Q3_K_XL.gguf ^
-ngl all ^
--fit off ^
-c 92160 ^
-np 1 ^
--flash-attn on ^
-ctk q4_0 ^
-ctv q4_0 ^
-ctkd q4_0 ^
-ctvd q4_0 ^
--spec-type draft-mtp ^
--spec-draft-n-max 3 ^
-b 512 ^
-ub 128 ^
--jinja ^
--reasoning-effort low ^
--reasoning-budget 2048
Из заметных изменений здесь комфортно вмещается 92к контекста даже с открытым браузером, а также добавлен небольшой reasoning для более качественных ответов. Эта модель выдаёт около 50 тпс на кодинге и полностью соответствует заявленным в начале критериям.
После получения подходящей модели я начал смотреть как подключить её к opencode. Для этого потребовалось модифицировать её конфиг вписав в неё локальный адрес сервера llama:
{
"$schema": "https://opencode.ai/config.json",
"model": "llama.cpp/qwen3.8-27b",
"plugin": [
"superpowers@git+https://github.com/obra/superpowers.git"
],
"provider": {
"llama.cpp": {
"npm": "@ai-sdk/openai-compatible",
"name": "llama-server (local)",
"options": {
"baseURL": "http://127.0.0.1:8080/v1"
},
"models": {
"qwen3.8-27b": {
"name": "Qwen3.8 27B",
"limit": {
"context": 92160,
"output": 15360
}
}
}
}
},
"compaction": {
"auto": true,
"prune": true,
"reserved": 8192
}
}
Из интересного, я добавил ограничение аутпута – 15к токенов на один ответ, чтобы модель не сьела весь контекст и автоматическое сжатие контекста за 8к токенов до лимита. Также был добавлен плагин superpowers , который делает модели значительно эффективнее, засчёт создания детальных планов и разработки через TDD.
В качестве тестов модель написала несколько простых игр на html+js. С хорошим планом игры работали уже с первого промпта, в случае возникновения ошибок нейросеть самостоятельно вносила исправления до полной работоспособности.
На этапах thinking и составлении плана тпс проседает до ~38, на написании кода вырастает до 50. Это связано с тем, что мтп чаще угадывает код и значительно реже обычный текст. Эту нейросеть можно использовать в работе, но я решил найти варианты, которые можно разогнать ещё сильнее.
Qwen3.8-GSQ-RCO-IQ3_S
Эта версия кванта размером всего 11.8 гб, что по задумке обеспечивает большую вместимость контекста. У неё имеется версия со встроенным мтп, но в ходе тестов выяснилось, что на этой модели мтп плохо угадывает контекст. В результате была взята модель без встроенного мтп, а также протестирована новая архитектура DFlash. Это модифицированная версия мтп, которая позволяет прогнозировать следующие токены параллельно, давая прирост в скорости. Файл DFlash2-Q4_K_M весит 1.14 гб и запускается вместе с моделью. Для запуска я использовал следующий конфиг:
llama-server ^
-m models/Huihui-Qwen3.8-27B-abliterated-GSQ-RCO-IQ3_S.gguf ^
-md models/Qwen3.8-27B-DFlash2-Q4_K_M.gguf ^
-ngl all ^
-ngld all ^
--fit off ^
-c 92160 ^
-np 1 ^
--flash-attn on ^
-ctk q4_0 ^
-ctv q4_0 ^
-ctkd q4_0 ^
-ctvd q4_0 ^
--spec-type draft-dflash ^
--spec-draft-n-max 4 ^
-b 512 ^
-ub 128 ^
--jinja ^
--reasoning-effort low ^
--reasoning-budget 2048
Из примечательного здесь spec‑type draft‑dflash – новый метод прогнозирования и увеличение draft‑n-max. В некоторых квантах максимальное ускорение достигается на n=6, но в третьем кванте он теряет acception rate и снижает скорость, поэтому оптимальным выбран n=4. Также контекст остался прежним, поскольку освободившееся место от сжатия модели занял dflash.
Тестирование в кодинге не показало явной деградации, различие было на уровне стат. погрешности. При этом скорость кодинга возросла до 55–65 тпс, в пике достигая 70, что эффективно ускоряет разработку.
Прямое сравнение моделей
Протестировав эти три модели можно составить таблицу с их соотношением сильных и слабых сторон
|
Модель |
Скорость |
Контекст |
Интеллекст |
|
IQ4_XS |
40 – 50 тпс |
22к |
100% |
|
UD-Q3_K_XL |
45 – 55 тпс |
92к |
97% |
|
GSQ-RCO-IQ3_S |
55 – 65 тпс |
92к |
95% |
Деградация моделей в кодинге почти не заметна, но низкие кванты могут быть слабее в рассуждениях на длительных сложных задачах.
В качестве дополнительного теста я попросил все три модели нарисовать медведя на машине в svg файле. Дополнительно к ним был подмешан импостер gemma4-26b.
Промпт
Создай автономный SVG 16:9 по мотивам референса.
Сцена: яркая мультяшная векторная иллюстрация. Летний пейзаж с голубым небом, облаками, солнцем, горами, зелёными холмами, хвойными деревьями и цветами. По центру дороги стоит красный ретро-кабриолет, вид спереди. За рулём сидит улыбающийся бурый медведь в голубом шарфе.
Слева расположен большой зелёный дорожный знак с надписями: «ОМСК» «80» «СЕВЕР» и белой стрелкой вверх.
На номере автомобиля текст: «КОСОЛАПЫЙ»
Сверху крупный мультяшный заголовок: «Qwen 3.8 27b»
Стиль: flat vector, детская иллюстрация, чистые формы, округлые контуры, насыщенные цвета, лёгкие градиенты и блики. Композиция должна быть визуально близка референсу, но точные размеры, координаты и мелкие детали выбери самостоятельно.
Используй только SVG-примитивы и текст. Не используй raster images, base64, canvas и внешние ресурсы.
Верни только валидный SVG-код от <svg> до </svg> .
Результаты:

Кванты квенов не подписаны, попробуйте угадать кто что нарисовал. Мне кажется лучше всех получился рисунок справа вверху, нарисовал его самый маленький IQ3_S.
P. S. тест не очень надёжный и может выдавать сильно разное качество на нескольких запусках, однако при сильной деградации моделей разница становится ощутимой. В данном случае сильной разницы между квенами нету.
Выводы
Невозможность запускать сильные модели на бюджетных видеокартах мне кажется преувеличенной. Конечно, переход на RTX-3090 даёт определенные преимущества. Можно запустить квант побольше и выделить больше контекста, пропускная способность ллм может перевалить за 100 тпс. Но списывать свою 16 ГБ врам видеокарту со счетов не стоит, она вполне может запускать мощные модели с хорошим контекстом и скоростью работы.
Автор: Mashinow


