- Quantization์ ๋ชจ๋ธ ๊ฐ์ค์น์ ์์น ์ ๋ฐ๋๋ฅผ ๋ฎ์ถฐ(FP32 โ INT8/INT4) ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ฐ์ฐ๋์ ์ค์ด๋ ๋ชจ๋ธ ์์ถ ๊ธฐ๋ฒ
- ์ ํ๋ ์์ค์ ์ต์ํํ๋ฉด์ ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ต๋ 8๋ฐฐ ์ถ์ํ๋ ๊ฒฝ๋ํ ์ ๋ต
- ๋์ผ GPU์์ ๋ ํฐ ๋ชจ๋ธ ์คํ ๋๋ ๋ ๋ง์ ๋์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋ก๋์ ์ต์ ํ ๋ฐฉ์
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- LLM์ ์์ญ~์๋ฐฑ์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ ํ๋ผ๋ฏธํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง
- FP32 ๊ธฐ์ค 70B ๋ชจ๋ธ โ ์ฝ 280GB ๋ฉ๋ชจ๋ฆฌ ํ์ โ ๊ณ ๊ฐ์ GPU ์ฌ๋ฌ ์ฅ ํ์
- Quantization์ผ๋ก INT4 ๋ณํ ์ ์ฝ 35GB โ ๋จ์ผ GPU์์๋ ์คํ ๊ฐ๋ฅ
AS-IS
sequenceDiagram autonumber participant Model as LLaMA-13B (FP32) participant GPU as GPU Memory Model->>GPU: ๊ฐ์ค์น ๋ก๋ (52GB) Note over GPU: 80GB GPU ์ค 52GB ์ฌ์ฉ<br/>KV Cache์ฉ ๋จ์ ๊ณต๊ฐ: 28GB Note over GPU: ๋์ ์ฒ๋ฆฌ ๊ฐ๋ฅ: ~7๋ช <br/>(4K ์ปจํ ์คํธ ๊ธฐ์ค)
TO-BE
sequenceDiagram autonumber participant Model as LLaMA-13B (INT8) participant GPU as GPU Memory Model->>GPU: ๊ฐ์ค์น ๋ก๋ (13GB) Note over GPU: 80GB GPU ์ค 13GB ์ฌ์ฉ<br/>KV Cache์ฉ ๋จ์ ๊ณต๊ฐ: 67GB Note over GPU: ๋์ ์ฒ๋ฆฌ ๊ฐ๋ฅ: ~47๋ช <br/>(4K ์ปจํ ์คํธ ๊ธฐ์ค)
์ ๋ฐ๋ ๋จ๊ณ๋ณ ๋น๊ต
| ํฌ๋งท | ๋นํธ ์ | ๋ชจ๋ธ ํฌ๊ธฐ (70B ๊ธฐ์ค) | ์ ํ๋ ์์ค | ์ ํฉํ ์ฉ๋ |
|---|---|---|---|---|
| FP32 | 32bit | ~280GB | ๊ธฐ์ค | ํ์ต(Training) |
| FP16/BF16 | 16bit | ~140GB | ๋ฌด์ ๊ฐ๋ฅ | ์ถ๋ก ๊ธฐ๋ณธ๊ฐ |
| INT8 | 8bit | ~70GB | ~0.04% | ํ๋ก๋์ ๊ถ์ฅ |
| INT4 | 4bit | ~35GB | ~1.9% | ๋ฆฌ์์ค ์ ์ฝ ํ๊ฒฝ |
์ด๋ป๊ฒ ์๋ํ๋๊ฐ?
ํต์ฌ ์์ด๋์ด: ์ฐ์์ ์ธ ์ค์(float) ๊ฐ์ ์ด์ฐ์ ์ธ ์ ์(integer) ๊ฐ์ผ๋ก ๋งคํ
FP32 ๊ฐ์ค์น: [0.0312, -0.1875, 0.5625, -0.8750, ...]
โ Quantization (INT8)
INT8 ๊ฐ์ค์น: [8, -48, 144, -224, ...]
+ Scale Factor: 0.00390625
+ Zero Point: 0
๋ณต์ ์: INT8 ๊ฐ ร Scale Factor โ ์๋ FP32 ๊ฐ
์ฃผ์ Quantization ๊ธฐ๋ฒ
| ๊ธฐ๋ฒ | ๋ฐฉ์ | ํน์ง |
|---|---|---|
| PTQ (Post-Training Quantization) | ํ์ต ์๋ฃ ํ ๋ณํ | ์ฌํ์ต ๋ถํ์, ๋น ๋ฅธ ์ ์ฉ |
| GPTQ | ๋ ์ด์ด๋ณ ์ค์ฐจ ์ต์ํ | INT4 + FP16 ํผํฉ, ์ ํ๋ ์ ์ง ์ฐ์ |
| AWQ (Activation-aware) | ์ค์ ๊ฐ์ค์น ๋ณด์กด | ํ์ฑํ ํจํด ๊ธฐ๋ฐ์ผ๋ก ํต์ฌ ์ฑ๋ ๋ณดํธ |
| QAT (Quantization-Aware Training) | ํ์ต ์ค ์์ํ ์๋ฎฌ๋ ์ด์ | ์ต๊ณ ์ ํ๋, ์ฌํ์ต ๋น์ฉ ๋ฐ์ |
์ค์ํ ๋น์ - ์์ ๋ ธํธ ํ๊ธฐ
| ์์ํ ์์ค | ์ค์ํ ๋น์ | ์ค๋ช ์์ | ์ ๋ณด ๋ณด์กด | ์ฉ๋ | |
|---|---|---|---|---|---|
| FP32 | ๊ฐ์ ์ ์ฒด ๋ น์ | โํ๋์ด๋ ์ฌ์ฉ์๊ฐ ๋ฌผ๋ฆฌ์ ์ด๋ ์ ์ ์ ์ผ๋ก ๋ํ๋ด๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐโฆโ | 100% | 500MB+ | |
| INT8 | ์์ธ ์ ๋ฆฌ ๋ ธํธ | โํ๋: ๋ฌผ๋ฆฌ์ /์ ์ ์ ์์ง์๊ณผ ๋ฐ์, ํผ๋๋ฐฑ ํฌํจโ | ~90% | 150MB | |
| INT4 | ํค์๋ ๋ฉ๋ชจ | โํ๋: ์์ง์, ๋ฐ์, ํผ๋๋ฐฑโ | ~80% | 50MB |
โ ํต์ฌ: ์ธ๊ฐ์ ๋๋ ์ธ๋ถ์ฌํญ ์ผ๋ถ ์๋ตํ๋ฉด์ ํต์ฌ ๊ฐ๋ ๋ง ์ถ์ถํด ํ์ตํ๋ฏ, Quantization ๋ ์ ๋ณด ์์ค์ ์ต์ํํ๋ฉด์ ํจ์จ์ฑ์ ๊ทน๋ํํฉ๋๋ค.
QK ํ์ผ๋ช ํฌ๋งท ํด๋
llama.cpp ์์ ์ฌ์ฉํ๋ ์์ํ ํ์ผ๋ช ์ผ๋ก, ์์ํ ์์ค๊ณผ ๊ธฐ๋ฒ์ ๋ํ๋ ๋๋ค:
| ํ์ผ๋ช | ์๋ฏธ | ์ค๋ช |
|---|---|---|
| Q4_K_M | 4-bit K-Medium | ๊ท ํํ ์์ํ (์ ํ๋/์์ถ๋ฅ ์ต์ ๋ฐธ๋ฐ์ค) |
| Q4_K_S | 4-bit K-Small | ๋ ์์ ํ์ผ, ์ฝ๊ฐ ๋ฎ์ ์ ํ๋ |
| Q5_K_M | 5-bit K-Medium | 4-bit ๋ณด๋ค ์ ํ๋ โ, ํ์ผ ํฌ๊ธฐ โ |
| Q5_K_S | 5-bit K-Small | 5-bit ์ค ์ปดํฉํธ ๋ฒ์ |
| Q8_0 | 8-bit ์ ํํ ์์ํ | ๊ฑฐ์ FP16 ์์ค ์ ํ๋, ํฐ ํ์ผ |
Medium / Small / Large ์๋ฏธ
llama.cpp ์ โK-quantizationโ ์๋ฆฌ์ฆ์์ ์ ๋ฏธ์ฌ๋ ์์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ตํจ๊ณผ ์ฉ๋์ ๋ํ๋ ๋๋ค:
| ์ ๋ฏธ์ฌ | ์๋ฏธ | ํน์ง | ์ค์ํ ๋น์ | ||---::--------||โ:โ:-------------------||----:-:------|-||---------|| | S (Small) | ์์ ๋ฒ์ | ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ, ์ฝ๊ฐ์ ์ ํ๋ ํํ | โํต์ฌ ํค์๋๋งโ ๋ ธํธ | | M (Medium) | ์ค๊ฐ ๋ฒ์ | ์ ํ๋์ ํฌ๊ธฐ์ ์ต์ ๊ท ํ | โ์ ์ ํ ์์ฝโ ๋ ธํธ โญ | | L (Large) | ํฐ ๋ฒ์ | ๋ ๋์ ์ ํ๋, ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | โ์ธ๋ถ์ฌํญ ํฌํจโ ์์ธ ๋ ธํธ |
์ถ์ฒ ํ์ผ ํฌ๊ธฐ ์์ (7B ๋ชจ๋ธ ๊ธฐ์ค)
| ํ์ผ๋ช | ํฌ๊ธฐ | ํน์ง | ||โ::::---|-:---:| | Q3_K_S | ~2.5GB | ๊ฐ์ฅ ์์ ํ์ผ (์ต์ ์ฉ๋) | | Q4_K_M | ~3.5GB | ์ต์ ๊ท ํ (์ถ์ฒ) โญ | | Q5_K_L | ~4.0GB | ๋์ ์ ํ๋ | | Q8_0 | ~7.0GB | ๊ฑฐ์ ์๋ณธ ํ์ง |
์์: llama-2-7b.Q4_K_M.gguf
- LLaMA-2 7B ๋ชจ๋ธ์ 4-bit K-Medium ์์ํ ๋ฒ์
- ์๋ณธ (FP16) 14GB โ 3.5GB ๋ก ์ถ์, ์ ํ๋ ์์ค ์ต์ํ
์ถ์ฒ ์ ํ ๊ฐ์ด๋
| ์ฉ๋ | ์ถ์ฒ ํ์ผ |
|---|---|
| ์ต๊ณ ํ์ง ํ์ | Q8_0 ๋๋ Q5_K_M |
| ๊ท ํ (์ถ์ฒ) | Q4_K_M |
| ์ ์ฌ์ ์ฅ์น | Q4_K_S ๋๋ Q3_K_M |