PEFT(Parameter-Efficient Fine-Tuning) 라이브러리 : 대규모 Pre-trained Language Model 효과적으로 활용하기

Jomii·2024년 3월 8일
1
post-custom-banner

소개


최근에는 대규모 트랜스포머 모델을 사용한 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의 기법들


허깅페이스에서 제공하는 PEFT 라이브러리는 모델 파라미터 중 일부만 미세 조정하거나, 재매개변수화 방법(예: Low-rank adaptation)을 사용하여 계산 및 저장 비용을 크게 절감하는 다양한 방법론을 제공합니다.


초기에 PEFT을 위해 제안되었던 방법은 어댑터(adapters)를 사용하는 것입니다.

여기서 adapater란, 기존에 이미 학습이 완료된 모델(pre-trained model)의 사이사이에 학습 가능한 작은 feed-forward networks를 삽입하는 구조를 말합니다. 이때, pre-trained model의 weights를 고정시키고 어댑터를 중간 중간 추가함으로써 적은 수의 파라미터로 모델을 튜닝하는 기법입니다.

뿐만 아니라, PEFT는 다양한 방법론을 제공하고 있으며, LoRA, prompt tuning, prefix tuning
등이 이에 속합니다. 이러한 다양한 방법론을 활용하여 효율적으로 모델을 fine-tuning할 수 있습니다.

LoRA 참고설명


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를 사용하여 모델을 조정하면 전체 파인튜닝에서 생성되는 큰 체크포인트 파일 대신 작은 체크포인트 파일을 얻을 수 있어 저장 공간 관리에 도움이 됩니다.
  • 예를 들어, Hugging Face의 bigscience/mt0-xl 모델은 40GB의 저장 공간을 차지하고 각 다운스트림 데이터 세트에 대해 40GB의 체크포인트 파일이 생성되지만 PEFT를 사용하면 다운스트림 데이터 세트에 대해 몇 메가바이트의 적은 용량을 가진 체크포인트 파일을 사용할 수 있습니다.
  • 즉 PEFT로 학습된 적은 양의 가중치는 사전 학습된 LLM 모델 레이어의 상단에 위치하여 모델 전체를 대체할 필요 없이 조금의 가중치만 추가하여 여러 작업을 수행할 수 있습니다.



참고 링크:
PEFT 라이브러리 공식 GitHub
https://sooftware.io/peft/
https://4n3mone.tistory.com/7

profile
📩 qtly_u@naver.com
post-custom-banner

0개의 댓글