LLaMA 3 70B 모델을 그냥 실행하려면 VRAM 140GB 이상이 필요합니다. 최신 RTX 4090도 24GB밖에 없습니다. 일반인은 절대 못 쓰죠. 양자화는 이 거대한 모델을 소비자 GPU에서도 돌아가도록 압축하는 기술입니다.
| 방식 | 비트수 | 파일 크기 | 필요 VRAM | 일반 GPU 가능? |
|---|---|---|---|---|
| 원본 (FP32) | 32bit | ~280GB | 280GB+ | ❌ 절대 불가 |
| FP16 / BF16 | 16bit | ~140GB | 140GB+ | ❌ 불가 |
| INT8 | 8bit | ~70GB | 70GB+ | ❌ A100 필요 |
| Q4_K_M (GGUF) | 4bit | ~40GB | 40GB+ | ⚠️ A6000 정도 |
| Q4_K_M (분할) | 4bit | ~40GB | CPU 오프로드 | ✅ 일반 PC 가능! |
※ 더 작은 모델(7B, 13B)은 4bit 양자화 시 일반 GPU(8~16GB)로도 충분히 가능합니다.
모델의 가중치(weight)는 원래 32비트 부동소수점(FP32)으로 저장됩니다. 양자화는 이 값을 더 적은 비트의 정수(INT)로 변환하는 것입니다. 마치 사진을 압축하는 것처럼요!
GGUF는 llama.cpp 프로젝트에서 개발한 양자화 모델 저장 포맷입니다.
CPU로도 LLM을 실행할 수 있게 해주며, HuggingFace에 수천 개의 GGUF 모델이 올라와 있습니다.
| 포맷 | 비트/가중치 | 7B 크기 | 품질 | 추천 상황 |
|---|---|---|---|---|
| F32 | 32 | ~28GB | 완벽 | 학습 시 (추론엔 쓰지 않음) |
| F16 | 16 | ~14GB | 거의 완벽 | 고급 GPU (VRAM 충분할 때) |
| Q8_0 | 8 | ~7.2GB | 매우 좋음 | VRAM 8GB+ GPU, 품질 우선 |
| Q5_K_M | 5 | ~4.8GB | 좋음 | 품질과 크기 균형 (추천) |
| Q4_K_M | 4 | ~4.1GB | 좋음 | 가장 대중적 (기본 추천) |
| Q3_K_M | 3 | ~3.3GB | 보통 | VRAM 4GB 이하, 속도 우선 |
| Q2_K | 2 | ~2.7GB | 떨어짐 | 최후의 수단 |
| IQ4_XS | ~4 | ~3.9GB | 좋음 | 중요 레이어 보호 방식 |
K_M, K_S, K_L의 의미:
K = "K-quants" (더 스마트한 양자화 방식, 중요 레이어에 더 많은 비트 할당)
M = Medium (균형), S = Small (더 압축), L = Large (더 좋은 품질)
결론: Q4_K_M, Q5_K_M은 실사용에서 F16과 거의 차이가 없습니다. 일반 사용자에게는 Q4_K_M이 최고의 선택입니다 (크기 최소화 + 품질 유지).
Ollama는 양자화 모델을 가장 쉽게 실행할 수 있는 도구입니다. Docker처럼 모델을 pull 해서 바로 실행합니다.
# 1. Ollama 설치 (Linux/Mac) curl -fsSL https://ollama.ai/install.sh | sh # 2. 모델 다운로드 및 실행 (자동으로 Q4_K_M 받음) ollama run llama3 # Meta Llama 3 8B ollama run mistral # Mistral 7B ollama run exaone-deep:7.8b # EXAONE Deep 7.8B (한국어) ollama run qwen2.5:14b # Qwen 2.5 14B # 3. Python에서 사용 (OpenAI 호환 API) import ollama response = ollama.chat( model='llama3', messages=[{'role': 'user', 'content': '안녕하세요!'}] ) print(response['message']['content']) # 4. OpenAI SDK 호환 방식으로도 사용 가능 from openai import OpenAI client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama") response = client.chat.completions.create( model="llama3", messages=[{"role": "user", "content": "파이썬 코드 작성해줘"}] )
# 1. llama.cpp 빌드 git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make -j8 # GPU 지원: make LLAMA_CUBLAS=1 -j8 # 2. HuggingFace에서 GGUF 모델 다운로드 pip install huggingface_hub huggingface-cli download \ LGAI-EXAONE/EXAONE-Deep-32B-Instruct-GGUF \ --include "EXAONE-Deep-32B-Instruct-Q4_K_M.gguf" \ --local-dir ./models # 3. 실행 (GPU 오프로드 레이어 설정 가능) ./llama-cli \ -m ./models/EXAONE-Deep-32B-Instruct-Q4_K_M.gguf \ -n 512 \ # 최대 생성 토큰 -ngl 35 \ # GPU에 올릴 레이어 수 (VRAM 여유에 따라 조정) --temp 0.7 \ # 온도 (높을수록 창의적) -p "안녕하세요!" # 프롬프트 # 4. Python 바인딩 (llama-cpp-python) pip install llama-cpp-python from llama_cpp import Llama llm = Llama( model_path="./models/model-Q4_K_M.gguf", n_gpu_layers=35, # GPU 레이어 수 n_ctx=4096, # 컨텍스트 길이 ) output = llm("Q: 파이썬으로 Hello World 출력하는 방법은? A:") print(output['choices'][0]['text'])
pip install transformers bitsandbytes accelerate from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig import torch # ── INT8 양자화 로드 ────────────────────────────── quantization_config = BitsAndBytesConfig(load_in_8bit=True) model = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3-8B-Instruct", quantization_config=quantization_config, device_map="auto" # GPU 자동 분배 ) # 원래 16GB → 8GB로 절반 절약! # ── INT4 양자화 (QLoRA 방식) ────────────────────── quantization_config_4bit = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16, # 연산은 BF16으로 bnb_4bit_use_double_quant=True, # 이중 양자화로 추가 절약 bnb_4bit_quant_type="nf4" # NF4 = 정규분포 기반 4bit ) model_4bit = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3-8B-Instruct", quantization_config=quantization_config_4bit, device_map="auto" ) # 원래 16GB → 4.5GB! 소비자 GPU에서 70B도 가능! # 사용법은 일반 모델과 동일 tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct") inputs = tokenizer("AI란 무엇인가요?", return_tensors="pt").to("cuda") outputs = model_4bit.generate(**inputs, max_new_tokens=200) print(tokenizer.decode(outputs[0], skip_special_tokens=True))
| GPU | VRAM | 추천 모델 | 한국어 추천 |
|---|---|---|---|
| RTX 3060 / 4060 | 8GB | Llama 3.2 3B, Mistral 7B Q4 | EXAONE 3.5 7.8B Q4 |
| RTX 4070 Ti / 5070 Ti | 16GB | Llama 3 8B Q8, Mistral 22B Q4 | EXAONE Deep 7.8B Q8, Qwen2.5 14B Q4 |
| RTX 3090 / 4090 | 24GB | Llama 3.3 70B Q2, Mistral 22B Q8 | EXAONE Deep 32B Q3 |
| A6000 / RTX 6000 | 48GB | Llama 3.3 70B Q4_K_M | EXAONE Deep 32B Q8 |
| CPU만 있을 때 | RAM 32GB | Llama 3.2 3B, Phi-3 Mini | EXAONE 3.5 7.8B Q4 (느림) |
Qwen2.5 14B Q4_K_M (~8.5GB) 또는 EXAONE Deep 7.8B Q8 (~9GB)가 최적입니다. 32B 모델은 IQ3_XS (~14GB) 포맷을 쓰면 아슬아슬하게 가능합니다. CPU 오프로드 옵션(-ngl 줄이기)을 활용하면 더 큰 모델도 (느리지만) 실행 가능합니다.
| 방식 | 포맷 | CPU 실행 | GPU 필요 | 파인튜닝 가능 | 추천 상황 |
|---|---|---|---|---|---|
| GGUF | .gguf | ✅ 가능 | 옵션 | ❌ | 로컬 추론, Ollama |
| bitsandbytes | HF 모델 | ❌ | ✅ 필수 | ✅ QLoRA | GPU 파인튜닝 |
| AWQ | .safetensors | ❌ | ✅ 필수 | △ | GPU 추론, 빠른 속도 |
| GPTQ | .safetensors | ❌ | ✅ 필수 | △ | GPU 추론 |
ollama run llama3 한 줄로 실행