[이론] Hugging Face Trainer.TrainingArguments

Topic. Trainer 의 TrainingArguments 주요 파라미터를 설명합니다.


* TrainingArguments

parameter type /
optional /
default
explain
cutoff_len   모델에 들어갈 시퀀스의 최대 길이를 설정합니다.
Optimizer   AdamW 를 주로 사용
lr_scheduler   훈련중 learning rate를 조절해주는 옵션입니다.
constant(고정), linear(선형), cosine(코사인형)
per_device_train_batch_size int
선택 사항
8
훈련을 위한 GPU/TPU 코어/CPU당 배치 크기입니다.
per_device_eval_batch_size int
선택 사항
8
평가를 위한 GPU/TPU 코어/CPU당 배치 크기입니다.
output_dir string
필수값
모델 예측 결과와 체크포인트가 저장될 출력 디렉토리입니다.
learning_rate float
선택 사항
5e- 5
AdamW 최적화 알고리즘의 초기 학습률입니다.
gradient_accumulation_steps int
선택사항
1
백워드/업데이트 패스를 수행하기 전에 그래디언트를 누적할 업데이트 단계 수입니다.
warmup_steps int
선택사항
0
천천히 learning rate 를 올려 학습의 불안정성을 방지해줍니다.
learning rate 을 1e-2 로 설정했다면, LR 초깃값보다 낮게 시작하여 100stemp 에 걸쳐 LR 을 1e-2 로 올립니다.
warmup_ratio int
선택사항
0
0에서 learning_rate까지 선형 워밍업에 사용되는 총 학습 단계 비율입니다.
num_train_epochs float
선택사항
3.0
수행할 총 학습 epoch 수입니다(정수가 아닌 경우 마지막 epoch의 decimal 부분을 백분율로 수행한 후 학습을 중단합니다).
resume_from_checkpoint str
선택사항
모델에 대한 유효한 체크포인트가 있는 폴더 경로입니다. 이 인수는 Trainer에서 직접 사용하지 않으며, 학습/평가 스크립트에서 사용합니다.
fp16 bool
선택사항
False
32비트 학습 대신 fp16 16비트 (혼합) 정밀 학습을 사용할지 여부입니다.
bf16 bool
선택사항
False
32비트 학습 대신 bf16 16비트 (혼합) 정밀 학습을 사용할지 여부입니다. Ampere 이상의 NVIDIA 아키텍처가 필요합니다. 이것은 실험적인 API이며 변경될 수 있습니다.
evaluation_strategy str 또는
IntervalStrategy /
선택사항 /
"no"
학습 중 평가 전략을 나타냅니다. 가능한 값은 다음과 같습니다:
  • "no": 학습 중 평가를 수행하지 않습니다.
  • "steps": eval_steps마다 평가를 수행하고 로그에 기록합니다.
  • "epoch": 각 epoch 끝에 평가를 수행합니다.
이전에 언급했던 것처럼 해당 인수는 평가 실행 여부와 시기를 결정하는 중요한 역할을 합니다. 어떤 학습 프로세스에 적합한 전략인지 면밀히 고려해야 합니다.
혹시 "no" 이외의 전략을 선택했다면, "eval_steps" 또는 "per_device_eval_batch_size"와 같은 추가 인수를 사용하여 평가와 관련된 세부 설정을 조정할 수 있습니다.
eval_steps int
선택사항
evaluation_strategy가 "steps"로 설정된 경우 두 평가 사이의 업데이트 단계 수입니다. 설정하지 않은 경우 logging_steps와 동일한 값으로 설정됩니다.
logging_strategy str 또는
IntervalStrategy /
선택사항 /
"steps"
학습 중 로깅 전략을 나타냅니다. 가능한 값은 다음과 같습니다:
  • "no": 학습 중 로깅을 수행하지 않습니다.
  • "epoch": 각 epoch 끝에 로깅을 수행합니다.
  • "steps": logging_steps마다 로깅을 수행합니다.
이 인수는 학습 과정 중에 중요한 지표를 추적하고 모니터링하는 데 사용됩니다. 학습 진행 상황을 파악하는 데 도움이 되며 특정 매개변수 설정이나 학습 방법에 대한 효과를 평가할 수 있습니다.
"no" 이외의 전략을 선택했다면, "logging_steps"와 같은 추가 인수를 사용하여 로깅 간격 및 기록할 지표 등을 조정할 수 있습니다.
logging_steps int
선택사항
500
logging_strategy가 "steps"로 설정된 경우 두 로그 사이의 업데이트 단계 수입니다.
save_safetensors bool
선택사항
True
간단히 말하면, 이 옵션을 True로 설정하면 모델의 상태 사전 파일(state dicts) 저장 및 로딩에 더 안전하고 빠르게 동작하는 safetensors 형식을 사용합니다.

