AI/LLM

[Quantization] 모델 경량화

jumemory 2025. 8. 11. 17:30

이번 단계는 거대하고 무거운 LLM을 우리집 컴퓨터나 스마트폰에서도 빠릿하게 돌아가게 만드는 마법, [19단계: Quantization] 모델 경량화입니다. 모델의 덩치는 줄이면서 지능은 유지하는 이 효율적인 기술의 정수를 정리해 드립니다.


[LLM 컨셉] Quantization: 거대한 지능을 가볍게 압축하는 기술

**양자화(Quantization)**는 모델의 가중치(Weight)를 표현하는 숫자의 정밀도를 낮추어, 모델의 용량과 연산량을 획기적으로 줄이는 기술입니다. 비유하자면, 아주 세밀한 붓(고정밀도)으로 그린 그림을 조금 더 굵은 붓(저정밀도)으로 다시 그리되, 전체적인 형체는 알아볼 수 있게 유지하는 과정과 같습니다.


1. 왜 양자화가 필요한가?

모델이 커질수록(예: Llama 3 70B), 이를 운영하기 위한 하드웨어 장벽이 기하급수적으로 높아집니다.

  • 메모리(VRAM) 절약: 70B 모델을 원래 정밀도(FP16)로 올리려면 약 140GB의 VRAM이 필요하지만, 4비트로 양자화하면 약 40GB로 줄어듭니다.
  • 추론 속도 향상: 데이터의 크기가 작아지면 GPU 메모리와 연산 장치 사이의 데이터 이동 속도가 빨라져 답변 속도가 올라갑니다.
  • 에지 디바이스 지원: 스마트폰이나 노트북 같은 기기(On-device AI)에서 모델을 돌리기 위해서는 양자화가 필수적입니다.

2. 정밀도의 차이 (Precision)

양자화의 핵심은 숫자를 표현하는 **'비트(Bit)'**를 줄이는 것입니다.

  • FP32 (Full Precision): 32비트 소수점. 매우 정확하지만 무겁습니다. 보통 학습 시에만 사용합니다.
  • FP16 / BF16 (Half Precision): 16비트 소수점. 현재 대부분의 모델이 기본적으로 사용하는 단위입니다.
  • INT8 / INT4: 8비트 또는 4비트 정수. 양자화된 모델들이 주로 사용하는 단위로, 용량을 1/4 이하로 줄여줍니다.

3. 양자화의 두 가지 주요 시점

① PTQ (Post-Training Quantization)

학습이 완전히 끝난 모델을 나중에 압축하는 방식입니다.

  • 특징: 추가 학습이 필요 없어 빠르고 간편합니다.
  • 단점: 비트를 너무 많이 줄이면(예: 8비트 → 4비트) 모델이 멍청해지는 성능 저하가 발생할 수 있습니다.

② QAT (Quantization-Aware Training)

모델을 학습시킬 때부터 "나중에 양자화될 것"을 가정하고 학습하는 방식입니다.

  • 특징: 양자화로 인한 오차를 학습 과정에서 스스로 보정하므로, 압축 후에도 성능 손실이 거의 없습니다.
  • 단점: 학습 비용과 시간이 많이 듭니다.

4. 최신 양자화 기술들 (GGUF, AWQ, EXL2)

실무에서 자주 접하게 될 양자화 포맷들입니다.

포맷 특징 주 사용처
GGUF (llama.cpp) CPU에서도 실행 가능하도록 설계된 포맷. 호환성이 매우 좋음. 일반 PC, Mac, 로컬 실행
AWQ (Activation-aware) 중요한 가중치만 선별하여 정밀도를 보호함. 성능 저하가 매우 적음. GPU 서버 추론 가속
GPTQ / EXL2 GPU 추론에 최적화된 고속 양자화 방식. 고성능 챗봇 서비스

5. [선생님의 심화 보충] 양자화와 '지능의 손실'

양자화를 하면 정보가 뭉개지기 때문에 어느 정도의 지능 손실은 피할 수 없습니다. 하지만 흥미로운 점은 모델이 클수록 양자화 저항력이 강하다는 것입니다. 7B 모델을 4비트로 줄이면 성능 하락이 눈에 띄지만, 70B 모델을 4비트로 줄이면 원래의 지능을 거의 그대로 유지합니다. 이것이 우리가 "큰 모델을 양자화해서 쓰는 것이 작은 모델을 그대로 쓰는 것보다 낫다"라고 말하는 이유입니다.


✍️ 공부를 마치며

양자화는 LLM을 구름 위(클라우드)에서 내려와 우리 손안(디바이스)으로 가져다준 기술입니다. 이제 우리는 가볍고 빠른 모델을 준비했습니다.

 

 

 

 

 

 

 

 

파인튜닝 로라..

 

런팟에 파이토피는 기본설치 나머지 별도 설치

transformers==4.44.2 
datasets==2.18.0 
accelerate==0.29.3 
evaluate==0.4.1 
bitsandbytes==0.43.1 
huggingface_hub>=0.23.2 
trl==0.8.6 
peft==0.10.0
scikit-learn 
wandb 



 BitsAndBytesConfig, 영자화할때 사용

bitsandbytes는 PyTorch 모델을 더 적은 메모리로, 더 효율적으로 학습하거나 추론할 수 있도록 도와주는 경량화·최적화 라이브러리입니다.
특히 LLM(대규모 언어 모델) 쪽에서 자주 쓰이고, Hugging Face에서 모델 로드할 때 load_in_8bit=True 같은 옵션을 줄 때 등장합니다.


1. 왜 쓰는지

딥러닝 모델, 특히 LLM은 파라미터 수가 수십억~수천억 개라 GPU 메모리 사용량이 매우 큽니다.
bitsandbytes는 정밀도를 낮추는 양자화(Quantization) 기법을 활용해 메모리 사용량과 연산량을 줄이는 것이 핵심입니다.

예를 들어:

  • FP32 (32비트 부동소수점)FP16 / BF16 (16비트)INT8 (8비트 정수)
  • 숫자를 표현하는 데 필요한 비트를 줄이면 → 저장 공간 절약 + 연산 속도 향상 + GPU VRAM 절감
  • 약간의 정밀도 손실은 있지만, 모델 성능은 거의 유지

2. 주요 기능

기능설명예시
8-bit & 4-bit 양자화 모델 파라미터를 32비트 대신 8비트 또는 4비트로 저장 load_in_8bit=True
메모리 절약 동일 모델을 더 작은 GPU에서도 로드 가능 80GB 모델을 24GB GPU에 올림
최적화된 옵티마이저 Adam, AdamW 등 기본 옵티마이저의 8비트 버전 제공 bnb.optim.Adam8bit
Hugging Face 통합 transformers와 쉽게 연동 LLM 로드 시 자동 적용

print(f"PyTorch version: {torch.__version__}")
print(f"Transformers version: {transformers.__version__}")
print(f"TRL version: {trl.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")     ----쿠다 사용
if torch.cuda.is_available():
    print(f"CUDA version: {torch.version.cuda}")

 

 

 

주의 키값 깃허브에 올리는거 방지용 

gitignore

.env

 

 

trl 강화학습 패키지

 

  Causal  -> 인과적 모델 - AutoModelForCausalLM, 인과 관계를 기반으로 이전 단어를 기반으로 다음 단어를 예측

 

 

json.load와 dump

 

#터미널에서 

watch -n 1 nvidia-smi

 

'AI > LLM' 카테고리의 다른 글

[Evaluation] 모델의 성적표  (0) 2025.08.13
[Serving] 고속 추론 서빙  (0) 2025.08.12
[MCP] LLM의 만능 커넥터  (0) 2025.08.08
[Agent] 자율적인 AI 에이전트  (1) 2025.08.07
[LangGraph] 에이전트의 설계도  (0) 2025.08.06