PEFT documentation

Block-Diagonal LoRA를 통한 텐서 병렬 LoRA 서빙에서 통신 오버헤드 제거

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Block-Diagonal LoRA를 통한 텐서 병렬 LoRA 서빙에서 통신 오버헤드 제거

Block-Diagonal LoRA(BD-LoRA)는 일부 LoRA 인자를 블록 대각 행렬로 제한하는 LoRA 변형입니다. 이를 통해 여러 GPU에서 추론을 실행할 때 통신 오버헤드를 제거하여 더 빠른 서빙이 가능합니다. 블록 대각 제약이 있음에도 불구하고, BD-LoRA는 유사한 매개변수 수에서 일반 LoRA와 동등한 성능을 보입니다.

BD-LoRA는 텐서 병렬ism과 함께 사용하도록 설계되어 있으며, 이는 모델의 가중치를 여러 GPU에 걸쳐 샤딩하는 것을 의미합니다. 인기 있는 샤딩 전략은 Megatron Sharding Strategy. 두 개의 선형 레이어 $W_1$, W2W_2 가 서로 연속으로 배치된 경우(예: transformer MLP 모듈의 up 및 down projection)를 생각해 보겠습니다. 첫 번째 레이어는 열 병렬(column-parallel) 방식으로 샤딩하며(이 경우 LoRA B가 블록 대각 행렬이어야 함), 두 번째 레이어는 행 병렬(row-parallel) 방식으로 샤딩합니다(이 경우 LoRA A가 블록 대각 행렬이어야 함). 어텐션 모듈의 경우에도 Q, K, V projection을 함께 W1W_1 로, 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

< >

( 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이어야 합니다.

Update on GitHub