SFTConfig

Soogyung Gwon·2026년 5월 30일

구름을잡아라

목록 보기
67/76

SFTConfig란?

SFTConfig는 대규모 언어 모델(LLM)의 Supervised Fine-Tuning(SFT) 을 수행할 때 사용하는 학습 설정(Configuration) 클래스다.

특히 Hugging Face 생태계의 TRL(Transformer Reinforcement Learning) 라이브러리에서 SFTTrainer와 함께 사용된다.

예를 들어 다음과 같이 사용할 수 있다.

from trl import SFTTrainer, SFTConfig

training_args = SFTConfig(
    output_dir="./results",
    per_device_train_batch_size=2,
    learning_rate=2e-5,
    num_train_epochs=3,
)

위 코드에서 SFTConfig는 모델 학습에 필요한 다양한 설정을 정의한다.


SFT란?

SFT(Supervised Fine-Tuning)는 사람이 작성한 정답 데이터를 이용하여 모델을 추가 학습시키는 방법이다.

예를 들어 다음과 같은 데이터가 있다고 가정해 보자.

입력정답
한국의 수도는?서울입니다.
Translate hello to Korean안녕하세요

모델은 이러한 입력-출력 쌍을 학습하여 원하는 형태의 응답을 생성하도록 훈련된다.


왜 SFTConfig를 사용하는가?

기존 Hugging Face Trainer에서는 일반적으로 TrainingArguments를 사용한다.

from transformers import TrainingArguments

하지만 LLM 파인튜닝에는 추가적으로 필요한 기능들이 많다.

예를 들어:

  • Packing
  • Chat Template 처리
  • Completion-only Training
  • PEFT/LoRA 지원
  • 최대 시퀀스 길이 관리

등의 기능이 필요하다.

이를 위해 TRL에서는 TrainingArguments를 확장한 SFTConfig를 제공한다.

구조적으로는 다음과 같이 이해할 수 있다.

TrainingArguments
        ↓
     SFTConfig

즉, SFTConfigTrainingArguments의 상위 호환 버전이라고 볼 수 있다.


주요 옵션

다음은 자주 사용되는 설정 예시다.

SFTConfig(
    output_dir="./outputs",
    learning_rate=2e-5,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,
    num_train_epochs=3,
    logging_steps=10,
    save_steps=100,
    max_seq_length=2048,
    bf16=True,
)

각 옵션의 의미는 다음과 같다.

옵션설명
learning_rate학습률
per_device_train_batch_sizeGPU당 배치 크기
gradient_accumulation_stepsGradient 누적 횟수
num_train_epochs전체 데이터 반복 횟수
max_seq_length최대 토큰 길이
bf16, fp16반정밀도 학습
logging_steps로그 출력 주기
save_steps모델 저장 주기

Gradient Accumulation이 필요한 이유

GPU 메모리가 부족한 경우 큰 배치를 사용할 수 없다.

예를 들어 실제로는 배치 크기 32로 학습하고 싶지만 GPU 메모리 제약으로 배치 크기 4밖에 사용할 수 없는 경우가 있다.

이때:

per_device_train_batch_size=4
gradient_accumulation_steps=8

로 설정하면

4 × 8 = 32

와 동일한 효과를 얻을 수 있다.

즉, 여러 번 계산한 Gradient를 모아 한 번에 업데이트하는 방식이다.


SFTTrainer와 함께 사용하는 방법

일반적으로 다음과 같은 형태로 사용한다.

from trl import SFTTrainer, SFTConfig

config = SFTConfig(
    output_dir="./outputs",
    learning_rate=2e-5,
)

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    args=config,
)

trainer.train()

전체 흐름은 다음과 같다.

Dataset
   ↓
SFTTrainer
   ↓
SFTConfig 설정 적용
   ↓
Fine-Tuning 수행

LoRA와 함께 사용하는 경우

최근에는 전체 모델을 학습하는 대신 LoRA를 사용하는 경우가 많다.

예를 들어:

from peft import LoraConfig
from trl import SFTConfig, SFTTrainer

구조는 다음과 같다.

Pretrained Model
        ↓
LoRA Adapter 추가
        ↓
SFTTrainer
        ↓
SFTConfig로 학습 설정
        ↓
Fine-Tuning

여기서 각 역할은 다음과 같다.

구성 요소역할
LoraConfig어떤 Adapter를 추가할지 설정
SFTConfig학습 방법 설정
SFTTrainer실제 학습 수행

SFTConfig와 LoRAConfig의 차이

초보자들이 자주 헷갈리는 부분이다.

LoRAConfig

LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"]
)
  • LoRA Adapter 구조 정의
  • 어떤 레이어를 학습할지 결정
  • Adapter 크기 설정

SFTConfig

SFTConfig(
    learning_rate=2e-5,
    num_train_epochs=3
)
  • 학습률 설정
  • Epoch 수 설정
  • Batch 크기 설정
  • 저장 및 로그 설정

즉,

LoRAConfig
→ 모델 구조 설정

SFTConfig
→ 학습 방식 설정

이라고 이해하면 된다.


자주 사용하는 SFTConfig 예시

from trl import SFTConfig

training_args = SFTConfig(
    output_dir="./checkpoints",
    learning_rate=2e-5,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    num_train_epochs=3,
    max_seq_length=2048,
    bf16=True,
    logging_steps=10,
    save_steps=100,
    save_total_limit=2,
)

LLM 파인튜닝 실습에서 가장 자주 볼 수 있는 형태의 설정이다.


정리

SFTConfig는 TRL 라이브러리에서 제공하는 SFT(Supervised Fine-Tuning) 전용 학습 설정 클래스다.

주요 역할은 다음과 같다.

  • 학습률 설정
  • Batch 크기 설정
  • Epoch 설정
  • Logging 설정
  • Checkpoint 저장 설정
  • 최대 토큰 길이 설정
  • FP16/BF16 설정

즉,

모델을 어떻게 학습시킬 것인지 정의하는 설정 파일

이라고 이해하면 된다.

반면,

  • LoRAConfig는 모델 구조 설정
  • SFTConfig는 학습 설정

을 담당한다.

LLM 파인튜닝에서는 SFTTrainer, SFTConfig, LoRAConfig가 함께 사용되는 경우가 매우 많다.

profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글