개발 창고/AI
SFTTrainer란? Hugging Face로 쉽게 시작하는 언어모델 미세 조정
로이제로
2025. 6. 15. 22:00
반응형
SFTTrainer란?
Hugging Face
trl
라이브러리를 활용한 LLM(대형 언어 모델) 미세 조정 방법
최근 들어 ChatGPT나 LLaMA처럼 사전 학습된 언어 모델을 우리의 데이터에 맞게 미세 조정(fine-tuning) 하고자 하는 수요가 증가하고 있습니다.
이때 활용할 수 있는 것이 바로 Hugging Face의 trl
라이브러리에서 제공하는 SFTTrainer입니다.
SFT(Supervised Fine-Tuning)란?
SFT는 정답(label) 이 있는 데이터를 가지고 모델을 학습시키는 방식입니다. 예를 들어, 다음과 같은 데이터가 있다고 가정해보겠습니다.
{
"prompt": "고양이는 왜 낮잠을 자나요?",
"response": "고양이는 야행성 동물이기 때문에 낮에 에너지를 충전하기 위해 낮잠을 잡습니다."
}
이와 같이 질문(prompt)과 대답(response)이 한 쌍으로 구성된 데이터를 기반으로 모델이 더 자연스럽고 정확한 답변을 생성할 수 있도록 학습시키는 것이 바로 SFT입니다.
SFTTrainer 사용 예시
이제 SFTTrainer
를 실제로 어떻게 사용하는지 코드로 살펴보겠습니다.
from datasets import load_dataset
from trl import SFTTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
# 1. 데이터 불러오기 (Hugging Face datasets 또는 사용자 정의 JSONL)
dataset = load_dataset("json", data_files="my_dataset.json")
# 2. 사전학습 모델과 토크나이저 로딩
model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-neo-125M")
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neo-125M")
# 3. Trainer 설정
training_args = TrainingArguments(
output_dir="./sft-model",
per_device_train_batch_size=2,
num_train_epochs=3,
logging_steps=10,
save_steps=100,
save_total_limit=2,
)
# 4. SFTTrainer 생성
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
args=training_args,
train_dataset=dataset["train"],
dataset_text_field="prompt", # prompt + response를 합쳐주는 전처리 필요
max_seq_length=512,
)
# 5. 학습 시작
trainer.train()
예시 데이터 구성
SFTTrainer에서 사용하는 데이터는 일반적으로 다음과 같은 형태로 구성됩니다:
{
"prompt": "AI는 어떻게 학습하나요?",
"response": "AI는 많은 데이터를 기반으로 패턴을 학습하고, 이를 통해 예측이나 분류 등의 작업을 수행합니다."
}
이 데이터를 전처리하여 다음과 같이 하나의 문자열로 결합해 학습에 사용합니다:
"### 질문: AI는 어떻게 학습하나요?\n### 답변: AI는 많은 데이터를 기반으로..."
이 과정은 전처리 함수 또는 Tokenizer의
add_special_tokens
기능을 통해 쉽게 처리할 수 있습니다.
마무리하며
SFTTrainer
는 Hugging Face의 사전 학습된 모델을 기반으로 자신만의 데이터를 사용하여 손쉽게 미세 조정을 진행할 수 있도록 도와주는 매우 유용한 도구입니다. 특히 아래와 같은 사례에서 효과적으로 활용할 수 있습니다.
- 도메인 특화 질의응답 시스템
- 대화형 인공지능 서비스
- 고객 지원 챗봇
반응형