실전 가이드 · 10분 분량

# 카드 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비트로 들고 있습니다. 그 결과 메모리에 담고 있어야 하는 것이 완전히 달라집니다.

고정된 가중치 파라미터당 4비트 70B 모델에서 35 GB. 매 스텝 읽기만 하고 갱신되지 않으므로 그래디언트가 필요 없습니다.

어댑터 파라미터의 약 1–2% BF16으로 1~2 GB. 변하는 가중치는 이것뿐이고, 마지막에 남기는 것도 이것뿐입니다.

옵티마이저 상태 어댑터에만 적용되는 Adam 학습되는 파라미터당 모멘트 2개. 전체 파인튜닝을 지배하고 여기서는 거의 사라지는 항입니다.

활성화 값 변동하는 항목 배치 크기와 시퀀스 길이에 비례합니다. 그래디언트 체크포인팅은 연산량을 약 30% 더 쓰는 대신 이 값을 크게 줄여 줍니다 — 실행이 들어가지 않을 때 흔히 쓰는 지렛대입니다.

## 전체 파인튜닝이 들어가지 않는 이유

BF16 전체 파인튜닝은 파라미터당 약 16바이트가 필요합니다: 가중치에 2바이트, 그래디언트에 2바이트, FP32로 저장하는 Adam의 두 모멘트에 8바이트, 그리고 마스터 복사본이 더해집니다. 고정 배수이고, 가혹합니다.

**학습 메모리, QLoRA와 전체 파인튜닝 비교**

| 모델 | QLoRA | 전체 파인튜닝 | 비율 | 의미 |
|---|---|---|---|---|
| Llama 3.1 8B 8B 파라미터 | 13 GB | 141 GB | 11× | 24 GB 카드 1장 전체: GPU 8장 노드 |
| Gemma 3 27B 27B 파라미터 | 27 GB | 475 GB | 17× | 48 GB 카드 1장 전체: GPU 8장 노드 |
| Qwen 3 32B 32B 파라미터 | 31 GB | 563 GB | 18× | 48 GB 카드 1장 전체: GPU 8장 노드 |
| Llama 3.3 70B 70B 파라미터 | 61 GB | 1,232 GB | 20× | 80 GB 카드 1장 전체: 노드 2개 이상 |

활성화 값을 소폭 감안한 자릿수 수준의 추정치입니다 — 머신을 고르기에는 충분하지만 특정 실행을 약속하기에는 부족합니다. 시퀀스 길이와 배치 크기는 QLoRA 열을 크게 움직이지만, 전체 파인튜닝 열은 거의 움직이지 않습니다. 파라미터당 고정 16바이트가 지배하기 때문입니다.

## 모델별

각 모델을 QLoRA로 학습시킬 수 있는 당사 카탈로그의 최저가 노드와, 그 결과를 서빙하는 데 필요한 머신입니다.

**QLoRA 학습용 최저가 노드와 결과 서빙용 최저가 노드**

| 모델 | 학습 메모리 | 학습용 최저가 노드 | 서빙용 최저가 노드 |
|---|---|---|---|
| Llama 3.1 8B | 13 GB | [NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) 카드당 24 GB · $125/월 | [NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) $125/월 |
| Mistral Small 24B | 25 GB | [NVIDIA RTX A6000](https://gpuserver.io/ko/gpu/rtx-a6000) 카드당 48 GB · $286/월 | [NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) $125/월 |
| Gemma 3 27B | 27 GB | [NVIDIA RTX A6000](https://gpuserver.io/ko/gpu/rtx-a6000) 카드당 48 GB · $286/월 | [NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) $125/월 |
| Qwen 3 32B | 31 GB | [NVIDIA RTX A6000](https://gpuserver.io/ko/gpu/rtx-a6000) 카드당 48 GB · $286/월 | [NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) $125/월 |
| Llama 3.3 70B | 61 GB | [NVIDIA A100 PCIe](https://gpuserver.io/ko/gpu/a100-80gb) 카드당 80 GB · $1,091/월 | [2 × NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) $285/월 |

학습에는 메모리가 필요하고, 서빙에는 메모리*와* 대역폭이 필요합니다. 학습에 맞는 카드는 대용량 메모리의 저렴한 카드이고, 서빙에 맞는 카드는 비싸고 빠른 카드인 경우가 흔합니다 — 여기서는 둘 다 월 단위이므로 두 작업을 서로 다른 머신에서 돌리는 편이 한 대로 타협하는 것보다 저렴할 때가 많습니다.

## 실행하기

Axolotl은 구성 도구의 이미지 중 하나로 미리 설치됩니다. 아래는 빈 머신에서 시작해 단일 카드로 진행하는 전체 실행 과정입니다.

카드 1장에서 QLoRA 실행하기

```
$ 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
```

처음 2분은 손실이 아니라 메모리 확인

```
$ 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.
```

## 중요한 설정

lora_r 16~64 랭크이자 품질과 메모리를 조절하는 주된 다이얼입니다. 16이 무난한 기본값입니다. 형식이나 문체가 아니라 정말로 새로운 지식을 가르치는 경우가 아니라면 64를 넘겨서 얻는 것은 거의 없습니다.

lora_target_linear true 어텐션만이 아니라 모든 선형 레이어를 적응시킵니다. 비용은 거의 들지 않고, 어텐션에만 적용하는 기본값보다 일관되게 좋습니다.

sequence_len 가장 큰 메모리 지렛대 활성화 값이 이 값에 비례합니다. 이 값을 절반으로 줄이면 메모리의 변동 부분도 대략 절반이 됩니다. 모델의 최대치가 아니라 실제 데이터의 길이에 맞추십시오.

gradient_checkpointing true, 거의 항상 약 30% 느려지지만, 70B 학습을 카드 1장에 들어가게 만드는 것이 바로 이것입니다. 메모리에 여유가 있을 때만 끄십시오.

micro_batch_size & 누적 서로 맞바꿔 조정 실효 배치는 둘의 곱입니다. 메모리가 빠듯하면 마이크로 배치는 1로 두고 누적 단계를 올리십시오 — 그래디언트는 같고, 최대 메모리는 줄고, 조금 느려집니다.

optimizer paged_adamw_8bit 안전장치로 CPU 페이징을 쓰는 8비트 옵티마이저 상태입니다. 그대로 두면 4시간째에 실행을 끝장낼 급증을 흡수합니다.

## 한 달 비용

학습에서 월 단위가 서빙에서보다 더 중요한 이유: 파인튜닝 프로젝트는 한 번의 실행이 아닙니다. 데이터 버그로 실패하는 첫 번째 실행, 과적합되는 두 번째, 제대로 되는 세 번째, 그리고 랭크를 달리한 다섯 번이 더 있습니다.

**머신별 파인튜닝 프로젝트 비용**

| 머신 | 카드 메모리 | 월 요금 | 적합 용도 |
|---|---|---|---|
| [NVIDIA L4](https://gpuserver.io/ko/gpu/nvidia-l4) 300 GB/s | 24 GB | $125/월 | QLoRA 8B까지 |
| [NVIDIA RTX 5090](https://gpuserver.io/ko/gpu/rtx-5090) 1,792 GB/s | 32 GB | $335/월 | QLoRA 32B까지 |
| [NVIDIA A100 PCIe](https://gpuserver.io/ko/gpu/a100-40gb) 1,555 GB/s | 40 GB | $392/월 | QLoRA 32B까지 |
| [NVIDIA RTX A6000](https://gpuserver.io/ko/gpu/rtx-a6000) 768 GB/s | 48 GB | $286/월 | QLoRA 32B까지 |
| [NVIDIA A100 PCIe](https://gpuserver.io/ko/gpu/a100-80gb) 1,935 GB/s | 80 GB | $1,091/월 | QLoRA 70B까지 |

이를 한 번의 실행이 아니라 프로젝트 전체에 걸친 시간 단위 요금과 비교해 보십시오: [손익분기점 가이드](https://gpuserver.io/ko/guides/monthly-vs-hourly)가 그 계산을 해 둡니다. 반복 작업을 하는 3주 동안 존재하는 머신이야말로 시간당 과금이 이용 기간보다 비싸지는 경우입니다.

## LoRA가 통하지 않는 지점

분명한 경계가 있는 아주 좋은 기법이며, 무엇을 임대하기 전에 자신이 그 경계의 어느 쪽에 있는지 아는 것이 좋습니다.

**정말로 새로운 도메인을 가르치는 경우.** LoRA는 행동을 맞추는 데는 뛰어나지만 지식을 더하는 데는 약합니다. 고객의 분야를 한 번도 본 적 없는 모델은 저랭크 어댑터로 그 분야를 배우지 못합니다.

**어휘나 토크나이저를 바꾸는 경우.** 새 토큰은 임베딩을 학습해야 하는데, 이는 어댑터가 건드리는 범위 밖입니다.

**수십억 토큰으로 사전 학습을 이어 가는 경우.** 그것은 전체 파인튜닝이며, 위 표의 오른쪽 열에 있는 머신이 필요합니다 — 노드 하나를 넘어서고, 당사가 임대하는 범위도 넘어섭니다.

**벤치마크 점수 마지막 2점을 쥐어짜는 경우.** 그 미세한 차이에서는 여전히 전체 파인튜닝이 앞섭니다. 그 차이로 보수를 받고 계시다면 LoRA는 맞지 않는 도구입니다.

그 밖의 모든 경우에는 — 말투, 형식, 스키마, 베이스 모델이 이미 절반쯤 아는 도메인 — 단일 카드의 QLoRA가 훨씬 작은 머신으로 품질의 대부분에 도달합니다. 그것이 이 거래이고, 사람들이 실제로 파인튜닝하는 모델에서는 좋은 거래입니다.

## 카드를 고르고, 프로젝트 내내 그대로 두십시오.

모든 구성이 월 단위이고, root 권한이 있으며 사용량 과금이 없습니다 — 파인튜닝을 반복하는 데 실제로 필요한 조건입니다.

[카탈로그 둘러보기](https://gpuserver.io/ko/#catalog) [가이드 둘러보기](https://gpuserver.io/ko/guides)

## 다른 가이드

- [결제 · 8분 암호화폐로 서버 결제하기 결제 버튼을 누르고 root를 받기까지 실제로 무슨 일이 일어나는지, 어떤 코인을 고를지, 그리고 첫 결제에서 돈을 잃는 실수 4가지. 가이드 읽기](https://gpuserver.io/ko/guides/pay-in-crypto)
- [사이징 · 9분 모델에 실제로 필요한 VRAM “모델이 들어갈까”라는 질문 뒤에 있는 계산: 가중치, KV 캐시, 그리고 경험칙이 3배나 어긋나는 지점 2곳을 그대로 짚습니다. 가이드 읽기](https://gpuserver.io/ko/guides/vram-sizing)
- [사이징 · 7분 NVLink 또는 PCIe: 작업에 필요한 쪽 카드 사이의 연결이 처리량을 좌우하는 경우, 아무것도 바꾸지 않는 경우, 그리고 잘못된 노드에 돈을 쓰기 전에 어느 쪽인지 판단하는 방법. 가이드 읽기](https://gpuserver.io/ko/guides/nvlink-vs-pcie)

---

출처: https://gpuserver.io/ko/guides/lora-finetune/. 이 파일은 웹사이트와 동일한 데이터에서 생성됩니다. 여기의 수치가 페이지와 다르다면 페이지가 정본이고 이 파일이 오래된 것입니다 — 정식 출처는 https://gpuserver.io/입니다.
