Введение: зачем запускать 35B-модель на бюджетной видеокарте
Локальный инференс больших языковых моделей перестал быть привилегией владельцев флагманских GPU. Появление MoE-архитектур, где из 35 миллиардов общих параметров одновременно активны лишь 3 миллиарда, радикально изменило требования к железу. Qwen 3.6 35B A3B относится именно к таким моделям: полный размер впечатляет, но фактическая вычислительная нагрузка сопоставима с плотной моделью на 3B параметров.
Практический эксперимент на Radeon RX 7600 с 8 ГБ VRAM подтверждает: квантованная версия Q8_0 работает со скоростью 18-21 токен/с. Это комфортный темп для чтения и большинства рабочих сценариев. Достигается результат комбинацией настроек llama.cpp под ROCm 7: перенос всех слоёв на GPU, выборочный оффлоад MoE-экспертов на CPU, отключение mmap и квантование K/V-кэша. Разберём каждый шаг.
Для сравнения: на APU Ryzen 7 6800H с iGPU Radeon 680M та же модель в квантовании Q8_0 выдаёт около 5 токен/с. Подробные бенчмарки этой конфигурации описаны в разборе запуска Gemma 4 и Qwen 3.6 MoE на APU AMD 6800H. RX 7600 с дискретной памятью даёт четырёхкратный прирост, что делает её разумным бюджетным вариантом для локального инференса MoE-моделей.
Необходимое окружение: установка ROCm 7 и llama.cpp
Radeon RX 7600 на архитектуре RDNA 3 официально поддерживается стеком ROCm. На момент тестирования использовалась версия ROCm 7, которая принесла заметные улучшения в обработке промптов на AMD GPU. Детали этих оптимизаций разобраны в материале об ускорении prompt processing в llama.cpp под ROCm.
Проверка работоспособности ROCm
Перед сборкой llama.cpp убедитесь, что GPU корректно определяется системой. Выполните две команды:
rocminfo | grep -E "Name|gfx"
clinfo | grep -E "Device Name|Device Version"В выводе должна фигурировать Radeon RX 7600 с архитектурой gfx1102. Если GPU не отображается, проверьте установку драйвера amdgpu и наличие пользователя в группах video и render. После проверки запустите llama.cpp с любой маленькой моделью, например llama-2-7B, чтобы подтвердить работоспособность HIP-бэкенда.
Сборка llama.cpp выполняется стандартно:
cmake -B build -DGGML_HIP=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
cmake --build build --config Release -j$(nproc)Квантованную модель Qwen 3.6 35B A3B-Q8_0 можно взять из Hugging Face. Файл GGUF занимает около 37 ГБ, поэтому заранее подготовьте достаточно дискового пространства.
Ключевые параметры запуска для максимальной скорости
Итоговая команда запуска выглядит так:
./build/bin/llama-cli \
-m /path/to/qwen3.6-35b-a3b-q8_0.gguf \
--n-gpu-layers 999 \
--n-cpu-moe 36 \
--no-mmap \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
-t 12 \
-p "Ваш промпт"Каждый флаг решает конкретную задачу. Разберём их по отдельности.
Перенос всех слоёв на GPU: --n-gpu-layers 999
Значение 999 заставляет llama.cpp разместить на GPU все доступные слои модели. Для плотных моделей на 35B параметров это потребовало бы более 20 ГБ VRAM, но MoE-архитектура Qwen 3.6 A3B меняет расчёт. В VRAM хранятся все веса, однако активируется лишь малая их часть. Квантование Q8_0 дополнительно сжимает модель примерно вдвое относительно FP16.
На RX 7600 с 8 ГБ VRAM полный перенос слоёв возможен именно благодаря сочетанию MoE и агрессивного квантования. Если оставить часть слоёв на CPU, скорость упадёт кратно из-за медленной передачи данных через PCIe.
Распределение экспертов MoE на CPU: --n-cpu-moe 36
В MoE-моделях каждый токен обрабатывается не всеми экспертами, а лишь небольшой подгруппой. Qwen 3.6 35B A3B активирует 3B из 35B параметров. Это открывает возможность держать часть экспертов в системной RAM без катастрофической потери скорости: CPU обрабатывает их параллельно с GPU, а не последовательно.
Параметр --n-cpu-moe 36 переносит 36 экспертов на CPU. Число подобрано эмпирически: оно снижает потребление VRAM до уровня, при котором все слои помещаются на GPU, но не создаёт узкого места на стороне процессора. При большем количестве оффлоаденных экспертов скорость генерации падает, при меньшем модель может не поместиться в 8 ГБ.
Отключение mmap и квантование K/V-кэша
Флаг --no-mmap отключает memory-mapped загрузку модели. По умолчанию llama.cpp использует mmap для отложенной загрузки весов, что экономит RAM при старте, но замедляет первый проход. Для модели на 37 ГБ полная загрузка в память даёт более стабильную скорость инференса.
Квантование K/V-кэша до q8_0 через --cache-type-k q8_0 --cache-type-v q8_0 снижает объём памяти, занимаемый контекстом. При длинных диалогах это напрямую влияет на то, сколько токенов помещается в VRAM до начала деградации скорости. Для RX 7600 с её 8 ГБ каждый сэкономленный гигабайт имеет значение.
Неожиданный эффект: скорость зависит от активности окна терминала
В ходе тестирования зафиксирована аномалия: при активном окне терминала скорость падает до 13 токен/с, при свёрнутом возрастает до 21 токен/с. Разница в 60% воспроизводится стабильно.
Причина в отображении вывода. Терминал обновляет экран на каждый токен, а рендеринг текста в окне создаёт нагрузку на CPU и частично на GPU. Когда окно свёрнуто, система пропускает перерисовку, и ресурсы полностью достаются инференсу. Это известная особенность консольных приложений, но в контексте llama.cpp она проявляется особенно ярко из-за высокой частоты обновления вывода.
Практический совет: запускайте llama-cli со свёрнутым окном или перенаправляйте вывод в файл:
./build/bin/llama-cli ... > /tmp/inference.log 2>&1Такой подход исключает влияние терминала на замеры и даёт воспроизводимые результаты.
Сравнение с другими конфигурациями и выводы
18-21 токен/с на RX 7600 для модели с 35B общих параметров - сильный результат. Для контекста: RTX 3060 с 12 ГБ VRAM в аналогичных MoE-сценариях показывает сопоставимые цифры, а RX 6700 XT обгоняет RX 7600 на 15-20% за счёт большей пропускной способности памяти. При этом RX 7600 стоит заметно дешевле обеих карт.
Ограничения тоже есть. Квантование Q8_0 снижает качество ответов по сравнению с FP16, хотя для практических задач разница часто незаметна. ROCm на RDNA 3 стабилен, но отдельные версии ядра Linux могут вызывать проблемы с энергопотреблением и частотами. Перед обновлением системы проверяйте совместимость.
Гибридный оффлоад MoE-экспертов на CPU - техника, применимая к любой модели с архитектурой Mixture of Experts. В сравнении TensorSharp и llama.cpp показано, как SSD-кэш позволяет запускать 35B MoE даже на 24 ГБ VRAM. Для 8 ГБ карт оффлоад экспертов остаётся основным инструментом.
Если вас интересует запуск MoE-моделей на ещё более бюджетном железе, обратите внимание на разбор оптимизации llama.cpp для Qwen 3.6 27B на RTX 5090. Там же разобраны параметры батчей и спекулятивного декодирования, которые применимы и к AMD-конфигурациям.
Заключение: практические рекомендации
Рецепт для повторения эксперимента на Radeon RX 7600:
- Установите ROCm 7 и драйверы amdgpu, проверьте GPU через
rocminfo. - Соберите llama.cpp с флагом
GGML_HIP=ON. - Скачайте Qwen 3.6 35B A3B-Q8_0 в формате GGUF.
- Запустите с флагами
--n-gpu-layers 999 --n-cpu-moe 36 --no-mmap --cache-type-k q8_0 --cache-type-v q8_0. - Сверните окно терминала или перенаправьте вывод в файл.
Бюджетные AMD GPU способны на многое при правильной настройке. MoE-архитектуры в сочетании с квантованием и выборочным оффлоадом делают локальный инференс 35B-моделей доступным на картах за 250-300 долларов. Экспериментируйте с параметрами под свою конфигурацию: число CPU-экспертов и тип квантования кэша - две переменные, которые сильнее всего влияют на баланс скорости и потребления памяти.