PEFT documentation

매개변수 효율적 미세 조정 방법

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

매개변수 효율적 미세 조정 방법

PEFT 방법은 전체 fine-tuning과 유사한 성능을 목표로 하면서 가능한 한 적은 수의 파라미터만 학습합니다. 학습 가능한 파라미터가 적을수록 표현력이 낮아지므로 동일한 성능이 보장되지는 않습니다. 대신 메모리 사용량이 줄고, 종종 계산량도 감소하며, 전문가 어댑터 간 빠른 hot-swapping과 기존 지식의 망각 감소와 같은 기능을 활용할 수 있습니다.

대규모 모델 학습에 대한 일반적인 조언을 제시하는 것은 어렵지만, 생성 모델, 특히 언어 모델의 경우 다음 단계를 따를 수 있습니다:

  1. 프롬프팅(예: 프롬프트 내 few-shot 예시)을 사용해 모델이 이미 해당 작업을 수행할 수 있는지 확인해 보세요. 모델이 문제를 해결할 수 있다면 좋습니다! 이제 Prompt-based methods를 사용해 프롬프트를 학습하고 귀중한 토큰을 절약할 수 있습니다.
  2. 프롬프트 기반 방법이 충분하지 않은 경우 레이어 튜닝과 어댑터 방법을 사용할 수 있습니다. 이러한 방법은 일반적으로 프롬프트 기반 방법보다 표현력이 뛰어나며 완전한 파인튜닝에 더 가깝습니다.
  3. 각 fine-tuning 단계는 이전 지식을 잊게 만들 수 있으므로, 이미 학습한 지식의 보존 여부를 반드시 측정하세요.

PEFT 방법 비교 스위트는 선택된 벤치마크와 모델에서 구현된 (대부분의) 방법에 대한 대략적인 개요를 제공하기 위한 것입니다.

모든 PEFT 방법이 동등하지 않으며, 기능 면에서 차이가 있습니다:

  • Quantization: 모든 방법이 양자화된 기본 모델을 지원하지는 않습니다
  • Features: 모든 기능이 모든 메서드에서 지원되지는 않습니다(예: 여러 어댑터, 혼합 어댑터 추론, 병합/병합 해제)
  • 레이어 유형: 선형 레이어는 일반적으로 지원되지만, 모든 어댑터 방법이 임베딩(어휘 확장 시 중요) 또는 컨볼루션 레이어(일부 이미지 모델에서 중요)를 지원하지는 않습니다
  • Runtime: PEFT 방법은 일반적으로 런타임 오버헤드를 추가하지만, 이를 일부 완화할 수 있습니다(예: 어댑터 가중치 병합).

프롬프트 기반 방법

Prompting은 작업을 설명하거나 작업의 예를 보여주는 텍스트 프롬프트를 포함하여 동결된 사전 학습 모델을 특정 하위 작업에 맞게 준비합니다. Prompting을 사용하면 각 하위 작업마다 별도의 모델을 완전히 학습할 필요가 없으며, 대신 동일한 동결된 사전 학습 모델을 사용할 수 있습니다. 이는 여러 다른 작업에 동일한 모델을 사용할 수 있어 훨씬 간단하며, 모델의 모든 매개변수를 학습하는 것보다 훨씬 적은 수의 프롬프트 매개변수를 학습하고 저장하는 것이 훨씬 효율적이기 때문입니다.

프롬프팅 방법은 두 가지 범주로 나뉩니다:

  • hard prompts는 이산적인 입력 토큰을 가진 수작업으로 제작된 텍스트 프롬프트입니다. 단점으로는 좋은 프롬프트를 만드는 데 상당한 노력이 필요하다는 것입니다.
  • soft prompts는 데이터셋에 대해 최적화할 수 있는 학습 가능한 텐서로, 입력 임베딩에 연결됩니다. 단점으로는 이러한 “가상 토큰”이 실제 단어의 임베딩과 매핑되지 않기 때문에 사람이 읽을 수 없다는 것입니다.

