딥러닝과 자연어 처리(NLP) 분야에서 허깅페이스(Hugging Face)의 트랜스포머(Transformers) 라이브러리는 매우 유용한 도구입니다. 이 강좌에서는 허깅페이스의 Trainer
API에서 사용하는 TrainingArguments
클래스에 대해 자세히 설명하고, 그 설정 방법과 실제 코드 예제를 제공합니다.
TrainingArguments란?
TrainingArguments
클래스는 모델 훈련의 다양한 하이퍼파라미터와 설정을 정의하기 위해 사용됩니다. 이 클래스는 모델 훈련, 검증 및 로깅 요구 사항을 포함하는 여러 인자를 설정할 수 있도록 해줍니다.
TrainingArguments의 주요 매개변수
output_dir
: 모델 체크포인트가 저장될 디렉토리 경로입니다.num_train_epochs
: 전체 훈련 데이터셋을 몇 번 반복할 것인지 설정합니다.per_device_train_batch_size
: 각 장치(예: GPU)에서 사용할 배치 사이즈입니다.learning_rate
: 학습률을 설정합니다.evaluation_strategy
: 평가 전략을 설정합니다. 예를 들어, “epoch” 또는 “steps”와 같은 옵션이 있습니다.logging_dir
: 로그 파일이 저장될 디렉토리 경로입니다.weight_decay
: 가중치 감소를 사용하여 정규화를 적용합니다.save_total_limit
: 저장할 체크포인트의 최대 개수를 제한합니다.
TrainingArguments 설정하기
이제 TrainingArguments
를 활용해 실제로 훈련에 필요한 매개변수를 설정해보겠습니다. 아래 예제 코드에서는 이 클래스를 어떻게 사용하고 각각의 매개변수의 역할이 무엇인지 설명합니다.
파이썬 예제 코드
from transformers import TrainingArguments
# TrainingArguments 객체 생성
training_args = TrainingArguments(
output_dir='./results', # 체크포인트를 저장할 디렉토리 경로
num_train_epochs=3, # 훈련할 에폭 수
per_device_train_batch_size=16, # 각 디바이스에서 사용할 배치 사이즈
per_device_eval_batch_size=64, # 평가 시 사용할 배치 사이즈
learning_rate=2e-5, # 학습률
evaluation_strategy="epoch", # 평가 전략
logging_dir='./logs', # 로그 파일 저장 경로
weight_decay=0.01, # 가중치 감소
save_total_limit=2 # 최대 저장 체크포인트 수
)
print(training_args)
코드 설명
위의 코드는 TrainingArguments
객체를 생성하는 예제입니다. 각 매개변수에 대해 구체적으로 살펴보겠습니다:
output_dir='./results'
: 훈련 후 모델 체크포인트가 저장될 폴더를 지정합니다.num_train_epochs=3
: 전체 데이터셋을 3번 반복하여 훈련합니다.per_device_train_batch_size=16
: 각 장치에서 16개의 샘플을 배치로 사용하여 훈련합니다.per_device_eval_batch_size=64
: 평가 시에는 각 장치에서 64개의 샘플을 배치로 처리합니다.learning_rate=2e-5
: 훈련 시작 시의 학습률을 설정합니다.evaluation_strategy="epoch"
: 각 에폭 종료 후 모델을 평가하도록 설정합니다.logging_dir='./logs'
: 훈련 로그를 저장할 디렉토리입니다.weight_decay=0.01
: 1%의 가중치 감소를 적용하여 모델 과적합을 방지합니다.save_total_limit=2
: 저장되는 체크포인트의 최대 수를 2로 제한합니다.
TrainingArguments와 Trainer API 통합하기
훈련 파라미터를 설정한 후, Trainer
API를 사용하여 모델을 훈련할 수 있습니다. 아래는 Trainer
클래스와 TrainingArguments
를 통합하는 방법을 보여주는 예시입니다.
from transformers import Trainer, TrainingArguments, AutoModelForSequenceClassification, AutoTokenizer
# 모델과 토크나이저 불러오기
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# 훈련 및 평가 데이터셋 준비 (예시는 생략)
train_dataset = ...
eval_dataset = ...
# Trainer 객체 생성
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset
)
# 모델 훈련
trainer.train()
코드 설명
위의 코드에서는 다음 단계를 수행합니다:
AutoModelForSequenceClassification
을 사용하여 분류 작업을 위한 BERT 모델을 불러옵니다.AutoTokenizer
를 사용하여 BERT에 맞는 토크나이저도 불러옵니다.- 훈련 및 평가 데이터셋을 넣기 위해 예시로 빈 변수를 선언했습니다. 실제 데이터셋을 준비하여 할당해야 합니다.
Trainer
객체를 생성합니다. 이 객체에는 모델, 훈련 인자, 훈련 데이터셋 및 검증 데이터셋을 전달합니다.- 마지막으로
trainer.train()
을 호출하여 모델 훈련을 시작합니다.
TrainingArguments에서 자주 사용하는 설정
TrainingArguments의 인자는 다양하지만, 자주 사용하는 몇 가지 설정을 살펴보겠습니다:
1. Gradient Accumulation
모델 훈련 중 메모리 제한 때문에 큰 배치를 훈련하기 어려울 경우, gradient accumulation을 사용할 수 있습니다. 예를 들어, 배치 크기를 32로 설정하고 4번의 배치에 대해 기울기를 축적하여 학습하면 총 배치 크기는 128이 됩니다.
training_args = TrainingArguments(
per_device_train_batch_size=8,
gradient_accumulation_steps=4, # 4개의 배치에 대해 기울기 축적
)
2. Mixed Precision Training
GPU가 Mixed Precision Training을 지원하는 경우, 훈련을 가속화하고 메모리 사용을 줄일 수 있습니다. 이 경우 fp16=True
설정을 추가하여 사용할 수 있습니다.
training_args = TrainingArguments(
fp16=True, # Mixed precision training
)
3. Early Stopping
훈련 도중 성능 향상이 없을 경우 조기 종료를 설정할 수 있습니다. 이를 통해 불필요한 훈련을 방지할 수 있습니다. EarlyStoppingCallback
와 결합해야 합니다.
from transformers import EarlyStoppingCallback
trainer = Trainer(
...
callbacks=[EarlyStoppingCallback(early_stopping_patience=3)], # 3 에폭 동안 향상이 없으면 종료
)
결론
이 강좌에서는 허깅페이스의 트랜스포머 라이브러리에서 TrainingArguments
클래스를 설정하는 방법에 대해 자세히 설명했습니다. 다양한 하이퍼파라미터를 통해 모델 훈련을 최적화할 수 있습니다.
딥러닝 모델을 더욱 효과적으로 훈련하기 위해서는 TrainingArguments
의 다양한 매개변수를 잘 활용하는 것이 중요합니다. 실험을 통해 최적의 하이퍼파라미터를 찾고, 모델의 성능을 지속적으로 개선해 나가길 바랍니다.
추가적으로 궁금한 점이나 더 알고 싶은 점이 있다면 댓글로 남겨주시면 성심껏 답변해드리겠습니다.