Unsloth과 Hugging Face TRL 통합으로 더 빠른 LLM 파인튜닝
TL;DR
Unsloth은 Large Language Model(LLM) 파인튜닝 속도를 높이면서 VRAM 사용량을 줄이도록 설계된 경량 라이브러리입니다. Hugging Face 생태계와 완전히 통합되어 모델 정확도를 손상시키지 않으면서 상당한 속도 향상과 메모리 효율성을 제공합니다.
기술적 구현: Triton 커널과 수동 역전파
Unsloth은 표준 모델링 코드를 최적화된 작업으로 대체하여 성능 향상을 달성합니다. 라이브러리는 역전파 단계를 수동으로 유도하고 PyTorch 모듈을 Triton 커널로 다시 작성합니다.
이러한 최적화는 근사치를 사용하지 않기 때문에 표준 QLoRA 대비 0% 정확도 저하가 발생하지 않습니다. Unsloth은 GTX 1070부터 H100까지 대부분의 NVIDIA GPU와 호환됩니다.
성능 벤치마크
Tesla T4와 A100 Google Colab 인스턴스에서 4개의 데이터셋을 사용하여 59회 실행한 벤치마크 결과, Unsloth은 표준 Hugging Face 구현 및 Flash Attention 2보다 znacz하게 뛰어난 성능을 보입니다.
A100 40GB 성능
| 모델 | 데이터셋 | Hugging Face | HF + Flash Attention 2 | Unsloth | VRAM 감소 |
|---|---|---|---|---|---|
| Code Llama 34b | Slim Orca | 1x | 1.01x | 1.94x | -22.7% |
| Llama-2 7b | Slim Orca | 1x | 0.96x | 1.87x | -39.3% |
| Mistral 7b | Slim Orca | 1x | 1.88x | -65.9% | |
| Tiny Llama 1.1b | Alpaca | 1x | 1.55x | 2.74x | -57.8% |
| DPO with Zephyr | Ultra Chat | 1x | 1.24x | 1.88x | -11.6% |
무료 Colab T4 성능
| 모델 | 데이터셋 | Hugging Face | HF + Pytorch 2.1.1 | Unsloth | VRAM 감소 |
|---|---|---|---|---|---|
| Llama-2 7b | OASST | 1x | 1.19x | 1.95x | -43.3% |
| Mistral 7b | Alpaca | 1x | 1.07x | 1.56x | -13.3% |
| Tiny Llama 1.1b | Alpaca | 1x | 2.06x | 3.87x | -73.8% |
| DPO with Zephyr | Ultra Chat | 1x | 1.09x | 1.55x | -18.6% |
Transformers 버전 4.36과 비교하여, Unsloth은 최대 2.7배 더 빠른 학습과 최대 74% 적은 메모리 사용을 제공합니다.
Hugging Face 생태계와의 통합
Unsloth은 Hugging Face Hub, transformers, PEFT, 그리고 TRL 라이브러리와 완전히 호환됩니다.
모델 지원
Unsloth은 현재 Llama 유형 아키텍처를 지원하며, 다음을 포함합니다:
- Llama (and CodeLlama)
- Mistral
- Yi
- Deepseek
- TinyLlama
- Llamafied Qwen
TRL 통합
Unsloth 모델은 TRL의 SFTTrainer, DPOTrainer, 그리고 PPOTrainer에 직접 전달할 수 있습니다. 이를 통해 사용자는 표준 TRL 학습 워크플로를 유지하면서 Unsloth의 속도를 활용할 수 있습니다. 결과적으로 훈련된 모델은 Hugging Face 생태계와 완전히 호환되며, transformers 라이브러리를 사용하여 Hub로 추론을 위해 푸시할 수 있습니다.
사용법 및 최적화
사용자는 FastLanguageModel.from_pretrained를 사용하여 모델을 로드할 수 있으며, 이는 내부적으로 RoPE Scaling을 수행하여 더 큰 최대 시퀀스 길이를 지원합니다.
성능을 추가로 최적화하기 위해 라이브러리는 사전 양자화된 4비트 모델(예: unsloth/llama-2-7b-bnb-4bit)을 제공하며, 이는 메모리 단편화를 약 500MB 줄이고 모델 다운로드 속도를 네 배로 높입니다.
QLoRA 파인튜닝 시, 사용자는 FastLanguageModel.get_peft_model를 통해 어댑터를 연결합니다. 라이브러리는 lora_dropout이 0으로 설정되고 bias가