PEFT documentation
Block-Diagonal LoRA를 통한 텐서 병렬 LoRA 서빙에서 통신 오버헤드 제거
Block-Diagonal LoRA를 통한 텐서 병렬 LoRA 서빙에서 통신 오버헤드 제거
Block-Diagonal LoRA(BD-LoRA)는 일부 LoRA 인자를 블록 대각 행렬로 제한하는 LoRA 변형입니다. 이를 통해 여러 GPU에서 추론을 실행할 때 통신 오버헤드를 제거하여 더 빠른 서빙이 가능합니다. 블록 대각 제약이 있음에도 불구하고, BD-LoRA는 유사한 매개변수 수에서 일반 LoRA와 동등한 성능을 보입니다.
BD-LoRA는 텐서 병렬ism과 함께 사용하도록 설계되어 있으며, 이는 모델의 가중치를 여러 GPU에 걸쳐 샤딩하는 것을 의미합니다. 인기 있는 샤딩 전략은 Megatron Sharding Strategy. 두 개의 선형 레이어 $W_1$, 가 서로 연속으로 배치된 경우(예: transformer MLP 모듈의 up 및 down projection)를 생각해 보겠습니다. 첫 번째 레이어는 열 병렬(column-parallel) 방식으로 샤딩하며(이 경우 LoRA B가 블록 대각 행렬이어야 함), 두 번째 레이어는 행 병렬(row-parallel) 방식으로 샤딩합니다(이 경우 LoRA A가 블록 대각 행렬이어야 함). 어텐션 모듈의 경우에도 Q, K, V projection을 함께 로, out projection을 $W_2$로 간주하여 그에 맞게 샤딩하면 유사하게 달성할 수 있습니다. 이 샤딩 방식은 호환되는 추론 엔진이 각 블록 대각 샤드를 서로 다른 GPU에 분배할 수 있게 하여 GPU 간 부분 결과 통신의 필요성을 줄여 줍니다. 아래 이미지에서 정확한 샤딩 전략과 이를 통해 계산 노력을 어떻게 절약하는지 확인할 수 있습니다.
논문: https://hf.co/papers/2510.23346

성능, 랭크 및 매개변수 수
BD-LoRA는 동일한 매개변수 수에서 LoRA와 유사한 성능을 달성합니다(아래 이미지 또는 peft 저장소 루트의 method_comparison 폴더를 참조). 그러나 BD-LoRA의 모든 다른 인자가 블록 대각선 형태이므로, 동일한 랭크에서 BD-LoRA 어댑터는 LoRA 어댑터보다 매개변수가 적습니다. BD-LoRA의 성능은 랭크를 이에 따라 증가시킬 때만 경쟁력이 있습니다. 이 예제 노트북의 끝부분에 랭크 매칭을 위한 예제 코드를 제공합니다.

API
BdLoraConfig
클래스 peft.BdLoraConfig
< source >( target_modules_bd_a: Optional[list[str]] = Nonetarget_modules_bd_b: Optional[list[str]] = Nonenblocks: int = 1match_strict: bool = True )
매개변수
- target_modules_bd_a —
LoRA-A가 블록 대각 행렬인 모듈. 목록의 각 패턴을
pattern is in target_name을 통해 모듈 이름과 일치시킵니다. 예: [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’] - target_modules_bd_b —
LoRA-B가 블록 대각인 모듈. 목록의 각 패턴을
pattern is in target_name을 통해 모듈 이름과 일치시킵니다. 예: [‘out_proj’, ‘down_proj’] - nblocks — 블록 대각 행렬의 블록 수
- match_strict — true로 설정하면 각 target_module에 block-diagonal LoRA-A 또는 LoRA-B가 하나씩 있어야 하며, 그렇지 않으면 오류를 발생시킵니다. 모듈의 일부 레이어가 BD-LoRA에서 이점을 얻지 못하는 경우와 같이 LoRA와 BD-LoRA 학습을 혼합하려면 이 값을 False로 설정할 수 있습니다.
BD-LoRA(블록 대각 LoRA) 설정. BD-LoRA는 추론 엔진에서 효율적인 멀티 LoRA 서빙에 사용할 수 있는 LoRA 변형입니다. 특정 LoRA 모듈을 블록 대각으로 설정하여 GPU 간 통신을 줄임으로써 속도 향상이 이루어집니다.
LoRA 인자 중 어떤 것을 블록 대각(block-diagonal)으로 설정해야 하는지 결정하려면 다음 지침을 따르십시오:
- attention의 경우, 다음을 설정합니다:
- LoRA-B 블록 대각 행렬이 될 Q,K,V 투영
- LoRA-A 블록 대각형으로 설정할 Out projection
- MLP의 경우, 다음을 설정합니다:
- Up, Gate 투영을 LoRA-B 블록 대각으로
- LoRA-A 블록 대각 행렬로 다운 프로젝션
기타 모듈 및/또는 아키텍처의 경우, 대상 추론 엔진의 코드를 확인하세요. row-sharding된 모듈은 LoRA-A가 block-diagonal이어야 하고, column-sharding된 모듈은 LoRA-B가 block-diagonal이어야 합니다.