? PEFT
최첨단 PEFT(Parameter-Efficient Fine-Tuning) 방법
사전 학습된 대규모 모델을 미세 조정하는 것은 규모로 인해 비용이 엄청나게 많이 드는 경우가 많습니다. PEFT(Parameter-Efficient Fine-Tuning) 방법을 사용하면 모델의 모든 매개변수 대신 소수의 (추가) 모델 매개변수만 미세 조정하여 사전 학습된 대형 모델을 다양한 다운스트림 애플리케이션에 효율적으로 적용할 수 있습니다. 이는 계산 및 저장 비용을 크게 줄입니다. 최신 최첨단 PEFT 기술은 완전히 미세 조정된 모델에 필적하는 성능을 달성합니다.
PEFT는 손쉬운 모델 훈련 및 추론을 위한 Transformers, 다양한 어댑터를 편리하게 관리하기 위한 Diffusers, 매우 큰 모델에 대한 분산 훈련 및 추론을 위한 Accelerate와 통합되어 있습니다.
팁
PEFT 조직을 방문하여 라이브러리에 구현된 PEFT 방법에 대해 읽고 이러한 방법을 다양한 다운스트림 작업에 적용하는 방법을 보여주는 노트북을 확인하세요. 새로 구현된 메소드와 노트북을 확인하려면 조직 페이지에서 "Repos 보기" 버튼을 클릭하세요!
지원되는 PEFT 방법 목록은 PEFT 어댑터 API 참조 섹션을 확인하고 이러한 방법의 작동 방식에 대해 자세히 알아보려면 어댑터, 소프트 프롬프트 및 IA3 개념 가이드를 읽어보세요.
pip에서 PEFT를 설치합니다.
pip install peft
기본 모델과 PEFT 구성을 get_peft_model
로 래핑하여 LoRA와 같은 PEFT 방법으로 훈련할 모델을 준비합니다. bigscience/mt0-large 모델의 경우 매개변수의 0.19%만 훈련하고 있습니다.
from transformers import AutoModelForSeq2SeqLM
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 = TaskType . SEQ_2_SEQ_LM , inference_mode = False , r = 8 , lora_alpha = 32 , lora_dropout = 0.1
)
model = AutoModelForSeq2SeqLM . from_pretrained ( model_name_or_path )
model = get_peft_model ( model , peft_config )
model . print_trainable_parameters ()
"trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282"
추론을 위해 PEFT 모델을 로드하려면:
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch
model = AutoPeftModelForCausalLM . from_pretrained ( "ybelkada/opt-350m-lora" ). to ( "cuda" )
tokenizer = AutoTokenizer . from_pretrained ( "facebook/opt-350m" )
model . eval ()
inputs = tokenizer ( "Preheat the oven to 350 degrees and place the cookie dough" , return_tensors = "pt" )
outputs = model . generate ( input_ids = inputs [ "input_ids" ]. to ( "cuda" ), max_new_tokens = 50 )
print ( tokenizer . batch_decode ( outputs , skip_special_tokens = True )[ 0 ])
"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."
PEFT를 사용하면 많은 이점이 있지만 가장 큰 장점은 컴퓨팅 및 스토리지 측면에서 막대한 절감 효과가 있어 PEFT를 다양한 사용 사례에 적용할 수 있다는 것입니다.
64GB 이상의 CPU RAM을 갖춘 A100 80GB GPU를 사용하는 ought/raft/twitter_complaints 데이터 세트에서 다음 모델을 훈련하기 위한 메모리 요구 사항을 고려하십시오.
모델 | 전체 미세 조정 | PEFT-LoRA 파이토치 | CPU 오프로딩 기능을 갖춘 PEFT-LoRA DeepSpeed |
---|---|---|---|
bigscience/T0_3B (3B 매개변수) | 47.14GB GPU / 2.96GB CPU | 14.4GB GPU / 2.96GB CPU | 9.8GB GPU / 17.8GB CPU |
bigscience/mt0-xxl (12B 매개변수) | OOM GPU | 56GB GPU / 3GB CPU | 22GB GPU / 52GB CPU |
bigscience/bloomz-7b1(7B 매개변수) | OOM GPU | 32GB GPU / 3.8GB CPU | 18.1GB GPU / 35GB CPU |
LoRA를 사용하면 80GB GPU의 메모리가 부족할 수 있는 12B 매개변수 모델을 완전히 미세 조정하고 3B 매개변수 모델을 편안하게 맞추고 훈련할 수 있습니다. 3B 매개변수 모델의 성능을 살펴보면 GPU 메모리의 일부를 사용하여 완전히 미세 조정된 모델과 비슷합니다.
제출물 이름 | 정확성 |
---|---|
인간 기준(크라우드소싱) | 0.897 |
플랜-T5 | 0.892 |
로라-t0-3b | 0.863 |
팁
bigscience/T0_3B 모델 성능은 위 표에서 최적화되지 않았습니다. 입력 명령 템플릿, LoRA 하이퍼파라미터 및 기타 교육 관련 하이퍼파라미터를 사용해 보면 더 많은 성능을 얻을 수 있습니다. 이 모델의 최종 체크포인트 크기는 전체 bigscience/T0_3B 모델의 11GB에 비해 19MB에 불과합니다. 이 블로그 게시물에서 PEFT를 사용한 미세 조정의 이점에 대해 자세히 알아보세요.
양자화는 데이터를 더 낮은 정밀도로 표현하여 모델의 메모리 요구 사항을 줄이는 또 다른 방법입니다. PEFT 방법과 결합하여 추론을 위한 LLM을 더욱 쉽게 훈련하고 로드할 수 있습니다.
PEFT는 각 다운스트림 작업 또는 데이터 세트에서 모델의 전체 미세 조정을 방지하여 스토리지를 절약하는 데 도움이 됩니다. 대부분의 경우 모델 매개변수의 아주 작은 부분만 미세 조정하며 각 체크포인트의 크기는 GB가 아닌 몇 MB에 불과합니다. 이러한 소형 PEFT 어댑터는 완전히 미세 조정된 모델에 필적하는 성능을 보여줍니다. 데이터 세트가 많은 경우 PEFT 모델을 사용하면 많은 스토리지를 절약할 수 있으며 백본 또는 기본 모델을 잊어버리거나 과적합하는 문제에 대해 걱정할 필요가 없습니다.
PEFT는 학습 및 추론에 엄청난 효율성을 제공하므로 Hugging Face 생태계 전반에서 널리 지원됩니다.
반복적인 확산 프로세스는 많은 메모리를 소비하므로 학습이 어려울 수 있습니다. PEFT는 메모리 요구 사항을 줄이고 최종 모델 체크포인트의 저장 크기를 줄이는 데 도움이 될 수 있습니다. 예를 들어, 64GB 이상의 CPU RAM을 갖춘 A100 80GB GPU에서 LoRA를 사용하여 Stable Diffusion 모델을 훈련하는 데 필요한 메모리를 생각해 보세요. 최종 모델 체크포인트 크기는 8.8MB에 불과합니다!
모델 | 전체 미세 조정 | PEFT-LoRA | 그라데이션 체크포인트 기능을 갖춘 PEFT-LoRA |
---|---|---|---|
CompVis/안정-확산-v1-4 | 27.5GB GPU / 3.97GB CPU | 15.5GB GPU / 3.84GB CPU | 8.12GB GPU / 3.77GB CPU |
팁
example/lora_dreambooth/train_dreambooth.py 훈련 스크립트를 살펴보고 LoRA를 사용하여 자신만의 Stable Diffusion 모델을 훈련해 보고 T4 인스턴스에서 실행되는 smangrul/peft-lora-sd-dreambooth Space를 사용해 보세요. 이 튜토리얼에서 디퓨저의 PEFT 통합에 대해 자세히 알아보세요.
Accelerate는 다양한 교육 설정 및 하드웨어(GPU, TPU, Apple Silicon 등)에 대한 분산 교육 및 추론을 위한 라이브러리입니다. PEFT 모델은 즉시 Accelerate와 함께 작동하므로 매우 큰 모델을 교육하거나 리소스가 제한된 소비자 하드웨어에 대한 추론에 사용하는 것이 매우 편리합니다.
PEFT는 랭커 및 정책과 같은 RLHF 구성 요소를 사용하여 LLM 교육에도 적용할 수 있습니다. 다음 내용을 읽고 시작하세요.
이 공간을 사용하거나 문서를 확인하여 어떤 모델이 PEFT 방법을 공식적으로 지원하는지 찾아보세요. 아래에 모델이 표시되지 않더라도 모델 구성을 수동으로 구성하여 모델에 대해 PEFT를 활성화할 수 있습니다. 방법을 알아보려면 새로운 변환기 아키텍처 가이드를 읽어보세요.
PEFT에 기여하고 싶다면 기여 가이드를 확인하세요.
사용하려면? 귀하의 출판물에 PEFT를 삽입하려면 다음 BibTeX 항목을 사용하여 인용해 주세요.
@Misc { peft ,
title = { PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods } ,
author = { Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan } ,
howpublished = { url{https://github.com/huggingface/peft} } ,
year = { 2022 }
}