ROCm을 사용한 AMD GPU에서 Vicuna 13B 실행
TL;DR
Hugging Face는 ROCm(Radeon Open Compute)과 GPTQ 4비트 양자화를 활용하여 Vicuna 13B 오픈소스 챗봇을 단일 AMD GPU에서 실행할 수 있음을 입증했습니다. 이 방법은 GPU 메모리 요구량을 약 28GB(fp16 기준)에서 7.52GB로 줄여, Radeon RX6900XT와 같은 소비자용 하드웨어에서도 모델을 실행할 수 있게 합니다.
Vicuna 13B 모델
Vicuna는 UC Berkeley, CMU, Stanford, UC San Diego가 협력하여 개발한 130억 파라미터를 가진 오픈소스 챗봇입니다. ShareGPT.com에서 제공된 약 70,000개의 사용자 대화를 사용해 LLaMA 기본 모델을 미세 조정하여 만들었습니다. GPT-4를 기준으로 한 초기 평가에 따르면 Vicuna-13B는 OpenAI의 ChatGPT 품질의 90% 이상을 달성했으며, 총 학습 비용은 약 $300 정도였습니다.
GPTQ 양자화를 통한 메모리 최적화
Vicuna-13B를 fp16 정밀도로 실행하려면 약 28GB의 GPU RAM이 필요하며, 이는 많은 단일 GPU의 용량을 초과합니다. 이를 해결하기 위해 Hugging Face는 GPTQ(정확한 사후 훈련 양자화)를 활용합니다. GPTQ는 10B 이상의 파라미터를 가진 모델이 3비트 또는 4비트 정밀도를 사용하면서도 fp16과 비슷한 정확도를 유지하도록 합니다.
양자화는 메모리 사용량뿐만 아니라 지연 시간에도 중요합니다. LLM에서 토큰 생성은 일반적으로 순수 연산(TFLOPs)보다 메모리 대역폭에 의해 제한되기 때문에, GPU가 메모리 바운드 상태일 때도 양자화된 모델은 토큰 생성 지연 시간이 크게 증가하지 않습니다.
AMD 하드웨어에서의 기술 구현
시스템 요구 사항
AMD 하드웨어에 Vicuna 13B를 배포하려면 다음 환경이 필요합니다:
- Hardware: ROCm을 지원하는 AMD GPU(Instinct MI210 및 Radeon RX6900XT에서 테스트됨).
- OS: Linux 기반, 가능하면 Ubuntu 18.04, 20.04 또는 22.04.
- Software: ROCm 5.4.3, PyTorch 2.0, Python 3.6+.
- Environment: Conda 또는 Docker.
배포 워크플로우
- ROCm Installation:
amdgpu-install패키지를 설치하고 시스템을hiplibsdk,rocm,dkms에 맞게 구성합니다. - Containerization: ROCm 호환 PyTorch Docker 이미지(예:
rocm/pytorch:rocm5.4.2_ubuntu20.04_py3.8_pytorch_2.0.0_preview)를 사용합니다. - Model Acquisition: Hugging Face에서 4비트 양자화된 Vicuna-13b 가중치를 다운로드하거나 GPTQ-for-LLaMa 저장소를 사용해 부동소수점 모델을 양자화합니다.
- Inference:
llama_inference.py스크립트를--wbits 4및--groupsize 128플래그와 함께 사용하여 텍스트를 생성합니다. - API Integration: FastChat을 사용해 웹 API 서버로 모델을 노출할 수 있으며, 여기에는 컨트롤러, 모델 워커, Gradio 웹 서버가 필요합니다.
성능 및 정확도 지표
메모리 사용량
양자화는 VRAM 사용량을 크게 줄입니다. 13B 모델의 경우 메모리 요구량이 fp16 기준 28GB 이상에서 4비트 양자화 시 7.52GB로 감소하여 Radeon RX6900XT의 16GB DDR 중 46%만 차지합니다.
정확도 (Perplexity)
정확도는 C4 데이터셋의 2,048개 예제에 대해 Perplexity(PPL)를 사용해 측정했습니다. 결과는 4비트 양자화 모델(fp32 또는 fp16 매트멀을 사용)도 fp16 기준에 비해 높은 정확도를 유지함을 보여줍니다.
지연 시간
다양한 구성에서 토큰 생성 지연 시간을 측정했습니다. 데이터는 4비트 양자화 버전이 fp16 기준에 비해 큰 지연 시간 페널티를 초래하지 않음을 보여줍니다.
부록: 수동 모델 양자화
자신만의 양자화 모델을 만들고자 하는 사용자를 위해 과정은 다음과 같습니다:
- Applying Delta Weights: Vicuna가 델타 가중치 형태로 제공되므로,
fastchat.model.apply_delta명령을 사용해 원본 LLaMA 기본 모델에 적용해야 합니다. - Quantization Process:
GPTQ-for-LLaMa저장소를 사용해 C4 데이터셋으로 보정하여 모델을 4비트 정밀도로 양자화하고, 결과를.safetensors파일로 저장합니다.