Ch3. Fine-tuning a model with the Trainer API

1. Introduction

  • How to prepare a large dataset from the Hub

  • How to use the high-level Trainer API to fine-tuning a model

  • How to use a custom training loop

  • How to leverage the Accelerate library to easily run that custom training loop on any distributed setup

1.1. Fine-tuning이란?

Pre-trained 모델을 주어진 문제에 맞도록 튜닝 하는 작업을 의미한다.

2. Processing the data

이번 챕터에서는 MRPC(Microsoft Research Paraphrase Corpus) Dataset을 활용하여 학습을 진행해 보기로 한다.

2.1. Loading a dataset from the Hub

Hugging Face는 model, tokenizer 뿐만 아니라 dataset도 제공을 한다.

!pip install datasets
from datasets import load_dataset

raw_datasets = load_dataset("glue", "mrpc")
raw_datasets
  • dataset의 한 문장을 확인해보면

  • 이미 label이 숫자표기로 되어있는 것을 확인할 수 있다. 어떤 label 값을 가지고 있는지 확인해 보자

  • 위 내용은 두 문장을 넣고 equivalent 여부를 체크하는 것으로 보인다.

2.2. Preprocessing a dataset

  • tokenizer를 활용하여 convert 한다.

  • model에 넣을 때 sentence1과 2를 각각 넣는 것이 아니다. 두 문장을 한번에 token화하게 된다.

  • token_type_ids: 첫 문장과 두번째 문장의 구분을 나타내는 값

input_ids 값을 decode 하게 되면 아래와 같이 얻을 수 있다.

  • [CLS], [SEP] 같은 special token을 확인할 수 있다.

Dataset 객체를 생성하는 방법에 대해 알아보자. 우선 기본적인 방법으로 아래와 같이 정의할 수 있다.

하지만 위 방법은 dictionary 형태의 return이 불가능하다. 그래서 Dataset.map method를 사용하게 된다. 이 method는 dataset의 각 element들에게 적용된다. tokenize 함수를 아래와 같이 설정하고 dataset.map을 통해 모든 element를 tokenize할 수 있도록 한다.

위와 같이 input_ids ,attention_mask token_type_ids 이 추가된 것을 확인할 수 있다.

2.3. Dynamic padding

Dataset을 DataLoader에 담아 데이터를 꺼내어 사용하게 되는데 우리는 불필요한 패딩을 줄이기위해 각 batch별로 가장 큰 길이를 지정하여 padding을 생성하게 된다.

여기서는 DataCollatorWithPadding 함수를 사용해 padding을 만들어 본다.

  • 샘플 데이터를 추출하여 data_collator 에 넣어보면

size가 67로 가장 큰 size로 잡힌 것을 확인 할 수 있다.

3. Fine-tuning a model with the Trainer API

Transformer는 Trainer 클래스를 제공해 fine-tune 하기 쉽도록 하였다.

3.1. Training

  • 우선 Dataset과 tokenizer를 가져와서 Pre-processing을 거친다.

TrainingArguments 클래스를 가져와 생성해준다.

다음으로 모델 객체를 생성해 준다.

정말 너무 간단하게도 train method를 호출하는 것 만으로 학습이 진행된다.

3.2. Evaluation

  • 위 과정을 하나의 함수로 만들게 되면,

4. A full training

Trainer 클래스의 도움없이 학습을 진행하는 일련의 과정을 살펴보기로 한다.

우선 Dataset을 준비한다. 또 주어진 파라미터로 변환할 수 있도록 한다.

다음으로는 Dataloader를 정의한다.

Dataloader 검증하기

모델을 준비한다.

배치를 넣어 잘 동작하는지 확인한다.

Optimizer 와 learning rate scheduler 설정.

4.1. Training loop

학습을 위해 GPU를 연결

4.2. Evaluation loop

4. Accelerate ✔

Accelerate library를 활용하여 Multiple GPU에서 사용이 가능하다. 그와 관련된 소스를 보도록한다.

  • 기존 학습

  • Accelerate 학습

  • 사용시에는 Accelerate 설정 및 적용을 하여야 한다.

  • On jupyter Notebooks

Last updated

Was this helpful?