<safetensors형식의 장점>
  • 안전성: 파일 손상에 강합니다. 손상이 일부분만 발생해도 나머지는 복구 가능합니다.
  • 속도: 큰 모델을 저장하고 로딩하는 속도가 빨라질 수 있습니다.
  • 유연성: 다른 장치(CPU, GPU, TPU)에서도 저장된 모델을 로딩 가능합니다.
기본적으로 이 옵션은 True로 유지하는 것이 좋습니다.
save_strategy str 또는
IntervalStrategy /
선택사항 /
"steps"
학습 중 체크포인트 저장 전략을 나타냅니다. 가능한 값은 다음과 같습니다:
  • "no": 학습 중 체크포인트를 저장하지 않습니다.
  • "epoch": 각 epoch 끝에 체크포인트를 저장합니다.
  • "steps": save_steps마다 체크포인트를 저장합니다.
이 인수는 학습 과정에서 모델 상태를 정기적으로 저장하여 이전 상태로 돌아가거나 학습을 이어할 수 있게 해줍니다. 학습이 오래 걸리거나 오류가 발생할 경우 특히 유용합니다.
"no" 이외의 전략을 선택했다면, "save_steps"와 같은 추가 인수를 사용하여 저장 간격 및 저장할 체크포인트 수 등을 조정할 수 있습니다.
save_steps int
선택사항
500
save_strategy가 "steps"로 설정된 경우 두 체크포인트 저장 사이의 업데이트 단계 수입니다.
save_total_limit int
선택사항
값이 전달되면 총 체크포인트 수를 제한합니다. output_dir에서 이전 체크포인트를 삭제합니다.
hub_model_id
str
선택사항
로컬 output_dir과 동기화할 리포지토리 이름입니다.
다음과 같은 형식으로 지정할 수 있습니다:
  • 간단한 모델 ID: 이 경우 모델은 사용자의 네임스페이스에 푸시됩니다.
  • 전체 리포지토리 이름: 예를 들어 "user_name/model"과 같이 사용하여 조직 구성원인 경우 조직 네임스페이스에 푸시할 수 있습니다.
  • "user_name/output_dir_name": "output_dir_name"이 output_dir의 이름인 경우 기본값으로 설정됩니다.
hub_model_id는 Hugging Face Hub에서 모델을 관리하고 공유하는 데 중요한 역할을 합니다. 로컬에서 학습한 모델을 Hub에 푸시하여 다른 사람들과 공유하거나 클라우드에서 모델을 학습 및 추론하는 데 사용할 수 있습니다.
push_to_hub bool
선택사항
False
모델을 저장할 때마다 모델을 Hub에 푸시할지 여부입니다. 이 기능이 활성화되면 output_dir이 git 디렉토리로 시작하여 hub_model_id에 의해 결정된 리포와 동기화되고 콘텐츠는 저장이 트리거될 때마다 푸시됩니다(save_strategy에 따라 다름). save_model() 호출도 푸시를 트리거합니다.
report_to
str 또는 List[str] /
선택사항 /
"all"
결과 및 로그를 보고할 통합 목록입니다. 지원되는 플랫폼은 "azure_ml", "comet_ml", "mlflow", "tensorboard", "wandb"입니다. 설치된 모든 통합에 보고하려면 "all"을 사용하고 통합하지 않으려면 "none"을 사용합니다.
ignore_data_skip bool
선택사항
False
학습을 재개할 때 이전 학습과 동일한 단계에서 데이터 로딩을 얻기 위해 epoch 및 batch를 건너뛸지 여부입니다. True로 설정하면 학습이 더 빠르게 시작되지만 건너뛰는 단계 시간이 길어 예상 결과와 일치하지 않을 수 있습니다.
metric_for_best_model str
선택사항
load_best_model_at_end와 함께 사용하여 두 모델을 비교하기 위해 사용할 지표를 지정합니다. 평가에서 반환되는 지표 이름(eval_ 접두사 포함/미포함)이어야 합니다. load_best_model_at_end=True이고 지정하지 않으면 기본값으로 "loss"를 사용하여 평가 손실을 사용합니다.
load_best_model_at_end bool
선택사항
False
학습 종료 시 학습 중 찾은 최고 모델을 로딩할지 여부입니다.

* 설정 팁

RTX 4090에서 LLM 모델을 훈련할 때 TrainingArguments의 최적값은 다음과 같습니다.

  • learning_rate: 1e-4~1e-5
  • batch_size: 32~128
  • num_train_epochs: 10~30
  • warmup_steps: 0.1~0.2 * num_train_epochs
  • max_grad_norm: 1.0~2.0
  • gradient_accumulation_steps: 1~8

 

