PEFT documentation
RoAd
RoAd
RoAd는 숨겨진 차원의 쌍에 적용되는 소수의 2×2 회전 행렬(및 선택적 스케일링 인자)을 학습하여 대규모 언어 모델을 적응시키는 매개변수 효율적 미세 조정(PEFT) 기법입니다. RoAd는 학습 가능한 매개변수가 0.1% 미만임에도 불구하고 다른 PEFT 방법과 비교하여 경쟁력 있거나 우수한 성능을 달성합니다. LoRA의 배치된 저순위 업데이트와 달리, RoAd의 희소 회전은 단순한 요소별 연산으로 재구성되어, 동일한 배치에서 이질적인 요청을 처리할 때, 즉 여러 어댑터를 동시에 서빙할 때, 서빙 처리량이 현저히 높아집니다. 또한, RoAd는 분산된 상호 교환 개입 프레임워크에 원활하게 통합되며, 학습된 숨겨진 표현의 부분 공간 내에서 희소 2D 회전을 작업별 개입으로 해석합니다. 이러한 직교 부분 공간은 추가적인 미세 조정 없이 다국어 능력이나 지시 따르기 같은 여러 작업별 동작을 병합하여 구성할 수 있어, LLM에서 모듈화되고 해석 가능한 적응을 가능하게 합니다.
RoAd를 사용한 Fine-tuning은 LoRA 또는 유사한 방법과 비교하여 일반적으로 더 높은 학습률이 필요하며, 대략 1e-3 수준입니다. 현재 RoAd는 선형 레이어만 지원하며, bitsandbytes로 양자화된 모델(4-bit 또는 8-bit)에 사용할 수 있습니다.
같은 배치에서 서로 다른 RoAd 어댑터를 사용하여 추론을 실행하는 방법은 같은 배치에서 서로 다른 LoRA 어댑터를 사용하여 추론을 참고하세요.
벤치마크 개요
API
RoadConfig
class peft.RoadConfig
< 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 = Falsevariant: Union[str, RoadVariant] = 'road_1'group_size: int = 64init_weights: bool = Truetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = None )
매개변수
- variant (Union[
RoadVariant,str]) — 사용할 Road 모델의 variant입니다. road_1, road_2, road_4 중 하나를 사용할 수 있습니다. 자세한 내용은 논문을 참고하세요.- road_1: 모든 요소 쌍에 동일한 스케일과 각도를 사용합니다. 이 변형은 매개변수 수가 가장 적으며, RoAd가 적용되는 각 레이어마다 출력 숨겨진 크기와 동일한 수의 매개변수를 저장합니다.
- road_2: 각 요소에 동일한 스케일과 각도를 사용합니다. 이 변형은 road_1에 비해 매개변수 수가 2배입니다.
- road_4: 각 요소에 서로 다른 두 개의 스케일과 각도를 사용합니다. 이 변형은 road_1에 비해 매개변수 수가 4배 많습니다.
- group_size (
int) — Group size는 회전(rotations)을 위해 요소들이 2D 벡터로 묶이는 방식을 정의합니다. 각 그룹 내에서 element 0은 element group_size/2와 짝을 이루고, element 1은 element group_size/2+1과 짝을 이루는 식으로 진행됩니다. 요소들은 순서가 없으므로 모델 성능에는 영향을 주지 않지만, VLLM 등에서 사용할 경우 추론 속도에 일定的한 영향을 미칩니다. 최적의 속도를 위해 group size는 최소 32 또는 64(기본값) 이상으로 설정하는 것이 권장됩니다. 모델 hidden size(또는 tensor parallelism을 사용할 경우 파티션별 hidden size)가 group_size로 나눠져야 하므로, 매우 작은 모델의 경우 이 파라미터를 줄여야 할 수 있습니다. - init_weights (
bool) — RoAd 가중치 초기화를 수행할지 여부. - target_modules (
Optional[Union[List[str], str]]) — 어댑터를 적용할 모듈의 이름입니다. 이 값이 지정되면 지정된 이름을 가진 모듈만 교체됩니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다. 이 값이 ‘all-linear’로 지정되면 모든 linear/Conv1D 모듈이 선택됩니다(모델이 PreTrainedModel인 경우 출력 레이어는 제외). 이 값이 지정되지 않으면 모델 아키텍처에 따라 모듈이 선택됩니다. 아키텍처가 알려지지 않은 경우 오류가 발생하며, 이 경우 대상 모듈을 수동으로 지정해야 합니다. - modules_to_save (
List[str]) — Road 레이어를 제외한 최종 체크포인트에 저장할 학습 가능 모듈 목록.
이것은 RoadModel의 구성을 저장하기 위한 구성 클래스입니다. RoAd 어댑터는 https://huggingface.co/papers/2409.00119에서 제안되었습니다.
RoadModel
class peft.RoadModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )