효율적인 미세조정과 성능 최적화를 위해 LoRA와 SFT를 사용한다.
미세 조정 시에 메모리의 효율성을 개선하기 위한 방법이다. 기존 모델의 파라미터는 고정하고, 저차원 업데이트만 학습한다. 특히 LM의 경우, 모든 파라미터를 업데이트하는 것은 메모리와 계산 비용이 크기 때문에 LoRA를 통해 효율적인 미세 조정을 가능하게 한다.
peft_config = LoraConfig(
r=self.training_config["lora"]["r"],
lora_alpha=self.training_config["lora"]["lora_alpha"],
lora_dropout=self.training_config["lora"]["lora_dropout"],
target_modules=self.training_config["lora"]["target_modules"],
bias=self.training_config["lora"]["bias"],
task_type=self.training_config["lora"]["task_type"],
)
r: 저차원 업데이트의 차원. 이 값이 작을수록 메모리 사용량이 줄어든다.
lora_alpha: LoRA의 학습률을 조절하는 파라미터
lora_dropout: 드롭아웃 확률로, 과적합을 방지하기 위해 사용.
target_modules: LoRA가 적용될 모듈.
ex. ["q_proj", "k_proj"] : q_proj와 k_proj는 Self-Attention Layer의 Query와 Key 생성 모듈. 이 두 모듈에 대해 LoRA를 적용하면, 효율적인 파라미터 업데이트가 가능하다.
task_type: "CAUSAL_LM"으로 설정되어있다면, 이는 Auto-Regressive Language Model을 의미한다.
LoRA 설정을 통해 모델 파라미터의 일부만 업데이트함으로써 메모리 사용량과 계산 비용을 줄이면서도 높은 성능을 유지할 수 있다.
지도학습을 통해 모델이 특정 task에 맞게 최적화되도록 학습하는 과정이다. 프롬프트 응답생성, 텍스트 분류 등 특정 데이터와 task에 맞는 성능을 끌어올리는 것이 목적이다. SFT는 일반적으로 모델 전체의 파라미터를 업데이트하지만, LoRA와 함께 사용하면 효율적인 부분 업데이트가 가능하다.
대형 모델을 SFT로 미세 조정할 때, LoRA를 적용하면 메모리 문제를 해결하면서도 효과적인 태스크 맞춤형 학습을 할 수 있다.