Перейти к содержанию
Публикация AiManual

Запуск Vicuna-13B на одном AMD GPU с ROCm: практическое руководство по квантованию и инференсу

Запустите Vicuna-13B на одной AMD Radeon RX 6900 XT: GPTQ-квантование снижает VRAM с 28 ГБ до 7,52 ГБ без потери качества. Пошаговый гайд по ROCm, Docker, FastC

Коротко

Что будет в материале

  1. 01

    Введение: Зачем запускать Vicuna-13B на одном GPU?

  2. 02

    Архитектура и особенности Vicuna-13B

  3. 03

    Проблема памяти: почему fp16 не помещается на потребительских GPU

  4. 04

    Квантование GPTQ: снижение потребления памяти до 7,52 ГБ

Введение: Зачем запускать 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.controller
python -m fastchat.serve.model_worker \
  --model-path TheBloke/vicuna-13B-GPTQ-4bit \
  --device cuda \
  --load-8bit false \
  --gptq-wbits 4 \
  --gptq-groupsize 128
python -m fastchat.serve.gradio_web_server

Откройте http://localhost:7860 в браузере. Интерфейс позволяет вести диалог, настраивать температуру и максимальную длину ответа. Для продакшена замените Gradio на API-сервер FastChat и подключите его к вашему приложению.

Сравнение производительности: fp16 vs 4-битная версия

Квантование даёт выигрыш по памяти, но влияет на скорость и качество. Сравним ключевые метрики:

Параметрfp16GPTQ 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%.

Подписаться на канал