허깅페이스 트렌스포머 활용강좌, TrainingArguments 설정

딥러닝과 자연어 처리(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의 다양한 매개변수를 잘 활용하는 것이 중요합니다. 실험을 통해 최적의 하이퍼파라미터를 찾고, 모델의 성능을 지속적으로 개선해 나가길 바랍니다.

추가적으로 궁금한 점이나 더 알고 싶은 점이 있다면 댓글로 남겨주시면 성심껏 답변해드리겠습니다.

© 2023 허깅페이스 트랜스포머 활용강좌