728x90
반응형
3.5 다중 GPU를 활용한 Llama3.1-8B-instruct 파인 튜닝
3.5.1 런팟 환경 설정
- H100XM x 41
- Pytorch 2.2.0
- Container Disk 400GB
- Volume Disk 400GB
git clone https://github.com/wikibook/llm-finetuning
cd llm-finetuning/chapter3/3.5
pip install -r requirements.txt
3.5.2 Llama 3.1 학습 파라미터 설정
- model_name : 사용할 모델 ID, 허깅페이스에 등록된 모델 이름
- dataset_path : 학습에 사용할 데이터셋이 위치한 경로
- max_seq_length : 모델이 처리할 수 있는 최대 시퀀스 길이 설정
- output_dir : 학습과정에서 생성되는 학습된모델, 중간중간에 저장되는 체크포인트 파일들을 저장하는 경로
- report_to : 학습과정에서 발생하는 로그와 성능 지표를 기록할 플랫폼 지정
- wandb, tensorboard, mlflow, azure_ml 등 - learning_rate : 신경망의 가중치를 얼마나 크게 조정할지 결정하는 중요한 하이퍼파라미터
- lr_scheduler_type : 학습 과정에서 학습률의 변화를 관리 (constant, linear, cosine, cosine_with_restarts 등)
- num_train_epochs : 전체 데이터셋을 한 번 학습하는 주기
- per_device_train_batch_size : 각 GPU 또는 CPU에서 한 번에 처리할 학습 데이터의 개수
- per_device_eval_batch_size : 평가 시, 각 GPU 또는 CPU에서 처리할 데이터의 개수
- gradient_accumulation_steps : 4 → 모델이 4번의 순전파와 역전파를 수행한 후, 한 번씩 가중치를 업데이트
- 그레이디언트 누적 기법을 사용해 가상의 더 큰 배치 크기의 효과를 얻는 방법
- GPU 메모리 사용량을 줄이면서도 큰배치 크기의 효과를 얻을 수 있음 → 메모리 효율성이 높음 - optim : 모델 학습에 사용할 최적화 알고리즘을 지정
- adamw_torch_fused 사용 → 파이토치에서 제공하는 최적화된 AdamW 구현 - logging_steps : 로그를 기록할 주기를 스텝 단위로 설정
- save_strategy : 모델의 체크포인트를 저장하는 전략을 설정
- epoch : 각 에폭이 끝날때마다 모델을 저장
- steps : 특정 스텝마다 모델을 저장
- no : 저장하지 않음 - weight_decay : 과적합을 방지하고 모델의 일반화 성능을 향상시키는데 사용
- max_grad_norm : 그레디언트 킬리핑(gradient clipping)의 임계값 지정
- 그레디언트 킬리핑 : 학습 과정에서 그레이디언트 크기가 지나치게 커지는 것을 방지하는 기법 - warmup_ratio : 전체 학습 스텝에서 웜업 괒엉의 비율 지정
- 웜업 : 학습 초기에 학습률을 매우 작은 값에서 시작해 점진적으로 목표 학습률까지 증가시키는 방법
→ 학습 초기의 급격한 파라미터 변화를 방지, 불안정성을 줄여서 안정적으로 학습을 시작할 수 있게 함 - bf16 : bfloat16(Brain Floating Point) 정밀도를 사용하도록 활성화
- tf32 : NVIDIA의 TensorFloat-32(TF32) 형식을 활성화
- gradient_checkpointing : 대규모 신경망 모델 학습 시, 메모리 사용을 최적화하는 고급 기술
- fsdp : Fully Sharded Data Parallel, 각 GPU가 전체 모델의 일부만을 저장하고 필요할 때 다른 GPU와 통신해서 데이터를 주고받는 방식으로 작동
- full_shard : 모든 파라미터를 분산
- auto_wrap : 자동으로 모델을 FSDP로 래핑
- full_shard auto_wrap : Fully Sharded Data Parallel(FSDP)을 활성화서 모델을 여러 GPU에 분산시켜 메모리 효율을 높이는기술 적용 - fsdp_config :
- backward_prefetch : 'backward_pre' 설정은 FSDP에서 역전파 과정을 최적화 하는 중요한 기능, 역전파 계산이 시작하기 직전에 필요한모델 파라미터를미리 가져오는 전략을 활성화
- forward_prefetch : false로 설정하면 순전파 과정 중, 추가적인 데이터 프리페치(미리 가져오기)를 비활성화함
- use_orig_prams : false로 설정하면 원본 파라미터 대신 분할된 파라미터를 직접 사용해서 메모리 효율성을 극대화
3.5.3 데이터셋 준비
https://huggingface.co/datasets/beomi/KoAlpaca-v1.1a
3.5.4 Llama 3.1 모델 파라미터 설정
- dataset_path : 데이터셋 파일의 경로, 기본값 None → 코드 유연성과 재사용성 높이기 위함
- model_name : 사용할 모델의 이름, 기본값 None → 코드 유연성과 재사용성 높이기 위함
- max_seq_length : 모델이 처리할 수 있는 입력 텍스트의 최대 길이
3.5.5 Llama 3.1 모델 학습 코드 살펴보기
- training_args.main_process_first() : 분산 학습 환경에서 특정 작업을 조율하는데 사용되는 기능
- main_process_first() : 여러 프로세스 중, 메인 프로세스를 지정하여 메인 프로세스가 특정작업(이 경우레는 샘플 로깅)을 먼저 수행하고 메인 프로세스가 작업을 마칠 때까지 다른프로세스들을 대기시킨다. 작업이 끝나면 모든 프로세스가 다시 동기화되어 다음 작업을 계속함 - full_fine_tuning_config,yaml : 주어진 모델 이름의 모델을 불러오고 필요한 파라미터들을 설정
- gradient_checkpointing : 모델의 중간 활성화 값들을 모두 저장하지 않고 필요할 때마다 다시 계산해서 메모리 사용량을 크게 줄일 수 있음. True로 설정돼 있을 때만 이 기능이 활성화 됨
- model.gradient_checkpointing_enable() : 실제로 모델에이 기능을 적용하는 역할을 한 - SFTTrainer : SFT는 Supervised Fine-Tuning(지도 학습 방식의 파인튜닝), 대규모 언어 모델을 특정 작업이나 도메인에 맞게 파인튜닝하는 데 사용되는 도구
- trainer.train() : 실제 학습을 시작하는 부분
- training_args.resume_from_checkpoint : 이전에 중단된 학습을 이어서 진행할 수 있음
- set_seed() : 시드 설정으로 재현성 보장
- training_function() : 실제 학습 시작
3.5.6 Llama 3.1 모델 학습 실행
- 터미널 학습 명령
- ACCELERATE_USE_FSDP=1 : 허깅페이스의 Accelerate 라이브러리에서 FSDP(Fully Sharded Data Parallel)를 사용하겠다는 명령어(FSDP는 대규모 모델을 여러 GPU에 효율적으로 분산시키는 기술)
- FSDP_CPU_RAM_EFFICIENT_LOADING=1 : FSDP를 사용할 때 CPU RAM을 효율적으로 사용해서 모델을 로딩하도록 설정
- torchrun --nproc_per_node=4 : torchrun은 Pytorch의 분산 학습을 위한 실행 도구. 각 노드(컴퓨터)에서 4개의 프로세스를 실행하라는 의미 → 일반적으로 4개의GPU를 사용한다는 뜻
- ./1_train_full_fine_tuning.py : 실행할 파이썬 스크립트의 경로
- --config full_fine_tuning_config.yaml : 파인튜닝에 사용할 설정 파일(.yaml)을 지정
3.5.7 Wandb 설정과 사용
- train/loss : 학습 과정에서 손실 함수 값. 감소하는 추세 → 성능이 향상
- train/grad_norm : 값이 안정적으로 유지되면 학습이 안정적으로 진행되는
- train/global_step : 전체 학습 과정 동안의 스텝 수
- train/epoch : 에폭 수. 에폭은 전체 데이터셋을 한 번 학습하는 주기
- train/learning_rate : 학습률
3.5.8 학습한 Llama 3.1 모델 테스트
3.5.9 생성된 텍스트 데이터 OpenAI로 평가하기
3.5.10 채점 점수 구하기
728x90
반응형
'프로그래밍 > LLM' 카테고리의 다른 글
[Day12] 한 권으로 LLM 온라인 스터디 1기 - 효율적인 파라미터 튜닝 (LoRA 2) (0) | 2025.01.26 |
---|---|
[Day11] 한 권으로 LLM 온라인 스터디 1기 - 효율적인 파라미터 튜닝 (LoRA 1) (0) | 2025.01.26 |
[Day9] 한 권으로 LLM 온라인 스터디 1기 - 단일 GPU Gemma 파인튜닝 3 (0) | 2025.01.25 |
[Day8] 한 권으로 LLM 온라인 스터디 1기 - 단일 GPU Gemma 파인튜닝 2 (0) | 2025.01.25 |
[Day7] 한 권으로 LLM 온라인 스터디 1기 - 단일 GPU Gemma 파인튜닝 1 (0) | 2025.01.25 |