Accelerator로 모델 평가하기

PyTorch로 AI 모델 효율적으로 학습시키기

Dennis Lee

Data Engineer, Amazon

모델을 평가 모드로 전환하는 이유

  • 훈련 모드
    • 드롭아웃: 뉴런을 0으로 설정
    • 배치 정규화

드롭아웃과 배치 정규화 입력층, 은닉층, 출력층으로 구성된 신경망 다이어그램. 과적합 방지를 위해 은닉층에 드롭아웃이 적용되고, 활성화 전 각 층의 출력을 정규화하는 배치 정규화가 사용됨.

PyTorch로 AI 모델 효율적으로 학습시키기

모델을 평가 모드로 전환하는 이유

  • 훈련 모드
    • 드롭아웃: 뉴런을 0으로 설정
    • 배치 정규화
  • 평가 모드에서는 이 레이어들이 비활성화됨
  • model.eval()로 평가 모드 활성화

드롭아웃과 배치 정규화 입력층, 은닉층, 출력층으로 구성된 신경망 다이어그램. 과적합 방지를 위해 은닉층에 드롭아웃이 적용되고, 활성화 전 각 층의 출력을 정규화하는 배치 정규화가 사용됨.

PyTorch로 AI 모델 효율적으로 학습시키기

torch.no_grad()로 그래디언트 비활성화하기

  • 훈련에는 그래디언트 계산이 필요함
  • torch.no_grad()로 그래디언트 비활성화
  • model.eval()torch.no_grad() 함께 사용:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

역전파에서의 그래디언트 계산 역전파 과정을 나타낸 신경망 다이어그램. 출력층에서 은닉층으로 오차가 역방향으로 전파되며, 경사 하강법을 사용해 가중치를 업데이트하기 위해 각 층에서 그래디언트가 계산됨.

PyTorch로 AI 모델 효율적으로 학습시키기

검증 데이터셋 준비하기

  • MRPC 데이터셋의 검증 분할 로드
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • 검증 데이터셋 토크나이즈
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
PyTorch로 AI 모델 효율적으로 학습시키기

에포크의 구조: 훈련 및 평가 루프

  • 각 에포크마다 훈련 및 검증 데이터셋 반복
  • 먼저 훈련 모드로 모델 실행
  • 이후 평가 모드로 실행하고 지표 기록
for epoch in range(num_epochs):

model.train() for step, batch in enumerate(train_dataloader): # Perform training step
model.eval() for step, batch in enumerate(eval_dataloader): # Perform evaluation step
# Log evaluation metrics
PyTorch로 AI 모델 효율적으로 학습시키기

평가 루프 내부

metric = evaluate.load("glue", "mrpc")
model.eval()
for step, batch in enumerate(eval_dataloader):

with torch.no_grad(): outputs = model(**batch) predictions = outputs.logits.argmax(dim=-1)
predictions, references = accelerator.gather_for_metrics((predictions, batch["labels"]))
metric.add_batch(predictions=predictions, references=references)
eval_metric = metric.compute() print(f"Eval metrics: \n{eval_metric}")
Eval metrics: 
{'accuracy': 0.81, 'f1': 0.77}
PyTorch로 AI 모델 효율적으로 학습시키기

평가 후 지표 기록하기

  • 추적 도구: 지표를 기록하는 노트북; 예: TensorBoard, MLflow
  • log_with: 모든 실험 추적 도구 사용
  • .init_trackers(): 추적 도구 초기화
  • .log(): accuracy, f1, epoch 추적
  • .end_training(): 추적 종료
accelerator = Accelerator(project_dir=".",
                          log_with="all")

accelerator.init_trackers("my_project")
for epoch in range(num_epochs): # Training loop is here # Evaluation loop is here accelerator.log({
"accuracy": eval_metric["accuracy"], "f1": eval_metric["f1"],
}, step=epoch)
accelerator.end_training()
PyTorch로 AI 모델 효율적으로 학습시키기

연습해 봅시다!

PyTorch로 AI 모델 효율적으로 학습시키기

Preparing Video For Download...