안녕하세요.
브리아나입니다.
오늘은 LLM 학습이나 fine-tuning시 필요한 필수 라이브러리에 대해서 소개해보고자 합니다.
✅ accelerate
Accelerate는 PyTorch 기반 모델의 학습(Training)과 추론(Inference)를 최적화하는 HuggingFace에서 만든 라이브러리입니다.
특히, 분산 학습(multi-GPU, TPU), 혼합 정밀도 학습(Mixed Precision Training), 메모리 최적화를 지원해 대규모 모델 학습을 효율적으로 만듭니다.
대게의 LLM 모델은 메모리 요구량이 매우 커서, accelerate는 단일 GPU or 다중 GPU 환경에서 학습 속도 높이면서 메모리 사용량 줄이는데 유용한 라이브러리입니다.
내부적인 주요 기능은 다음과 같습니다.
- Zero Redundancy Optimizer (ZeRO): 모델 파라미터, 옵티마이저 상태, 그래디언트를 GPU 간에 분할해 메모리 사용량 감소.
- Mixed Precision: FP16/BF16 사용해 계산 속도 높이면서 메모리 사용량 줄인다.
- Dynamic Padding: 배치 크기를 동적으로 조정해 효율성 높인다.
✅ PEFT
peft(Parameter-Efficient Fine-Tuning)은 대규모 언어 모델(LLM)을 적은 파라미터로 미세 조정하는 기술로 HuggingFace에서 제공하는 라이브러리입니다.
대표적으로 LoRA(Low-Rank Adaption)과 QLoRA(Quantized LoRA)를 지원합니다.
대게 Fine-tuning 하고싶을 때, 모델 자체가 너무나도 대규모이기 때문에 모든 파라미터를 학습하는 Full Fine-tuning은 메모리 소모가 큽니다.
PEFT는 LoRA/QLoRA를 통해서 효율적인 미세조정이 가능하게 합니다.
💜 LoRA: 저차원 행렬(A, B)를 추가해 소량의 파라미터만 학습해요. 예) 7B에서 수백만으로 줄임.
💜 QLoRA: 4비트 양자화(Quantization)을 적용해 메모리 사용량을 추가로 줄여요.
💜 Adapters: 학습된 어댑터를 기존 모델에 병합(Merge) 하거나 분리도 돼요.
+ HuggingFace 말고도 torchtune 이라는 라이브러리가 있는데, 거기서는 lora_finetune_single_device, qlora_finetune_single_device 등의 라이브러리로도 동작 가능해요!
✅ Bitsandbytes
모델 파라미터를 4비트 혹은 8비트로 양자화해서 메모리 사용량을 줄이는 라이브러리입니다.
- LLaMa-7B는 FP16으로 14GB 메모리 필요해요.
- 그러나, bitsandbytes 사용해서 4비트 양자화(NF4)로 변환하면 8GB 이하로 학습 가능해요.
지원 가능한 기능은 다음과 같아요.
- 4-bit/8-bit Quantization
- NF4 (NormalFloat 4-bit): 보통 QLoRA에서 사용하는 특수 데이터 타입으로, 정밀도 손실을 최소화해요.
- Dynamic Quantization: 학습 중 가중치를 디-퀀타이징해서 계산 정확도를 유지해요.
'Python' 카테고리의 다른 글
[Python] Softeer.ai Level.2. 연탄의 크기 문제풀이 (0) | 2024.10.29 |
---|---|
윈도우 가상환경 virtualenv 사용하기 (0) | 2024.07.26 |
윈도우 virtualenv 가상환경 우분투로 옮겨서 환경 옮겨가기 (1) | 2024.07.23 |
Docker 조회, 시작, 접속하는 방법 공유 (0) | 2024.07.10 |
OOD(Out-of-Distribution) Detection 이해하기 (작성중) (0) | 2024.06.26 |