PEFT documentation
Polytropon
Polytropon
Polytropon은 인벤토리에 다양한 LoRA 어댑터를 포함하는 멀티태스크 모델입니다. 이 모델은 라우팅 함수를 통해 인벤토리에서 올바른 어댑터 조합을 학습하여, 특정 작업에 가장 적합한 모듈의 부분 집합을 선택합니다. PEFT는 Polytropon에 대해 Multi-Head Adapter Routing (MHR)도 지원합니다. MHR은 어댑터 헤드를 더 세밀하게 결합하여 라우팅 함수를 기반으로 개선합니다. 어댑터 헤드는 서로 겹치지 않는 블록으로 분리되고, 각 블록마다 다른 라우팅 함수가 학습되어 표현력이 높아집니다.
해당 논문의 초록은 다음과 같습니다:
모듈형 설계는 신경 모델이 지식의 다양한 측면을 분리하고 재조합하여 새로운 작업에 대해 보다 체계적으로 일반화하도록 장려합니다. 본 연구에서는 각 작업이 (상대적으로 작은) 인벤토리에서 잠재적 이산 스킬의 부분 집합과 연관된다고 가정합니다. 이에 따라 스킬은 매개변수 효율적(희소 / 저순위) 모델 매개변수화에 대응합니다. 이러한 스킬과 작업-스킬 할당 행렬을 함께 학습함으로써, 각 작업에 대한 네트워크는 활성 스킬의 매개변수 평균으로 인스턴스화됩니다. 작업 간 스킬의 자명한하지 않은 소프트 분할을 선호하기 위해, 인디언 버펫 프로세스 사전 분포와 이중 속도 학습률과 같은 일련의 유도 편향을 실험했습니다. 잠재 스킬 모델은 두 가지 주요 설정에서 평가했습니다: 1) BabyAI 플랫폼의 8개 레벨에서 기반 지시 따르기를 위한 멀티태스크 강화 학습; 2) 160개의 NLP 작업으로 구성된 벤치마크인 CrossFit에서 사전 학습된 텍스트-텍스트 생성 모델의 소수 샷 적응. 완전히 공유된 매개변수, 작업별 매개변수, 또는 작업 간에 지식이 얽혀 있는 조건부 생성 매개변수를 사용하는 베이스라인과 비교할 때, 네트워크의 모듈형 설계가 강화 학습에서의 샘플 효율성과 감독 학습에서의 소수 샷 일반화를 크게 향상시킨다는 것을 발견했습니다. 또한, 이산 스킬이 명시적인 작업 계층 구조를 제공함으로써 해석 가능성을 어떻게 돕는지 보여줍니다.
해당 논문의 초록은 다음과 같습니다:
교차 작업 일반화를 위한 매개변수 효율적 파인튜닝(PEFT)은 테스트 작업에 대한 소수 샷 적응 전에 다중 작업 학습 세트에서 어댑터를 사전 학습하는 것을 포함합니다. Polytropon [Ponti et al., 2023](Poly)은 사전 학습 및 소수 샷 적응 단계 모두에서 각 작업에 대해 (가변 크기의) 어댑터 하위 집합을 선택하는 라우팅 함수와 함께 어댑터 목록을 공동으로 학습합니다. 본 논문에서는 어댑터 라우팅이 성공에 미치는 역할을 조사하고, 이러한 발견을 기반으로 새로운 변형을 설계합니다. 첫째, 더 세분화된 라우팅이 더 높은 표현력을 제공한다는 직관에 기반하여, MHR(Multi-Head Routing)을 제안합니다. MHR은 어댑터 매개변수의 하위 집합을 결합하며, 유사한 매개변수 예산 하에서 Poly보다 우수한 성능을 보입니다. 라우팅 함수만 파인튜닝하고 어댑터는 파인튜닝하지 않는 경우(MHR-z)에도 극도로 높은 매개변수 효율성을 유지하면서 경쟁력 있는 성능을 달성합니다. 둘째, Poly/MHR의 성능은 이전에 가설대로 어댑터 재조합과 로컬 적응을 촉진하는 모듈화 유도 편향의 결과라기보다, 더 나은 다중 작업 최적화의 결과임을 발견했습니다. 실제로 MHR은 다른 어떤 방법보다 작업 간 기울기 정렬이 더 높은 것으로 나타났습니다. 이는 라우팅이 다중 작업 사전 학습 단계에서만 중요함을 의미하므로, 라우팅을 제거하고 소수 샷 적응 시 사전 학습된 어댑터의 평균을 파인튜닝하는 MHR-mu를 제안합니다. 이를 통해 MHR-mu는 단일 어댑터 파인튜닝을 위한 효과적인 방법으로 입증되었습니다.
먼저 학습 없이 라우팅을 시도해 보고 싶다면 Arrow LoRA 변형을 확인해 보세요.
API
PolyConfig
클래스 peft.PolyConfig
< 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 = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truepoly_type: Literal['poly'] = 'poly'n_tasks: int = 1n_skills: int = 4n_splits: int = 1 )
매개변수
- r (
int) — Poly의 각 Lora의 Attention 차원. - target_modules (
Union[List[str],str]) — Poly를 적용할 모듈의 이름들. - exclude_modules (
Optional[Union[List[str], str]]) — 어댑터를 적용하지 않을 모듈의 이름입니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다. - modules_to_save (
List[str]) — Poly 레이어를 제외한 최종 체크포인트에 저장할 학습 가능 모듈 목록 - init_weights (bool) — Poly 가중치 초기화를 수행할지 여부.
- poly_type (
Literal["poly"]) — 사용할 Poly 모듈의 변형입니다. 현재 “poly”만 지원됩니다. - n_tasks (
int) — 멀티태스킹 시나리오에서 작업의 수. - n_skills (
int) — 각 Poly 레이어의 스킬(LoRA) 수입니다. - n_splits (
int) — Poly 레이어의 각 LoRA 내부의 분할 수. 1보다 큰 값은 Multi-Head Routing(MHR) 사용임을 나타냅니다.
이것은 PolyModel의 구성을 저장하기 위한 구성 클래스입니다.
PolyModel
class peft.PolyModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )