PEFT documentation
Sparse High Rank Adapters
Sparse High Rank Adapters
Sparse High Rank Adapters 또는 SHiRA는 대안적인 유형의 어댑터로, 저 랭크 어댑터보다 상당한 이점이 있는 것으로 확인되었습니다. 구체적으로 SHiRA는 다양한 비전 및 언어 작업에서 LoRA보다 더 높은 정확도를 달성합니다. 또한, 저 랭크 어댑터에서 흔히 발생하는 개념 손실 문제를 크게 줄임으로써 더 단순하고 고품질의 다중 어댑터 융합을 제공합니다. SHiRA는 베이스 모델의 소수의 파라미터를 직접 미세 조정하여 모델이 어떤 적응 작업이든 수행할 수 있도록 합니다.
SHiRA에는 현재 다음과 같은 제약이 있습니다:
nn.Linear레이어만 지원됩니다.
해당 논문의 초록은 다음과 같습니다:
Low Rank Adaptation (LoRA)는 최근 생성형 AI 연구에서 큰 주목을 받고 있습니다. LoRA의 주요 장점 중 하나는 사전 학습된 모델과 융합(fused)될 수 있어 추론 시 오버헤드를 추가하지 않는다는 것입니다. 그러나 모바일 배포 관점에서는 융합 모드에서 추론 오버헤드를 피할 수 있지만 어댑터를 빠르게 전환하는 능력을 잃거나, 비융합(unfused) 모드에서 빠른 전환을 가능하게 하는 대신 상당한(최대 30% 높음) 추론 지연을 감수해야 합니다. 또한 LoRA는 여러 어댑터를 동시에 사용할 때 개념 손실(concept-loss)을 보입니다. 본 논문에서는 추론 오버헤드가 없고, 빠른 전환을 지원하며, 개념 손실을 크게 줄이는 새로운 패러다임인 Sparse High Rank Adapters (SHiRA)를 제안합니다. 구체적으로 SHiRA는 기본 모델 가중치의 1~2%만 직접 조정하고 나머지는 변경하지 않는 방식으로 학습할 수 있습니다. 이를 통해 융합 모드에서 직접 전환할 수 있는 고도로 희소한(sparse) 어댑터가 생성됩니다. 또한 SHiRA의 높은 희소성이 개념 손실을 줄여 다중 어댑터 융합에 어떻게 도움이 되는지에 대한 이론적 및 경험적 통찰을 제공합니다. LVM과 LLM에 대한 광범위한 실험을 통해, 기본 모델의 매개변수 중 일부만 미세 조정하는 것이 LoRA보다 훨씬 우수한 성능을 내면서 빠른 전환과 다중 어댑터 융합을 모두 가능하게 한다는 것을 입증했습니다. 마지막으로, Parameter-Efficient Finetuning (PEFT) Library에 기반한 지연 시간 및 메모리 효율적인 SHiRA 구현을 제공합니다. 이 구현은 LoRA와 거의 동일한 속도로 학습하는 동시에 최대 16% 낮은 피크 GPU 메모리를 소비하여 SHiRA가 실제 사용 사례에 쉽게 채택될 수 있게 합니다. 추론 중 빠른 전환의 이점을 시연하기 위해, CPU에서 SHiRA를 기본 모델에 로드하는 것이 LoRA 융합보다 5배에서 16배까지 빠를 수 있음을 보여줍니다.
벤치마크 개요
API
ShiraConfig
클래스 peft.ShiraConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 32mask_type: Literal['random'] = 'random'random_seed: Optional[int] = Nonetarget_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falseinit_weights: bool = Truemodules_to_save: Optional[list[str]] = None )
매개변수
- r (
int, 선택 사항, 기본값32) — 주어진 대상 모듈에 대해 SHiRA 매개변수의 수는 r(m+n)으로 계산되며, 여기서 m x n은 원래 텐서의 차원입니다. 이는 SHiRA 매개변수의 수가 LoRA 어댑터의 매개변수 수와 동일하다는 것을 의미합니다. SHiRA는 고 랭크(high rank) 어댑터입니다. 이 r 매개변수를 설정해도 랭크가 해당 값으로 제한되지 않습니다. - mask_type (
str, 기본값random) — 마스크 함수의 유형입니다. 기본값은 랜덤 스파스 마스크입니다.config = ShiraConfig(...)를 인스턴스화한 후config.mask_fn = <your custom mask function>를 설정하여 마스크 값을 계산하는 사용자 정의 mask_fn을 선택적으로 제공할 수도 있습니다. shape가 m x n인 사전 학습된 가중치의 경우, 커스텀 마스크 함수는 선형 레이어의 경우 num_shira_parameters = r(m + n)을 만족하는 바이너리 0 또는 1인 단일 마스크(shape: m x n)만 반환해야 합니다. 마스크의 Device와 dtype은 베이스 레이어의 가중치와 동일해야 합니다. 자세한 내용 및 기본 랜덤 스파스 마스크 구현은 mask_functions.py를 참고하세요. - random_seed (
int, 선택 사항, 기본값None) — random_mask를 위한 torch 생성기의 랜덤 시드입니다. - target_modules (
Union[List[str], str]) — SHiRA로 교체할 모듈 이름의 목록 또는 모듈 이름의 정규식 표현입니다. 예를 들어, [‘q’, ‘v’] 또는 ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. 선형 레이어만 지원됩니다. - fan_in_fan_out (
bool) — 교체할 레이어가 가중치를 (fan_in, fan_out) 형태로 저장하는 경우 True로 설정합니다. 예를 들어, gpt-2는 가중치를 (fan_in, fan_out) 형태로 저장하는Conv1D를 사용하므로 이 값을True로 설정해야 합니다. - init_weights (
bool, 기본값True) — SHiRA 가중치를 0 값으로 초기화합니다. False로 설정하면 SHiRA 가중치가 0 대신 randn 값으로 초기화되며, 이는 테스트 용도로만 사용됩니다. - modules_to_save (
List[str]) — SHiRA 레이어를 제외한 최종 체크포인트에 저장할 학습 가능 모듈 목록.
이것은 ShiraModel의 구성을 저장하기 위한 구성 클래스입니다.
ShiraModel
class peft.ShiraModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
매개변수
- model (PreTrainedModel) — 적응할 모델.
- config (ShiraConfig) — SHiRA 모델의 구성입니다.
- adapter_name (
str) — 어댑터의 이름이며, 기본값은"default"입니다.
반환값
torch.nn.Module
SHiRA 모델.
pretrained 모델에서 Sparse High Rank Adapter (SHiRA) 모델을 생성합니다.
예:
>>> from transformers import AutoModelForCausalLM
>>> from peft import ShiraConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = ShiraConfig(r=32)
>>> model = get_peft_model(base_model, config)속성:
- model (PreTrainedModel) — 적응할 모델.
- peft_config (ShiraConfig): SHiRA 모델의 구성입니다.