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 datasetsfrom datasets import load_dataset
raw_datasets = load_dataset("glue", "mrpc")
raw_datasetsdataset의 한 문장을 확인해보면
이미 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
관련소스 Link
Last updated
Was this helpful?