Adapter 개념 가이드
Adapter 개념 가이드
어댑터(Adapter)는 PEFT의 가장 기본적인 아이디어예요. 원본 모델 가중치를 그대로 두고, Transformer 레이어 사이에 작은 학습 가능한 모듈을 끼워 넣어 도메인·작업별 적응을 하는 방식이에요.
이렇게 하면 기본 모델 하나를 여러 용도로 재사용할 수 있어요. 작업마다 어댑터만 따로 저장·배포하면 되니까 저장 공간과 전환 비용이 작아져요.
출처: https://huggingface.co/docs/peft/main/en/conceptual_guides/adapter
조합 가능성
PEFT 방법들은 서로 직교(orthogonal)해서 함께 결합할 수 있어요. 예를 들어:
- LoRA + Prefix-Tuning
- LoRA + 양자화(bitsandbytes) — QLoRA
- 어댑터 여러 개를 하나의 모델에 탑재해 멀티테넌트·다중 작업
멀티 어댑터 추론
adapter_names 인자로 배치 안에서 샘플별로 다른 어댑터를 적용할 수 있어요.
adapter_names = [
"__base__", "__base__", "__base__",
"adapter_fr", "adapter_fr", "adapter_fr",
"adapter_de", "adapter_de", "adapter_de",
]
output = peft_model.generate(**inputs, adapter_names=adapter_names, max_new_tokens=20)
주의점 (Caveats)
- 이 기능은 추론 전용이에요 (학습 아님).
with model.disable_adapter()컨텍스트가adapter_names보다 우선해요.merge_adapter로 어댑터를 base에 병합한 뒤에는adapter_names를 쓸 수 없어요 —unmerge_adapter()로 먼저 분리.merge_and_unload()이후엔 전부 병합되므로 사용 불가.- DoRA와는 호환 안 됨 →
use_dora=False필요. modules_to_save는Linear·Embedding·Conv2d·Conv1d레이어에서만 지원.- 어댑터 종류가 많으면 배치가 사실상 어댑터별로 쪼개져 오버헤드가 생겨요.