카드 1장으로 70B 모델 파인튜닝.
QLoRA는 랙 하나가 필요하던 학습 작업을 48 GB GPU 1장이면 되는 작업으로 바꿉니다. 무엇이 들어가는지, 한 달에 얼마인지, 그리고 이 기법이 통하지 않는 지점은 어디인지 정리했습니다.
짧은 답
- 70B QLoRA
- 약 61 GB — 시퀀스 길이가 짧으면 48 GB 카드 1장에 들어가고, 80 GB 카드에는 넉넉하게 들어감
- 70B 전체 파인튜닝
- 약 1,232 GB — 당사가 임대하지 않는 멀티 노드 클러스터
- 그 비율
- 메모리는 약 20× 적게 쓰면서, 대부분의 작업에서 품질의 대부분에 도달하는 기법
- 여기서 드는 비용
- $286/월부터, 카드는 실행하는 동안이 아니라 한 달 내내 고객의 것
실제로 들어가는 것
LoRA는 모델을 고정하고 각 가중치 행렬 옆에 작은 저랭크 행렬 한 쌍을 학습시킵니다. QLoRA는 여기서 더 나아가 고정된 가중치를 4비트로 들고 있습니다. 그 결과 메모리에 담고 있어야 하는 것이 완전히 달라집니다.
전체 파인튜닝이 들어가지 않는 이유
BF16 전체 파인튜닝은 파라미터당 약 16바이트가 필요합니다: 가중치에 2바이트, 그래디언트에 2바이트, FP32로 저장하는 Adam의 두 모멘트에 8바이트, 그리고 마스터 복사본이 더해집니다. 고정 배수이고, 가혹합니다.
| 모델 | QLoRA | 전체 파인튜닝 | 비율 | 의미 |
|---|---|---|---|---|
| Llama 3.1 8B | 13 GB | 141 GB | 11× | 24 GB 카드 1장 |
| Gemma 3 27B | 27 GB | 475 GB | 17× | 48 GB 카드 1장 |
| Qwen 3 32B | 31 GB | 563 GB | 18× | 48 GB 카드 1장 |
| Llama 3.3 70B | 61 GB | 1,232 GB | 20× | 80 GB 카드 1장 |
활성화 값을 소폭 감안한 자릿수 수준의 추정치입니다 — 머신을 고르기에는 충분하지만 특정 실행을 약속하기에는 부족합니다. 시퀀스 길이와 배치 크기는 QLoRA 열을 크게 움직이지만, 전체 파인튜닝 열은 거의 움직이지 않습니다. 파라미터당 고정 16바이트가 지배하기 때문입니다.
모델별
각 모델을 QLoRA로 학습시킬 수 있는 당사 카탈로그의 최저가 노드와, 그 결과를 서빙하는 데 필요한 머신입니다.
| 모델 | 학습 메모리 | 학습용 최저가 노드 | 서빙용 최저가 노드 |
|---|---|---|---|
| Llama 3.1 8B | 13 GB | NVIDIA L4 | NVIDIA L4 |
| Mistral Small 24B | 25 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Gemma 3 27B | 27 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Qwen 3 32B | 31 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Llama 3.3 70B | 61 GB | NVIDIA A100 PCIe | 2 × NVIDIA L4 |
학습에는 메모리가 필요하고, 서빙에는 메모리와 대역폭이 필요합니다. 학습에 맞는 카드는 대용량 메모리의 저렴한 카드이고, 서빙에 맞는 카드는 비싸고 빠른 카드인 경우가 흔합니다 — 여기서는 둘 다 월 단위이므로 두 작업을 서로 다른 머신에서 돌리는 편이 한 대로 타협하는 것보다 저렴할 때가 많습니다.
실행하기
Axolotl은 구성 도구의 이미지 중 하나로 미리 설치됩니다. 아래는 빈 머신에서 시작해 단일 카드로 진행하는 전체 실행 과정입니다.
$ mkdir -p /scratch/ft && cd /scratch/ft
$ cat > qlora.yml <<'YAML'
base_model: meta-llama/Llama-3.3-70B-Instruct
load_in_4bit: true
adapter: qlora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_linear: true
sequence_len: 2048
sample_packing: true
gradient_checkpointing: true
micro_batch_size: 1
gradient_accumulation_steps: 16
num_epochs: 2
learning_rate: 0.0001
optimizer: paged_adamw_8bit
bf16: true
datasets:
- path: /scratch/ft/data.jsonl
type: chat_template
output_dir: /scratch/ft/out
YAML
$ docker run --rm --gpus all --ipc=host --shm-size=16g \
-v /scratch/ft:/workspace -v /scratch/models:/root/.cache/huggingface \
-e HF_TOKEN="$HF_TOKEN" \
axolotlai/axolotl:main-latest \
axolotl train /workspace/qlora.yml
$ nvidia-smi dmon -s um
# If memory sits just under the card's total, you are one long batch
# away from an out-of-memory error four hours into the run.
# Lower sequence_len or micro_batch_size now, not then.
중요한 설정
한 달 비용
학습에서 월 단위가 서빙에서보다 더 중요한 이유: 파인튜닝 프로젝트는 한 번의 실행이 아닙니다. 데이터 버그로 실패하는 첫 번째 실행, 과적합되는 두 번째, 제대로 되는 세 번째, 그리고 랭크를 달리한 다섯 번이 더 있습니다.
| 머신 | 카드 메모리 | 월 요금 | 적합 용도 |
|---|---|---|---|
| NVIDIA L4 | 24 GB | $125/월 | QLoRA 8B까지 |
| NVIDIA RTX 5090 | 32 GB | $335/월 | QLoRA 32B까지 |
| NVIDIA A100 PCIe | 40 GB | $392/월 | QLoRA 32B까지 |
| NVIDIA RTX A6000 | 48 GB | $286/월 | QLoRA 32B까지 |
| NVIDIA A100 PCIe | 80 GB | $1,091/월 | QLoRA 70B까지 |
이를 한 번의 실행이 아니라 프로젝트 전체에 걸친 시간 단위 요금과 비교해 보십시오: 손익분기점 가이드가 그 계산을 해 둡니다. 반복 작업을 하는 3주 동안 존재하는 머신이야말로 시간당 과금이 이용 기간보다 비싸지는 경우입니다.
LoRA가 통하지 않는 지점
분명한 경계가 있는 아주 좋은 기법이며, 무엇을 임대하기 전에 자신이 그 경계의 어느 쪽에 있는지 아는 것이 좋습니다.
정말로 새로운 도메인을 가르치는 경우. LoRA는 행동을 맞추는 데는 뛰어나지만 지식을 더하는 데는 약합니다. 고객의 분야를 한 번도 본 적 없는 모델은 저랭크 어댑터로 그 분야를 배우지 못합니다.
어휘나 토크나이저를 바꾸는 경우. 새 토큰은 임베딩을 학습해야 하는데, 이는 어댑터가 건드리는 범위 밖입니다.
수십억 토큰으로 사전 학습을 이어 가는 경우. 그것은 전체 파인튜닝이며, 위 표의 오른쪽 열에 있는 머신이 필요합니다 — 노드 하나를 넘어서고, 당사가 임대하는 범위도 넘어섭니다.
벤치마크 점수 마지막 2점을 쥐어짜는 경우. 그 미세한 차이에서는 여전히 전체 파인튜닝이 앞섭니다. 그 차이로 보수를 받고 계시다면 LoRA는 맞지 않는 도구입니다.
그 밖의 모든 경우에는 — 말투, 형식, 스키마, 베이스 모델이 이미 절반쯤 아는 도메인 — 단일 카드의 QLoRA가 훨씬 작은 머신으로 품질의 대부분에 도달합니다. 그것이 이 거래이고, 사람들이 실제로 파인튜닝하는 모델에서는 좋은 거래입니다.
다른 가이드
- 결제 · 8분
암호화폐로 서버 결제하기
결제 버튼을 누르고 root를 받기까지 실제로 무슨 일이 일어나는지, 어떤 코인을 고를지, 그리고 첫 결제에서 돈을 잃는 실수 4가지.
가이드 읽기 - 사이징 · 9분
모델에 실제로 필요한 VRAM
“모델이 들어갈까”라는 질문 뒤에 있는 계산: 가중치, KV 캐시, 그리고 경험칙이 3배나 어긋나는 지점 2곳을 그대로 짚습니다.
가이드 읽기 - 사이징 · 7분
NVLink 또는 PCIe: 작업에 필요한 쪽
카드 사이의 연결이 처리량을 좌우하는 경우, 아무것도 바꾸지 않는 경우, 그리고 잘못된 노드에 돈을 쓰기 전에 어느 쪽인지 판단하는 방법.
가이드 읽기