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" 이외의 전략을 선택했다면, "eval_steps" 또는 "per_device_eval_batch_size"와 같은 추가 인수를 사용하여 평가와 관련된 세부 설정을 조정할 수 있습니다. |
eval_steps | int 선택사항 |
evaluation_strategy가 "steps"로 설정된 경우 두 평가 사이의 업데이트 단계 수입니다. 설정하지 않은 경우 logging_steps와 동일한 값으로 설정됩니다. |
logging_strategy | str 또는 IntervalStrategy / 선택사항 / "steps" |
학습 중 로깅 전략을 나타냅니다. 가능한 값은 다음과 같습니다:
"no" 이외의 전략을 선택했다면, "logging_steps"와 같은 추가 인수를 사용하여 로깅 간격 및 기록할 지표 등을 조정할 수 있습니다. |
logging_steps | int 선택사항 500 |
logging_strategy가 "steps"로 설정된 경우 두 로그 사이의 업데이트 단계 수입니다. |
save_safetensors | bool 선택사항 True |
간단히 말하면, 이 옵션을 True로 설정하면 모델의 상태 사전 파일(state dicts) 저장 및 로딩에 더 안전하고 빠르게 동작하는 safetensors 형식을 사용합니다. <safetensors형식의 장점>
|
save_strategy | str 또는 IntervalStrategy / 선택사항 / "steps" |
학습 중 체크포인트 저장 전략을 나타냅니다. 가능한 값은 다음과 같습니다:
"no" 이외의 전략을 선택했다면, "save_steps"와 같은 추가 인수를 사용하여 저장 간격 및 저장할 체크포인트 수 등을 조정할 수 있습니다. |
save_steps | int 선택사항 500 |
save_strategy가 "steps"로 설정된 경우 두 체크포인트 저장 사이의 업데이트 단계 수입니다. |
save_total_limit | int 선택사항 |
값이 전달되면 총 체크포인트 수를 제한합니다. output_dir에서 이전 체크포인트를 삭제합니다. |
hub_model_id |
str 선택사항 |
로컬 output_dir과 동기화할 리포지토리 이름입니다. 다음과 같은 형식으로 지정할 수 있습니다:
|
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
이 값들을 시도하여 최상의 성능을 얻을 수 있는 값을 찾아봅시다.
'A.I.(인공지능) & M.L.(머신러닝) > 딥러닝' 카테고리의 다른 글
[실습] LLaMA-2 Model, LoRA Fine-Tuning (0) | 2023.12.12 |
---|