LLM/허깅 페이스(Hugging Face)

3-3. 허깅페이스를 이용한 모델 학습

Human-analog 2024. 11. 20. 07:18

 

3.4 모델 학습시키기

  모델을 학습시키기 위해서는 데이터 준비모델 설정이 중요한 단계예요. Hugging FaceTrainer API를 제공해서 학습 과정을 더 쉽게 진행할 수 있도록 도와줘요.


3.4.1 데이터 준비

모델을 학습시키기 위해 데이터를 먼저 준비해야 해요. Hugging Face의 datasets 라이브러리를 사용하면 다양한 데이터셋을 간단하게 불러와 사용할 수 있어요.

 

from datasets import load_dataset

# IMDB 감정 분석 데이터셋 불러오기
dataset = load_dataset("imdb")

# 훈련 및 평가 데이터셋으로 분리
train_dataset = dataset['train']
test_dataset = dataset['test']

print(train_dataset[0])

 

  이 코드는 IMDB 데이터셋을 불러와 훈련용 데이터평가용 데이터를 준비하는 과정이에요. 데이터셋을 쉽게 불러와 사용할 수 있어요.

  • 요약:
    datasets 라이브러리를 사용해 IMDB 데이터셋을 불러와 훈련 및 평가 데이터를 준비할 수 있어요.
  • 용어설명:
    • 데이터셋: 모델 학습과 평가를 위한 데이터 모음.

3.4.2 트레이너 API를 사용해 학습하기

  Hugging Face의 Trainer 클래스모델 학습더 쉽게 할 수 있도록 도와줘요. 데이터셋을 준비하고 모델을 설정한 후, 이 클래스를 통해 학습을 간편하게 진행할 수 있어요.

 

from transformers import BertForSequenceClassification, Trainer, TrainingArguments

# BERT 모델 설정 (이진 분류)
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)

# 학습 설정
training_args = TrainingArguments(
    output_dir='./results',          # 결과가 저장될 폴더
    num_train_epochs=3,              # 학습 반복 횟수
    per_device_train_batch_size=8,   # 배치 크기
    evaluation_strategy="epoch",     # 평가 전략
)

# 트레이너 설정
trainer = Trainer(
    model=model,                      # 학습할 모델
    args=training_args,               # 학습 설정
    train_dataset=train_dataset,      # 훈련 데이터
    eval_dataset=test_dataset         # 평가 데이터
)

# 학습 시작
trainer.train()

 

  이 코드는 BERT 모델을 사용해 IMDB 감정 분석 데이터셋으로 학습을 수행하는 예시예요. Trainer API를 사용하면 학습을 간단하게 설정하고 시작할 수 있어요.

  • 요약:
    Trainer API를 사용해 모델을 설정하고, 데이터를 기반으로 간단하게 학습을 시작할 수 있어요.
  • 용어설명:
    • Trainer API: Hugging Face에서 모델 학습을 간편하게 할 수 있도록 제공하는 클래스.

3.4.3 트레이너 API를 사용하지 않고 학습하기(PyTorch)

  만약 Trainer API 대신 기본적인 PyTorch 방식으로 학습을 하고 싶다면, 아래와 같은 코드로 직접 학습 루프를 구현할 수 있어요. 이 방법은 더 유연한 제어가 가능하지만, 직접 학습 루프를 구성해야 해요.

 

from torch.utils.data import DataLoader
from transformers import AdamW

# 데이터로더 설정
train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)

# 옵티마이저 설정
optimizer = AdamW(model.parameters(), lr=5e-5)

# 학습 루프
for epoch in range(3):  # 3 에포크 동안 학습
    model.train()
    for batch in train_loader:
        optimizer.zero_grad()
        inputs = {key: value.to(model.device) for key, value in batch.items()}
        outputs = model(**inputs)
        loss = outputs.loss
        loss.backward()
        optimizer.step()

 

  이 코드는 PyTorch 방식으로 직접 학습 루프를 구현한 예시예요. 이 방법은 더 유연한 제어가 가능하지만, Trainer API를 사용하면 간편하게 학습할 수 있어요.

  • 요약:
    PyTorch 방식으로 직접 학습 루프를 구현하여 학습을 유연하게 제어할 수 있어요.
  • 용어설명:
    • PyTorch 학습 루프: 모델 학습을 위해 직접 학습 과정을 제어하는 방식.

정리

 

  1. 데이터 준비에서는 datasets 라이브러리를 사용해 IMDB 데이터셋을 불러와 훈련과 평가 데이터를 준비할 수 있어요.
  2. Trainer API를 사용하면 BERT 모델을 쉽게 학습시킬 수 있고, 학습 설정과 평가를 간편하게 할 수 있어요.
  3. PyTorch 방식으로 직접 학습 루프를 구현하면 더 유연한 학습 제어가 가능하지만, Trainer API는 더 간편한 학습 방식을 제공해요.