[Python] LLM Fine-Tuning 라이브러리 (TRL, AutoTrain, DeepSpeed, LLaMA-Factory, Axolotl, Unsloth)

류지수·2025년 7월 4일
0

TRL (Transformers Reinforcement Learning)

  • HuggingFace
  • 특징: SFT, PPO, DPO 등 RLHF 파인튜닝을 쉽게 구성 가능
    *SFT(Supervised Fine-Tuning)
    *PPO (Proximal Policy Optimization): 강화학습을 이용해 모델을 사람 선호에 맞게 조정
    *DPO (Direct Preference Optimization): 더 좋은 답변을 직접 선택해 모델을 학습하는 방식 (강화학습 없이, “좋은 답은 점수 ↑, 나쁜 답은 점수 ↓”) (선호 학습)

예시 코드 (SFT)

from transformers import AutoTokenizer, AutoModelForCausalLM
from trl import SFTTrainer, SFTTrainingArguments

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

dataset = [{"text": "Q: What is the capital of France?\nA: Paris"}]

training_args = SFTTrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=2,
    num_train_epochs=3,
)

trainer = SFTTrainer(model=model, tokenizer=tokenizer, train_dataset=dataset, args=training_args)
trainer.train()


AutoTrain

  • Hugging Face
  • 특징: 코드 없이도 웹 UI로 파인튜닝 가능
huggingface-cli login
autotrain setup
autotrain llm --train --project-name "my_project" --model "meta-llama/Llama-2-7b-hf" --data-path ./data --use-peft

CSV/JSONL 형식의 text 컬럼 필수



DeepSpeed

  • Microsoft
  • 특징: 대규모 모델의 분산 학습 최적화 (ZeRO, Offload 등 지원)
    *ZerO (Zero Redundancy Optimizer): 모델, Optimizer, Gradient-decsent를 GPU 간에 나눠서 저장/계산하는 기술
    (일반적으로, 모든 GPU가 전체 모델을 복사해서 가지고 있기 때문에 GPU 메모리 낭비. ZeRO는 중복을 없애서 더 큰 모델을 작은 GPU에서도 학습할 수 있게 해줌)


    *Offload: GPU 대신 CPU(Ehsms NVMe 디스크)에 메모리를 옮겨서 사용하는 기법
    GPU 메모리가 부족할 때, 일부 데이터를 GPU에서 제거하고 CPU RAM 또는 디스크에 저장해서 공간 확보 (Optimizer 상태를 CPU로 옮기거나 파라미터 자체를 GPU가 아닌 다른 곳에서 유지 -> 속도는 느려질 수 있지만, GPU 부족한 환경에서는 유용)

예시 설정 (ds_config.json)

{
  "train_batch_size": 32,
  "fp16": { "enabled": true },
  "zero_optimization": { "stage": 2 }
}

실행 커맨드

deepspeed --num_gpus=4 train.py --deepspeed ds_config.json

train.py는 Hugging Face Trainer나 Accelerate로 작성



LLaMA-Factory

  • 특징: Meta LLaMA 계열 모델의 로컬 튜닝 최적화
python src/train_bash.py \
  --model_name_or_path meta-llama/Llama-2-7b-hf \
  --data_path ./data.json \
  --output_dir ./output \
  --adapter lora \
  --num_train_epochs 3

데이터 예시 (Insruction 튜닝)

[
  {
    "instruction": "What is the capital of Germany?",
    "input": "",
    "output": "Berlin"
  }
]


Axolotl

  • OpenAccess AI Collective
  • 특징: YAML 기반 구성, 다양한 기능 통합 (LoRA, DeepSpeed, Wandb 등)

config.ymal

base_model: meta-llama/Llama-2-7b-hf
datasets:
  - path: ./data.json
adapter: qlora
output_dir: ./output
num_epochs: 3
micro_batch_size: 2


Unsloth

  • 특징: 8GB GPU에서도 고속 파인튜닝 가능 (QLoRA 최적화)
from unsloth import FastLanguageModel
from trl import SFTTrainer, SFTTrainingArguments

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/llama-2-7b-bnb-4bit",
    max_seq_length=2048,
    load_in_4bit=True,
)

dataset = [{"text": "Q: What is AI?\nA: Artificial Intelligence"}]

training_args = SFTTrainingArguments(
    output_dir="outputs",
    per_device_train_batch_size=1,
    num_train_epochs=1,
)

trainer = SFTTrainer(model=model, tokenizer=tokenizer, train_dataset=dataset, args=training_args)
trainer.train()

*Unsloth = "빠르고 가벼운 모델 로닝"
*TRL = "LLM에 특화된 학습 툴킷 (SFT, DPO 등)
* 즉, 이 둘을 결합하면 낮은 사양에서도 LLM을 빠르게 학습시킬 수 있어서, 특히 개발자 개인이나 소규모 연구 팀에서 매우 유용


정리

라이브러리주요 특징장점단점추천 대상
TRLRLHF & SFT 지원 (Hugging Face)Hugging Face와 연동 쉬움커스터마이징 제한연구자, 모델 실험가
AutoTrainGUI 기반 자동 튜닝 플랫폼코드 없이 사용 가능고급 설정 어려움초보자, 비개발자
DeepSpeed분산 학습/대규모 모델 최적화GPU 효율 최고, 다양한 전략 지원설정 복잡, 다른 툴과 함께 사용 필요고사양 인프라 사용자
LLaMA-FactoryLLaMA 모델 경량 튜닝 툴킷QLoRA, LoRA 등 경량화 완비LLaMA 외 모델은 비권장로컬 튜닝 사용자
AxolotlYAML 설정 기반 종합 툴킷매우 유연함, 다양한 기능 통합진입장벽 있음, 문서 부족실험 중심 사용자
Unsloth빠르고 저용량 GPU 최적화8GB GPU도 가능, 속도 매우 빠름모델 종류 제한(LLaMA 등)저사양 로컬 사용자

  • 빠르게 실험하고 싶다면 → Unsloth, LLaMA-Factory
  • GUI로 편하게 하고 싶다면 → AutoTrain
  • 대규모 모델 학습 환경이라면 → DeepSpeed
  • RLHF 실험용이라면 → TRL
  • 여러 기능을 통합해서 커스터마이징하고 싶다면 → Axolotl

profile
끄적끄적

0개의 댓글