PEFT documentation
Llama-Adapter
Llama-Adapter

Llama-Adapter는 Llama를 지시 따르기 모델로 전환하기 위해 특별히 설계된 PEFT 방법입니다. Llama 모델은 동결되며, 입력 지시 토큰 앞에 접두사로 붙은 적응 프롬프트 세트만 학습됩니다. 모델에 삽입된 무작위 초기화 모듈이 모델의 기존 지식을 일부 잃게 만들 수 있으므로, Llama-Adapter는 제로 게이팅을 사용한 제로 초기화 어텐션을 통해 지시 프롬프트를 모델에 점진적으로 추가합니다.
해당 논문의 초록은 다음과 같습니다:
LLaMA-Adapter를 소개합니다. 이는 LLaMA를 지시 따르기 모델로 효율적으로 파인튜닝하기 위한 경량 적응 방법입니다. 52K개의 셀프 인스트럭트 데모를 사용하여, LLaMA-Adapter는 동결된 LLaMA 7B 모델에 학습 가능한 파라미터 1.2M만 도입하며, 8개의 A100 GPU에서 파인튜닝에 1시간 미만의 비용이 듭니다. 구체적으로, 학습 가능한 적응 프롬프트 세트를 채택하여 더 높은 트랜스포머 레이어에서 입력 텍스트 토큰 앞에 붙입니다. 그런 다음, 제로 게이팅을 가진 제로 초기화 어텐션 메커니즘을 제안하여, 사전 학습된 지식을 효과적으로 보존하면서 새로운 지시 단서를 LLaMA에 적응적으로 주입합니다. 효율적인 훈련을 통해, LLaMA-Adapter는 7B 파라미터를 완전히 파인튜닝한 Alpaca와 비교할 수 있는 고품질 응답을 생성합니다. 또한, 우리의 접근법은 이미지와 같은 멀티모달 입력으로 쉽게 확장되어 이미지 조건부 LLaMA를 만들 수 있으며, 이는 ScienceQA에서 우수한 추론 능력을 달성합니다. 코드는 https://github.com/ZrrSkywalker/LLaMA-Adapter에서 공개합니다.
Llama-Adapter를 사용할 때
Llama-Adapter는 다음 경우에 좋은 선택입니다:
- 매우 작은 체크포인트가 필요합니다. 학습 및 저장되는 것은 어댑터 프롬프트와 그 게이트뿐이며, 이는
adapter_layers * (adapter_len * hidden_size + 1)개의 파라미터에 해당합니다. - 지원되는 모델(Llama, Mistral, GPT-2)을 instruction-tuning하는 경우로, 이는 해당 논문이 집중하는 사용 사례입니다.
set_adapter를 사용하여 동일한 base model에 대해 여러 작업별 어댑터를 유지하고 전환하는 경우
Llama-Adapter를 사용하지 않아야 하는 경우
다음과 같은 경우 Llama-Adapter가 최선의 선택이 아닐 수 있습니다:
- 모델이 Llama, Mistral, GPT-2 모델이 아닙니다. 다른 아키텍처는
ValueError를 발생시킵니다. 대신 LoRA를 고려해 보세요. - 추론 오버헤드가 전혀 없어야 합니다. 어댑터는 기본 가중치에 병합할 수 없으며(
merge_and_unload()는 지원되지 않음), 따라서 추론 시 각 어댑터 적용 레이어는adapter_len개의 추가 토큰에 대해 주의를 기울입니다. - 여러 개의 어댑터를 동시에 활성화하고 싶을 수 있습니다. 하지만 하나의 어댑터만 활성화될 수 있으며, 어댑션 프롬프트는 동일한 어텐션 모듈에 쌓을 수 없습니다.
벤치마크 개요
API
AdaptionPromptConfig
클래스 peft.AdaptionPromptConfig
< 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 = Falsetarget_modules: str = Noneadapter_len: int = Noneadapter_layers: int = None )
AdaptionPromptModel의 구성을 저장합니다.
AdaptionPromptModel
https://huggingface.co/papers/2303.16199에 설명된 대로 어댑션 프롬프트를 구현합니다.
상위 L개의 attention 모듈은 원래 모듈을 감싸되, 가중치 게이트(제로 초기화를 위해)를 가진 학습 가능한 프롬프트를 삽입하는 AdaptedAttention 모듈로 대체됩니다.
멀티 어댑터 패턴에 대한 참고 사항:
- 어댑터 이름으로 인덱싱된 AdaptedAttention 모듈의 사전(딕셔너리)을 유지하여 서로 다른 어댑터의 상태를 저장합니다.
- 어댑터를 전환할 때마다 현재 활성화된 어댑터의 모듈을 모델에서 제거하고 사전에 저장한 뒤, 새 어댑터의 모듈로 교체합니다.
- 중복되고 잠재적으로 일관성이 없는 상태를 피하기 위해, 현재 활성화된 어댑터는 항상 사전에서 제거됩니다.
- 어댑터를 비활성화하면 모듈이 모델에서 제거됩니다.
name 및 config가 주어진 어댑터를 추가합니다.
지정된 이름의 어댑터를 삭제합니다.
AdaptedAttention 모듈을 교체하여 어댑터 레이어를 비활성화합니다.
캐시된 AdaptedAttention 모듈을 교체하여 어댑터 레이어를 활성화합니다.
지정된 이름의 어댑터를 사용하도록 모델을 설정합니다.