PEFT documentation
LoRA Bloco-Diagonal para Eliminar o Overhead de Comunicação no Servimento de LoRA Paralelo em Tensors
LoRA Bloco-Diagonal para Eliminar o Overhead de Comunicação no Servimento de LoRA Paralelo em Tensors
Block-Diagonal LoRA (BD-LoRA) é uma variante do LoRA na qual alguns fatores do LoRA são restritos a serem bloco-diagonais. Isso permite um atendimento mais rápido ao eliminar os sobrecustos de comunicação ao executar inferência em múltiplas GPUs. Apesar da restrição bloco-diagonal, o BD-LoRA apresenta desempenho semelhante ao do LoRA padrão para contagens de parâmetros equivalentes.
O BD-LoRA foi projetado para ser usado com paralelismo de tensor, o que significa dividir os pesos de um modelo entre várias GPUs. Uma estratégia de divisão popular é a Estratégia de Divisão Megatron. Para duas camadas lineares $W_1$, que se seguem (por exemplo, as projeções up e down em um módulo MLP de um transformer), dividiremos a primeira camada de forma paralela por colunas (o que exige que o LoRA B seja bloco-diagonal) e a segunda camada de forma paralela por linhas (o que exige que o LoRA A seja bloco-diagonal). Para o módulo de atenção, isso pode ser alcançado de forma semelhante, agrupando as projeções Q, K e V como e a projeção de saída como $W_2$, dividindo-as de acordo. Essa divisão permite que um mecanismo de inferência compatível distribua cada fragmento bloco-diagonal em uma GPU diferente, reduzindo a necessidade de comunicar resultados parciais entre as GPUs. Na imagem abaixo, você pode ver a estratégia exata de divisão e como isso economiza esforços computacionais.
Artigo: https://hf.co/papers/2510.23346

Desempenho, classificação e número de parâmetros
BD-LoRA atinge desempenho semelhante ao do LoRA (veja a imagem abaixo ou a pasta method_comparison na raiz do repositório peft) com a mesma contagem de parâmetros. No entanto, como todos os outros fatores no BD-LoRA são bloco-diagonais, um adaptador BD-LoRA terá menos parâmetros do que um adaptador LoRA no mesmo rank. O desempenho do BD-LoRA é competitivo apenas quando o rank é aumentado de forma correspondente. Fornecemos código de exemplo para correspondência de rank no final deste notebook de exemplo.

API
BdLoraConfig
classe peft.BdLoraConfig
< source >( target_modules_bd_a: Optional[list[str]] = Nonetarget_modules_bd_b: Optional[list[str]] = Nonenblocks: int = 1match_strict: bool = True )
Parâmetros
- target_modules_bd_a —
Módulos em que o LoRA-A é bloco-diagonal. Cada padrão na lista é correspondido ao nome do módulo via
pattern is in target_name. Exemplo: [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’] - target_modules_bd_b —
Módulos em que o LoRA-B é bloco-diagonal. Cada padrão na lista é correspondido ao nome do módulo via
pattern is in target_name. Exemplo: [‘out_proj’, ‘down_proj’] - nblocks — Número de blocos em matrizes bloco-diagonais
- match_strict — Se definido como true, exige que cada target_module tenha um LoRA-A ou LoRA-B em bloco diagonal, e lança um erro caso contrário. Você pode definir isso como False para misturar o treinamento de LoRA e BD-LoRA, por exemplo, se algumas camadas do seu módulo não se beneficiarem do BD-LoRA.
Configuração para BD-LoRA (Block-Diagonal LoRA). O BD-LoRA é uma variante do LoRA que pode ser usada para servir múltiplos LoRA de forma eficiente em motores de inferência. A aceleração resulta da redução da comunicação entre GPUs ao definir certos módulos LoRA como bloco-diagonais.
Para determinar quais fatores de LoRA devem ser definidos como bloco-diagonais, siga estas diretrizes:
- Para a atenção, defina
- Projeções Q,K,V para serem bloco-diagonais em LoRA-B
- Projeção de saída para ser bloco-diagonal LoRA-A
- Para MLPs, defina
- Up, projeção Gate para ser bloco-diagonal LoRA-B
- Projeção descendente para ser bloco diagonal LoRA-A
Para outros módulos e/ou arquiteturas, consulte o código do seu motor de inferência de destino. Módulos que são particionados por linha devem ter LoRA-A bloco-diagonal, e módulos que são particionados por coluna devem ter LoRA-B bloco-diagonal.