Введение: Зачем запускать Vicuna-13B на одном GPU?
Vicuna-13B - это open-source чат-бот, дообученный на основе LLaMA с использованием 70 000 диалогов из ShareGPT. Модель хорошо следует инструкциям и поддерживает естественный диалог, но её запуск в родном формате fp16 требует около 28 ГБ VRAM. Для владельцев потребительских видеокарт AMD, таких как Radeon RX 6900 XT с 16 ГБ памяти, это критическое ограничение.
Решение - пост-тренировочное квантование GPTQ. Оно сжимает веса до 4 бит и снижает потребление VRAM до 7,52 ГБ, то есть до 46% от объёма памяти RX 6900 XT. Точность на датасете C4 остаётся сопоставимой с fp16. В этом руководстве разберём пошаговый запуск: установка ROCm, настройка Docker-контейнера с PyTorch, загрузка квантованных весов с Hugging Face и развёртывание веб-интерфейса на Gradio через FastChat.
Материал ориентирован на разработчиков и ML-инженеров, которые хотят запустить диалоговую модель локально на AMD GPU без покупки серверного ускорителя. Все команды проверяемы, а метрики производительности сравниваются в явном виде.
Архитектура и особенности Vicuna-13B
Vicuna-13B наследует архитектуру LLaMA-13B: трансформер с 13 миллиардами параметров, нормализацией RMSNorm, активацией SwiGLU и поворотными позиционными эмбеддингами RoPE. Отличие не в архитектуре, а в обучающей выборке и задаче.
От LLaMA к Vicuna: процесс fine-tuning
Базовая LLaMA обучена на большом корпусе текстов, но не оптимизирована под инструкции. Vicuna-13B прошла supervised fine-tuning на 70 000 диалогах из ShareGPT - сервиса, где пользователи делятся беседами с ChatGPT. Такой подход смещает поведение модели в сторону диалога: она удерживает контекст, отвечает на уточняющие вопросы и следует формату «запрос - ответ».
Результат - модель, которая по качеству ответов приближается к проприетарным чат-ботам, но остаётся полностью открытой и доступной для локального запуска. Веса опубликованы на Hugging Face, что упрощает загрузку и эксперименты.
Проблема памяти: почему fp16 не помещается на потребительских GPU
13 миллиардов параметров в формате fp16 занимают 26 ГБ только под веса. Добавьте overhead на активации, кэш ключей и значений, буферы оптимизатора - и фактическое потребление вырастает до 28 ГБ VRAM. Для сравнения: у RX 6900 XT всего 16 ГБ, у RTX 4070 Ti - 12 ГБ, у RTX 3080 - 10 ГБ.
Даже если бы модель поместилась, остался бы нулевой запас под длинный контекст и батчинг. Поэтому запуск fp16-версии Vicuna-13B на одиночном потребительском GPU невозможен без оффлоадинга на CPU, который резко снижает скорость генерации. Квантование решает эту проблему на уровне представления весов.
Квантование GPTQ: снижение потребления памяти до 7,52 ГБ
GPTQ - метод пост-тренировочного квантования, который переводит веса модели из 16-битного представления в 4-битное. Для Vicuna-13B это даёт сжатие примерно в 3,7 раза: с 28 ГБ до 7,52 ГБ. На RX 6900 XT модель помещается целиком, остаётся запас под контекст и служебные структуры.
Как работает GPTQ: краткий технический обзор
GPTQ выполняет послойное квантование. Для каждого слоя он подбирает 4-битные представления весов так, чтобы минимизировать ошибку выходных активаций, а не просто округлять значения. Алгоритм учитывает важность весов через аппроксимацию гессиана и компенсирует накопленную ошибку на следующих слоях. Это позволяет сохранить качество, близкое к fp16, даже при агрессивном снижении точности.
На практике это означает: модель занимает 7,52 ГБ VRAM, а perplexity на C4-датасете остаётся сопоставимой с fp16-версией. Для диалоговых задач разница в ответах минимальна и часто незаметна без прямого сравнения.
Пошаговое руководство: установка ROCm и настройка окружения
Для запуска на AMD GPU потребуется стек ROCm. Проверьте совместимость вашей видеокарты с официальной таблицей поддержки AMD. RX 6900 XT на архитектуре RDNA 2 поддерживается ROCm начиная с версии 5.x.
Установка ROCm на AMD GPU
На Ubuntu 22.04 установка выполняется через официальный репозиторий AMD:
sudo apt update
sudo apt install wget
wget https://repo.radeon.com/amdgpu-install/latest/ubuntu/jammy/amdgpu-install_6.1.60101-1_all.deb
sudo apt install ./amdgpu-install_6.1.60101-1_all.deb
sudo amdgpu-install --usecase=rocmПосле завершения добавьте пользователя в группу render и video, затем перезагрузите систему:
sudo usermod -a -G render,video $USER
sudo rebootПроверьте, что ROCm видит GPU:
rocm-smiВывод покажет модель ускорителя, температуру и занятую память.
Настройка Docker-контейнера с PyTorch
Docker изолирует окружение и исключает конфликты версий. Используйте официальный образ ROCm/PyTorch:
docker run -it --rm \
--device=/dev/kfd \
--device=/dev/dri \
--group-add video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
-v $(pwd):/workspace \
rocm/pytorch:latest \
bashВнутри контейнера установите зависимости для работы с GPTQ и трансформерами:
pip install transformers accelerate auto-gptq gradio fschatПроверьте доступность GPU через PyTorch:
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.device_count())"Ожидаемый вывод: True 1.
Загрузка квантованных весов и запуск модели
Квантованные веса Vicuna-13B в формате GPTQ доступны на Hugging Face. Для загрузки используйте AutoGPTQ, который поддерживает ROCm через оптимизированные ядра.
Использование оптимизированных ядер для инференса
AutoGPTQ по умолчанию собирает CUDA-ядра. Для ROCm потребуется сборка из исходников с флагом ROCM_VERSION или использование готовых сборок из репозитория проекта. Проверьте, что установленная версия auto-gptq скомпилирована под ROCm, иначе инференс упадёт с ошибкой о несовместимости устройств.
Пример загрузки и запуска модели:
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
model_name = "TheBloke/vicuna-13B-GPTQ-4bit"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoGPTQForCausalLM.from_quantized(
model_name,
device="cuda:0",
use_triton=False,
use_safetensors=True
)
prompt = "Объясни, что такое квантование модели"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
outputs = model.generate(**inputs, max_new_tokens=128)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))Первый запуск загрузит веса в VRAM. Убедитесь, что rocm-smi показывает занятые 7,5–8 ГБ.
Развертывание веб-интерфейса с FastChat и Gradio
FastChat - фреймворк для сервинга диалоговых моделей. Он поддерживает Vicuna и умеет подключать квантованные версии через AutoGPTQ. Веб-интерфейс строится на Gradio.
Настройка FastChat для Vicuna-13B
Запустите контроллер, воркер и веб-сервер тремя процессами:
python -m fastchat.serve.controllerpython -m fastchat.serve.model_worker \
--model-path TheBloke/vicuna-13B-GPTQ-4bit \
--device cuda \
--load-8bit false \
--gptq-wbits 4 \
--gptq-groupsize 128python -m fastchat.serve.gradio_web_serverОткройте http://localhost:7860 в браузере. Интерфейс позволяет вести диалог, настраивать температуру и максимальную длину ответа. Для продакшена замените Gradio на API-сервер FastChat и подключите его к вашему приложению.
Сравнение производительности: fp16 vs 4-битная версия
Квантование даёт выигрыш по памяти, но влияет на скорость и качество. Сравним ключевые метрики:
| Параметр | fp16 | GPTQ 4-bit |
|---|---|---|
| Размер весов | 26 ГБ | 7,2 ГБ |
| Потребление VRAM | ~28 ГБ | 7,52 ГБ |
| Perplexity на C4 | базовый уровень | сопоставимо с fp16 |
| Latency на RX 6900 XT | не запускается | зависит от длины контекста |
Главный вывод: fp16-версия на RX 6900 XT не запускается в принципе. 4-битная версия работает с запасом памяти под контекст и батчинг. Потеря качества на диалоговых задачах минимальна, а для прототипирования и локального тестирования - незаметна. Если вам нужен ориентир по скорости на других AMD GPU, посмотрите разбор запуска Qwen 3.6 35B на Radeon RX 7600, где достигнуты 18–21 токен/с через llama.cpp и ROCm.
Ограничения и возможные проблемы
ROCm поддерживает не все видеокарты AMD. Перед установкой сверьтесь с официальным списком совместимости: RDNA 2 и RDNA 3 поддерживаются, но для некоторых мобильных и интегрированных GPU нужна отдельная сборка. Владельцам Radeon 780M стоит учесть, что в llama.cpp цель gfx1103 не включена в прекомпилированные бинарники, и сборка из исходников обязательна.
Квантование GPTQ сильнее влияет на задачи, требующие точного воспроизведения фактов или длинных цепочек рассуждений. Для генерации кода и суммаризации деградация обычно ниже, чем для сложной арифметики. Производительность также зависит от версии ROCm и сборки AutoGPTQ: обновление стека может как ускорить инференс, так и сломать совместимость ядер.
Отдельный нюанс - работа с терминалом. На некоторых конфигурациях активное окно терминала снижает скорость генерации из-за особенностей вывода. Свёрнутое окно возвращает производительность к норме. Этот эффект описан в практическом разборе запуска Qwen на RX 7600 и воспроизводится на других AMD GPU.
Заключение: стоит ли квантовать Vicuna-13B?
GPTQ-квантование превращает Vicuna-13B из модели, недоступной для потребительских GPU, в рабочее решение для локального инференса. На RX 6900 XT потребление падает с 28 ГБ до 7,52 ГБ, а качество на C4 остаётся сопоставимым с fp16. Это открывает возможность запускать диалоговую модель уровня 13B без покупки серверного ускорителя.
Для быстрого прототипа, тестирования промптов или локального чат-бота 4-битная версия - практичный выбор. Если задача требует максимальной точности на сложных рассуждениях, рассмотрите fp16 на GPU с 32 ГБ VRAM или оффлоадинг. Дальнейшие оптимизации скорости на AMD GPU разбираются в материале про ускорение prompt processing в llama.cpp под ROCm, где прирост достигает 15%.