허깅 페이스(Hugging Face) - 트레이너 API (4)

2026. 5. 28. 09:33AI/LLM

앞서 트랜스포머(Transformer)에서 파이프라인(Pipeline)의 내부 동작 방식에 대해 살펴봤는데

 

그 과정에서 기존 파운데이션 모델(Foundation Model)에 추가로 학습시키는 과정인

 

파인튜닝(Fine-Tuning) 과정이 어떻게 이루어지는지 살펴봤었다.

 

그 과정에서 편하게 해주는 도구인 트레이너 API(Trainer API)에 대해 알아볼 것이다.

 

그러나 이 부분은 실제 학습시키는 내용이므로, 처리하는데 몇시간 이상 걸린다.

 

그러므로 코드만 간단하게 살펴볼 것이다.

 

첫번째 코드는 지난번에 살펴봤던 것인데 다시 한번 복기해보자.

from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorWithPadding

raw_datasets = load_dataset("glue","mrpc")
checkpoint = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

def tokenize_function(example):
  return tokenizer(example["senetence1"], example["sentence2"], truncation=True)
  
tokenized_datasets = raw_datasets.map(tokenize_function, batched=True)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)

 

Pre-Trained 된 모델을 가져다가 학습을 할 때 토큰화시켜 임베딩 작업을 먼저 하는데

 

이 과정에서 기존 Dataset 에다가 토큰 작업 된 부분이 컬럼으로 추가로 들어오는 형태이다.

 

토큰화 작업에 대해 자세히 이야기하자면, 내부에 각각 자연어들이 문장의 길이가 다 다를 수 있으므로

 

패딩 작업을 통해 길이를 맞추는데 메모리 낭비를 줄이기 위해 batch 단위로 패딩을 맞춘다.

 

그 batch 단위로 패딩을 맞추는 부분이 data_collator 함수이다.

 

이제 학습 시키는 부분에 관한 내용인데, 학습-수정-평가 과정이 연결되어 작업된다.

 

그 과정을 좀더 편하게 허깅 페이스에서 제공하는 라이브러리가 있는데

 

그것이 Trainer API 라고 부른다.

 

먼저 설정하는 것이 TrainingArguments이다.

from transformers import TrainingArguments

training_args = TrainingArguments("test-trainer")

 

학습 설정 객체를 생성하는 단계로써, 저장 위치 설정이나, Batch 크기나, 반복횟수 등을 지정한다.

 

그 다음 문장을 분류하는 모델을 가져온다.

from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)

 

이제 위에서 설정한 것을 기반으로 트레이너 API를 사용한다.

from transformers import Trainer

trainer = Trainer(
  model,
  training_args,
  train_dataset=tokenized_datasets["train"],
  eval_dataset=tokenized_datasets["validation"],
  data_collator=data_collator,
  processing_class=tokenizer
)

trainer.train()

 

학습 시 Loss 계산 및 BackWard, Forward, Evalutation, Save, Logging 연산들을 대신 해준다.

 

그리고, 실제로 trainer.train() 과정을 통해 학습을 진행한다.

 

이제 여러 시간을 거쳐 학습이 완료되면,  Validation 과정을 거쳐 검증 데이터를 가지고 추론한다.

predictions = trainer.predict(tokenized_datasets["validation"])

 

그 결과값을 벡터 데이터에서 자연어 데이터로 처리하는 과정을 또 거친다 (사람이 이해하기 편해야 하므로)

import numpy as np

preds = np.argmax(predictions.preditions, axis=1)

 

그래서 그 데이터를 기반으로 성능 평가 단계를 거친다.

import evaluate

metric = evaluate.load("glue","mrpc")
metric.compute(predictions=preds, references=predictions.label_ids)

 

그리고 수정 후 다시 트레이닝 하는 과정을 여러번 거치는 것이다.

training_args = TrainingArguments("test-trainer", evalutation_strategy="epoch")