PEFT documentation
LoRA de bloque diagonal para eliminar la sobrecarga de comunicación en la entrega de LoRA con paralelismo de tensor
LoRA de bloque diagonal para eliminar la sobrecarga de comunicación en la entrega de LoRA con paralelismo de tensor
Block-Diagonal LoRA (BD-LoRA) es una variante de LoRA en la que algunos factores de LoRA están restringidos a ser bloque-diagonales. Esto permite una inferencia más rápida al eliminar las sobrecargas de comunicación al ejecutar la inferencia en varias GPU. A pesar de la restricción de bloque-diagonal, BD-LoRA tiene un rendimiento similar al de LoRA estándar con un número de parámetros similar.
BD-LoRA está diseñado para usarse con paralelismo de tensores, lo que significa dividir los pesos de un modelo entre varias GPU. Una estrategia de división popular es la Estrategia de división de Megatron. Para dos capas lineales $W_1$, que se suceden (por ejemplo, las proyecciones ascendente y descendente en un módulo MLP de un transformer), dividiremos la primera capa de forma paralela por columnas (lo que requiere que LoRA B sea bloque-diagonal) y la segunda capa de forma paralela por filas (lo que requiere que LoRA A sea bloque-diagonal). Para el módulo de atención, esto se puede lograr de manera similar tomando las proyecciones Q, K y V juntas como y la proyección de salida como $W_2$, dividiéndolas en consecuencia. Esta división permite que un motor de inferencia compatible distribuya cada fragmento bloque-diagonal en una GPU diferente, reduciendo la necesidad de comunicar resultados parciales entre las GPU. En la imagen siguiente, puede ver la estrategia de división exacta y cómo esto ahorra esfuerzos computacionales.
Artículo: https://hf.co/papers/2510.23346

Rendimiento, rango y número de parámetros
BD-LoRA logra un rendimiento similar al de LoRA (véase la imagen siguiente o la carpeta method_comparison en la raíz del repositorio peft) con la misma cantidad de parámetros. Sin embargo, dado que todos los demás factores en BD-LoRA son bloque-diagonales, un adaptador BD-LoRA tendrá menos parámetros que un adaptador LoRA con el mismo rango. El rendimiento de BD-LoRA solo es competitivo cuando el rango se aumenta en consecuencia. Proporcionamos código de ejemplo para igualar el rango al final de este cuaderno de ejemplo.

API
BdLoraConfig
clase 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 donde el LoRA-A es bloque diagonal. Cada patrón de la lista se compara con el nombre del módulo mediante
pattern is in target_name. Ejemplo: [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’] - target_modules_bd_b —
Módulos donde el LoRA-B es bloque diagonal. Cada patrón de la lista se compara con el nombre del módulo mediante
pattern is in target_name. Ejemplo: [‘out_proj’, ‘down_proj’] - nblocks — Número de bloques en matrices bloque-diagonales
- match_strict — Si se establece en true, exige que cada target_module tenga un LoRA-A o un LoRA-B de bloque diagonal, y lanza un error en caso contrario. Puedes establecerlo en False para combinar el entrenamiento con LoRA y BD-LoRA, por ejemplo, si algunas capas de tu módulo no se benefician de BD-LoRA.
Configuración para BD-LoRA (Block-Diagonal LoRA). BD-LoRA es una variante de LoRA que puede usarse para el servicio eficiente de múltiples LoRA en motores de inferencia. La aceleración proviene de la reducción de la comunicación entre GPUs al establecer ciertos módulos de LoRA como bloque-diagonales.
Para determinar qué factores de LoRA deben configurarse como bloque-diagonales, siga estas directrices:
- Para la atención, configura
- Proyecciones Q,K,V para ser bloque-diagonales en LoRA-B
- Proyección de salida para que el bloque LoRA-A sea diagonal por bloques
- Para MLPs, configura
- Arriba, la proyección de Gate para ser bloque diagonal de LoRA-B
- Proyección descendente para que el bloque diagonal por bloques sea LoRA-A
Para otros módulos y/o arquitecturas, consulte el código de su motor de inferencia objetivo. Los módulos que se fragmentan por filas deben tener LoRA-A bloque diagonal, y los módulos que se fragmentan por columnas deben tener LoRA-B bloque diagonal.