이러한 값은 일반적으로 큰 모델의 경우 더 작은 값을, 작은 모델의 경우 더 큰 값을 사용합니다. 또한, 데이터의 양과 복잡성에 따라 값을 조정해야 할 수도 있습니다.

 

좀 더 구체적으로 설명하면 다음과 같습니다.

  • learning_rate: 학습률은 모델의 학습 속도를 결정합니다. 일반적으로 더 작은 학습률을 사용하면 모델이 더 안정적으로 학습됩니다. 그러나 학습률이 너무 작으면 모델이 충분히 학습되지 않을 수 있습니다.
  • batch_size: 배치 크기는 모델이 한 번에 처리하는 데이터의 양을 결정합니다. 일반적으로 더 큰 배치 크기를 사용하면 학습 속도가 빨라집니다. 그러나 배치 크기가 너무 크면 메모리 부족 문제가 발생할 수 있습니다.
  • num_train_epochs: 에포크는 전체 데이터 세트를 한 번 학습하는 과정을 의미합니다. 일반적으로 더 많은 에포크를 사용하면 모델이 더 정확해집니다. 그러나 에포크가 너무 많으면 학습 시간이 너무 오래 걸릴 수 있습니다.
  • warmup_steps: 워밍업 단계는 학습률을 점진적으로 증가시키는 과정입니다. 워밍업 단계를 사용하면 모델이 안정적으로 학습되도록 도와줍니다.
  • max_grad_norm: 최대 그래디언트 정규화는 그래디언트의 크기를 제한하는 것입니다. 그래디언트의 크기가 너무 크면 모델이 불안정해질 수 있습니다.
  • gradient_accumulation_steps: 그래디언트 축적 단계는 여러 개의 배치의 그래디언트를 한 번에 계산하는 것입니다. 그래디언트 축적을 사용하면 학습 속도를 높일 수 있습니다.

* LLM 모델을 훈련할 때는 다음과 같은 사항에 유의해야 합니다.

  • 데이터의 양과 복잡성을 고려해야 합니다. 데이터의 양이 많고 복잡할수록 더 많은 훈련 시간이 필요합니다.
  • 하드웨어의 성능을 고려해야 합니다. RTX 4090은 강력한 그래픽 카드이지만, 그래픽 카드의 성능에 따라 훈련 시간이 달라질 수 있습니다.
  • 모델의 크기를 고려해야 합니다. 모델이 클수록 더 많은 훈련 시간이 필요합니다.

 

LLM 모델을 훈련할 때는 여러 가지 값을 시도하여 최상의 성능을 얻을 수 있는 값을 찾는 것이 좋습니다.


* per_device_train_batch_size (micro_batch_size)

per_device_train_batch_size 는 모델이 한 번에 처리하는 데이터의 양을 결정합니다. 일반적으로 더 큰값을 사용하면 학습 속도가 빨라집니다. 그러나 per_device_train_batch_size 가 너무 크면 메모리 부족 문제가 발생할 수 있습니다.

RTX 4090은 강력한 그래픽 카드이므로 per_device_train_batch_size 를 32~128 정도 주는 것이 좋습니다.

그래픽 카드의 성능이 부족한 경우 per_device_train_batch_size 를 줄여야 할 수도 있습니다.

모델의 크기에 따라 per_device_train_batch_size 를 조정해야 할 수도 있습니다.

큰 모델의 경우 더 작은 per_device_train_batch_size 를 사용하는 것이 좋습니다.


* per_device_train_batch_size 를 조정할 때는 다음과 같은 사항을 고려해야 합니다.

  • 하드웨어의 성능을 고려해야 합니다.
  • 모델의 크기를 고려해야 합니다.
  • 데이터의 양과 복잡성을 고려해야 합니다.

 

per_device_train_batch_size 를 조정할 때는 여러 가지 값을 시도하여 최상의 성능을 얻을 수 있는 값을 찾는 것이 좋습니다.

다음은 per_device_train_batch_size 를 조정하는 데 도움이 되는 몇 가지 지침입니다.

  • 하드웨어의 성능이 부족한 경우 per_device_train_batch_size 를 줄입니다.
  • 모델의 크기가 큰 경우 per_device_train_batch_size 를 줄입니다.
  • 데이터의 양과 복잡성이 많고 복잡한 경우 per_device_train_batch_size 를 늘립니다.

 

예를 들어, RTX 4090에서 LLM 모델을 훈련하는 경우 다음과 같은 값을 시도해 볼 수 있습니다.

  • per_device_train_batch_size = 32
  • per_device_train_batch_size = 64
  • per_device_train_batch_size = 128

이 값들을 시도하여 최상의 성능을 얻을 수 있는 값을 찾아봅시다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유