Transformers documentation

파인튜닝

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

파인튜닝

Fine-tuning은 특정 작업이나 도메인에 특화된 더 작은 데이터셋을 사용하여 대규모 사전 학습된 모델의 학습을 계속하는 과정입니다. 예를 들어, 코딩 예제 데이터셋으로 fine-tuning을 수행하면 모델의 코딩 능력이 향상됩니다. Fine-tuning은 사전 학습과 동일한 방식이지만, 무작위 가중치로 시작하지 않는다는 점이 다릅니다. 또한, 훨씬 적은 컴퓨트, 데이터, 시간이 필요합니다.

아래 튜토리얼에서는 Trainer를 사용하여 대규모 언어 모델을 파인튜닝하는 과정을 안내합니다.

사용자 토큰으로 Hugging Face 계정에 로그인하여 파인튜닝한 모델을 Hub에 push합니다.

from huggingface_hub import login

login()

토큰화

데이터셋을 로드하고 모델이 학습하는 텍스트 열(horoscope)을 토큰화합니다.

토크나이저는 모델 입력인 input_ids와 attention_mask를 생성합니다. 모델의 forward 메서드는 input_ids와 attention_mask만 허용하므로, 토크나이징 후 horoscope와 같은 컬럼을 제거하려면 remove_columns를 설정하세요.

  • truncation=True를 설정하고 max_length를 지정하여 더 긴 시퀀스를 지정된 최대 길이로 잘라냅니다.
  • train_test_split 메서드를 사용하여 모델을 평가하기 위한 테스트 분할을 생성합니다.
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorForLanguageModeling

model_name = "Qwen/Qwen3-0.6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("karthiksagarn/astro_horoscope", split="train")

def tokenize(batch):
    return tokenizer(
        batch["horoscope"],
        truncation=True,
        max_length=512,
    )

dataset = dataset.map(tokenize, batched=True, remove_columns=dataset.column_names)
dataset = dataset.train_test_split(test_size=0.1)

Data collator는 모델이 처리할 수 있도록 데이터셋 샘플을 배치로 조립합니다. DataCollatorForLanguageModeling은 데이터셋의 모든 시퀀스를 동일한 길이로 패딩하는 대신, 동적으로 각 배치를 해당 배치 내 가장 긴 시퀀스 길이에 맞게 패딩합니다. 이를 통해 불필요한 패딩 토큰에 대한 계산을 피하여 계산량과 메모리를 절약합니다.

  • 토큰이 무작위로 마스킹되는 것을 방지하려면 mlm=False로 설정하세요.
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)

모델 로드

파인튜닝을 위해 사전 학습된 체크포인트를 로드합니다(모델 로딩에 대한 자세한 내용은 모델 로드 가이드를 참조하세요).

  • dtype="auto"를 설정하면 저장된 dtype으로 가중치를 로드합니다. 이 설정이 없으면 PyTorch는 가중치를 torch.float32로 로드하며, 원래 가중치가 torch.bfloat16인 경우 메모리 사용량이 두 배로 증가합니다.
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer

model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto")

학습 구성

TrainingArguments는 학습 실행을 커스터마이징하는 모든 옵션을 제공합니다. 여기서는 가장 일반적인 인자만 다루며, 나머지는 합리적인 기본값을 가지거나 분산 학습과 같은 특정 시나리오에서만 관련이 있습니다. 전체 인자 목록은 TrainingArguments API 문서를 참고하세요.

학습 시간
학습 최적화
평가 및 체크포인트
로깅
  • num_train_epochs와 per_device_train_batch_size는 학습 기간과 배치 크기를 제어합니다. learning_rate는 옵티마이저의 초기 학습률을 설정합니다.
training_args = TrainingArguments(
    output_dir="qwen3-finetuned",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    gradient_checkpointing=True,
    gradient_checkpointing_kwargs={"every_n_layers": 4},
    bf16=True,
    learning_rate=2e-5,
    logging_steps=10,
    eval_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
)

학습

필요한 구성 요소를 모두 갖춘 Trainer 인스턴스를 생성한 후, train()을 호출하여 시작합니다.

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    processing_class=tokenizer,
    data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

trainer.train()
trainer.push_to_hub()

push_to_hub()은 파인튜닝된 가중치, 생성 설정, 토크나이저, 모델 설정을 Hub에 업로드합니다.

다음 단계

  • 커스텀 손실 함수, 메모리 효율적 평가, 체크포인트링 등 일반적인 Trainer 기능의 최소 작동 예제를 보려면 Trainer 기능 가이드를 읽어보세요.
  • 새로운 기능과 사용자 정의 기능을 지원하기 위해 Trainer 메서드를 서브클래스로 만드는 방법을 배우려면 Subclassing Trainer methods 가이드를 읽어보세요.
  • Callbacks 가이드를 읽어 보고, 로깅, 조기 종료 및 기타 사용자 정의 동작을 위해 학습 이벤트에 어떻게 연결하는지 알아보세요.
  • 샘플이 배치로 조립되는 방식을 사용자 지정하는 방법을 배우려면 Data collators 가이드를 읽어보세요.
  • Hugging Face Jobs를 통해 임대 GPU에서 학습 스크립트를 실행합니다.
  • 노트북 또는 Resources > Task Recipes 섹션을 참고하여 텍스트, 오디오, 비전, 멀티모달 작업에 대한 추가 학습 예시를 확인하세요.
Update on GitHub