Мощный ИИ агент в 16гб VRAM. ai.. ai. llm.. ai. llm. qwen3.8.. ai. llm. qwen3.8. нейросети.. ai. llm. qwen3.8. нейросети. Программирование.. ai. llm. qwen3.8. нейросети. Программирование. Серверная оптимизация.. ai. llm. qwen3.8. нейросети. Программирование. Серверная оптимизация. Тестирование IT-систем.

Недавно я обновил свою видеокарту до RTX-5060-TI 16GB. Получив новую карту я решил исследовать, что можно на ней запустить из нейросетей. Традиционно пишут, что нормальные ИИ модели начинаются с rtx3090 и выше, что ниже 24GB VRAM жизни нет. В этой статье я постараюсь развеять этот миф.

нарисовано моделью из статьи
нарисовано моделью из статьи

Модели на ограниченном железе всегда имеют компромисс между скоростью, качеством и контекстом. Сформирую требования, пригодные для агентик кодинга:

  1. Контекстное окно > 80к (системный промпт + пара скиллов уже 15к токенов, при низком контексте модель постоянно будет забывать детали и сжимать историю сообщений)

  2. Скорость >= 50 тпс (чем выше скорость, тем быстрее проходят циклы разработчки, тем быстрее новые фичи идут в релиз. До этого пробовал с 30 тпс работать, агент кажется заторможенным)

  3. Интеллект должен быть достаточным для того, чтобы допускать мало ошибок в коде и чтобы его дебагинг больше чинил, чем ломал

Выбор модели

Бесспорным флагманом локальных нейросетей на низкой врам сейчас является 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 развивает этот подход и автоматически подбирает параметры такой модификации, стараясь одновременно снизить число отказов и минимизировать отклонение поведения модели от оригинала.

Мощный ИИ агент в 16гб VRAM - 2

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> .

Результаты:

Мощный ИИ агент в 16гб VRAM - 7

Кванты квенов не подписаны, попробуйте угадать кто что нарисовал. Мне кажется лучше всех получился рисунок справа вверху, нарисовал его самый маленький IQ3_S.

P. S. тест не очень надёжный и может выдавать сильно разное качество на нескольких запусках, однако при сильной деградации моделей разница становится ощутимой. В данном случае сильной разницы между квенами нету.

Выводы

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

Автор: Mashinow

Источник