최근에는 대규모 트랜스포머 모델을 사용한 Pre-trained Language Model (PLM)이 다양한 자연어 처리 분야에서 높은 성능을 보이고 있습니다. 트랜스포머 모델은 GPT, T5, BERT와 같은 대규모 언어 모델뿐만 아니라 VIT, Stable Diffusion, LayoutLM 등 컴퓨터 비전 및 음성 분야에도 적용되고 있습니다. 그러나 모델이 커짐에 따라 Fine-tuning 비용이 증가하고, 모든 파라미터를 튜닝하는 것이 어려워지는 문제가 발생했습니다.
이러한 문제를 해결하기 위해 등장한 라이브러리가 PEFT(Parameter-Efficient Fine-Tuning)입니다. PEFT는 대부분의 모델 파라미터를 고정하고 필요한 부분만 튜닝함으로써 저장 공간 및 계산 비용을 크게 줄입니다. 또한, catastrophic forgetting*과 같은 문제를 극복하면서도 적은 양의 데이터나 도메인 이탈 데이터에 대한 뛰어난 일반화 성능을 보여줍니다.
*catastrophic forgetting: 인공 신경망이 새로운 정보를 학습할 때 이전에 학습한 정보를 갑자기 급격하게 잊어버리는 경향
PEFT는 다양한 방법을 활용하여 대규모 언어 모델의 Fine-tuning 비용을 혁신적으로 줄일 수 있는 기능을 제공합니다.
허깅페이스에서 제공하는 PEFT 라이브러리는 모델 파라미터 중 일부만 미세 조정하거나, 재매개변수화 방법(예: Low-rank adaptation)을 사용하여 계산 및 저장 비용을 크게 절감하는 다양한 방법론을 제공합니다.
여기서 adapater란, 기존에 이미 학습이 완료된 모델(pre-trained model)의 사이사이에 학습 가능한 작은 feed-forward networks를 삽입하는 구조를 말합니다. 이때, pre-trained model의 weights를 고정시키고 어댑터를 중간 중간 추가함으로써 적은 수의 파라미터로 모델을 튜닝하는 기법입니다.
뿐만 아니라, PEFT는 다양한 방법론을 제공하고 있으며, LoRA
, prompt tuning
, prefix tuning
등이 이에 속합니다. 이러한 다양한 방법론을 활용하여 효율적으로 모델을 fine-tuning할 수 있습니다.
PEFT 사용법 예시:
pythonCopy code
from transformers import AutoModelForCausalLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig(
task_type="CAUSAL_LM", inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1
)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
# output: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282
이렇게 PEFT를 적용한 모델은 기존 모델의 일부 파라미터만 미세 조정하고 있으며, 저장 및 계산 비용을 현저하게 감소시키는 것을 볼 수 있습니다. 또한, 모델 저장 시에는 base_model 파라미터를 제외한 Adapter 부분만 저장되어 저장 공간을 효율적으로 활용합니다.
참고 링크:
PEFT 라이브러리 공식 GitHub
https://sooftware.io/peft/
https://4n3mone.tistory.com/7