PEFT 라이브러리는 여러 유형의 프롬프팅 방법(p-tuning, prefix tuning, prompt tuning, …)을 지원하며, 소프트 프롬프트 방법의 전체 목록은 목차를 확인해 보세요. 이러한 방법을 다른 작업 및 사용 사례에 적용하는 데 관심이 있다면, 노트북 컬렉션을 확인해 보세요!

인과 언어 모델(causal language model)을 학습하는 일반적인 과정에 대한 기본적인 이해가 있다면, 소프트 프롬팅(soft prompting) 기법에 집중할 수 있어 매우 유용합니다. 처음 접하시는 분이라면 Transformers 문서의 Causal language modeling 가이드를 먼저 확인해 보시는 것을 권장합니다. 준비가 되셨다면 다시 돌아와 PEFT를 학습에 적용하는 것이 얼마나 쉬운지 확인해 보세요!

레이어 튜닝

Layer Tuning은 특정 유형의 레이어 또는 레이어의 특정 측면만을 대상으로 하는 방법들을 분류합니다. 예를 들어, LayerNorm Tuning은 LayerNorm 레이어만 대상으로 하고, TrainableTokens는 임베딩 행렬의 특정 토큰만 대상으로 합니다. 이는 모델 입력을 다루는 프롬프트 기반 방법이나 기존 가중치를 확장하는 어댑터 방법과 대비되며, 후자의 경우 일반적으로 레이어 유형에 독립적이며 선형 레이어나 컨볼루션 레이어를 대상으로 합니다.

Adapter 메서드

Adapter 메서드는 기존 모델에 상대적으로 작고 학습 가능한 행렬을 추가하여 fine-tuning을 수행하는 방법이라고 볼 수 있습니다. 목표는 학습 가능한 매개변수를 최소화하면서 fine-tuning이 필요한 작업 방향으로 큰 모델을 유도하여 메모리나 컴퓨트와 같은 리소스를 절약하는 것입니다.

어댑터를 구현하는 인기 있는 방법 중 하나는, 적응된 가중치의 레이아웃에 대한 저랭크 분해인 더 작은 학습 가능 행렬을 삽입하여 메모리를 절약하는 것입니다. 가중치 행렬을 저랭크 분해로 표현하는 방법은 여러 가지가 있지만, Low-Rank Adaptation (LoRA)가 가장 일반적인 방법입니다. PEFT 라이브러리는 이 공식의 여러 다른 변형도 지원합니다. 일부는 LoRA의 직접적인 변형으로 LoRA 아래에 문서화되어 있고, 일부는 Low-Rank Hadamard Product (LoHa), Low-Rank Kronecker Product (LoKr), Adaptive Low-Rank Adaptation (AdaLoRA)처럼 충분히 달라 자체 방법으로 간주됩니다. 이러한 방법을 의미론적 분할(semantic segmentation), 토큰 분류(token classification)와 같은 다른 작업 및 사용 사례에 적용하는 데 관심이 있다면, 우리의 노트북 컬렉션을 확인해 보세요!

LoRA는 가장 인기 있는 PEFT 방법 중 하나로, PEFT를 처음 접하는 분들에게 좋은 출발점이 됩니다. 처음에는 대규모 언어 모델을 위해 개발되었지만, 효율성과 효과성 덕분에 diffusion 모델의 학습 방법으로도 매우 널리 사용됩니다.

Low-rank adapter는 가능한 adapter 구성 방식 중 하나일 뿐이며, PEFT는 다양한 다른 유형의 adapter도 구현합니다. 예를 들어, Orthogonal Fine-Tuning 방법(OFT, BOFT, …)은 adapter 가중치의 직교 분해를 사용하여 작은 크기를 달성합니다. MiSS와 같은 방법은 행렬을 샤드로 나누고 이러한 샤드를 공유하여 메모리를 절약합니다. IA3는 key, value 및 feed-forward activations를 재조정하는 학습된 벡터를 도입합니다.

Update on GitHub