728x90
허깅페이스와 LoRA를 사용하여 단일 Amazon SageMaker GPU에서 대규모 언어 모델(LLM) 훈련하기 : aws 기술 블로그
- 파운데이션 모델 (foundation model) : 대규모 데이터셋과 여러 작업을 통해 훈련된 대규모 모델은 훈련되지 않은 특정 작업에도 일반화 성능이 높게 나타나는 모델.
- 파인 튜닝(Fine-Tunning) : 특정 도메인이나 작업에 대한 대규모 모델의 성능을 개선하기 위해 더 작은 작업별 데이터 셋으로 모델을 추가로 훈련하는 것.
- 단점
- LLM의 정확도를 성공적으로 개선, 원본 모델의 모든 가중치 수정 필요 → 비용 부담
- 원본 모델과 동일한 크기의 모델을 생성 → 저장소 용량 부담
- 요약
- 파인 튜닝 데이터셋 크기가 훨씬 작기 때문에 사전 훈련 보다 빠르지만 여전히 상당한 컴퓨팅 성능과 메모리를 필요로 한다.
허깅페이스의 시도
- git : https://github.com/huggingface/notebooks/tree/main/sagemaker/24_train_bloom_peft_lora
- 효율적인 파라미터 파인 튜닝(PEFT; Parameter-Efficient Fine-Tuning) 라이브러리 도입.
- 기존 모델 가중치를 동결하고 훨씬 작은 추가 파라미터 셋만 훈련하여 모델 레이어를 교체 혹은 확장 가능.
파인 튜닝 시에 필요한 컴퓨팅 및 메모리 요구사항 축소 방법
- LoRA(Low-Rank Adaptation)
- 양자화(Quantization)
LoRA(Low-Rank Adaptation)
- 예측 성능의 손실 없이 신규 작업에 맞게 파인 튜닝하는데 필요한 모델 파라미터 수와 컴퓨팅을 크게 줄여주는 기법.
- 더 적은 순위 분해 가중치 행렬을 신규 작업에 맞게 최적화 한 다음, 조정된 가중치를 원래 모델에 다시 합산.
⇒ 가중치 gradient가 적다 == 파인 튜닝 시 컴퓨팅 및 GPU 메모리를 덜 사용한다.
- 이점
- LLM이 가장 중요한 입력 및 출력 토큰에 집중하고, 중복되거나 덜 중요한 토큰은 무시할 수 있다는 직관적인 이점이 존재.
양자화
- bitsandbytes 허깅페이스 통합 LLM.int8() 메서드를 사용하여 고정된 BloomZ 모델 파라미털르 정량화 하거나 가중치 및 바이어스 값을 float16에서 int8로 반올림하여 정밀도를 낮출 수 있다.
- 양자롸를 진행하면 BloomZ에 필요한 메모리가 약 4배 감소하므로 예측 성능의 큰 손실 없이 A10 GPU 인스턴에 모델을 탑재할 수 있다.
- 메모리 요구사항을 줄이고 추론 속도를 향상시킨다.
참고 링크 : https://huggingface.co/blog/hf-bitsandbytes-integration
LoRA 적용 예시
def create_peft_config(model):
from peft import (
get_peft_model,
LoraConfig,
TaskType,
prepare_model_for_int8_training,
)
peft_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
inference_mode=False,
r=8, # Lora attention dimension.
lora_alpha=32, # the alpha parameter for Lora scaling.
lora_dropout=0.05, # the dropout probability for Lora layers.
target_modules=["query_key_value"],
)
# prepare int-8 model for training
model = prepare_model_for_int8_training(model)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
return model
- print_trainable_parameters 메소드의 출력에 따르면 파라미터 수가 70억개 에서 390만 개로 줄어들었음을 확인.
728x90
'😒 저 저 저 개념없는 나 > ⛓️ DL & ML' 카테고리의 다른 글
[문서 제목 자동 분류 작업 | Clustering] 1. CSV 파일 읽어오기 | 인턴 (0) | 2024.01.15 |
---|---|
[Clustering | Classification] K-NN VS K-Means | 인턴 (0) | 2024.01.15 |
[Clustering] K-means 알고리즘 | 인턴 (0) | 2024.01.12 |
[NLP] Bow에 기반한 Tf-idf | 인턴 (0) | 2024.01.12 |
[딥러닝] Backpropagation (0) | 2023.04.18 |