CCLoRA
问题分析
LoRA微调算法通过更新附加在冻结预训练模型权重上的低秩矩阵,实现对模型的高效微调。过程中串行执行冻结预训练权重及低秩权重的前向和反向,在分布式场景,会造成冗余通信耗时。实际预训练分支与更新分支没有依赖关系,可通过异步方式实现通算优化;此外,通过挖掘数学等价的计算方式,可覆盖各种场景,实现极致性能优化。
解决方案
-
将单一流水优化为通信计算双流水线:

-
数学等价方式,合并通信:
在SP&Row场景,B是普通线性层,各卡参数一致,反向对A求导可以进行如下变换:
𝑔𝑟𝑎𝑑𝑎=all_𝑔ather(𝑔𝑟𝑎𝑑𝑦∗B)=all_𝑔ather(𝑔𝑟𝑎𝑑𝑦)∗B𝑔𝑟𝑎𝑑_𝑎=all\_𝑔ather (𝑔𝑟𝑎𝑑_𝑦∗ B ) = all\_𝑔ather(𝑔𝑟𝑎𝑑_𝑦)∗ B \\
因为在x的梯度计算中,可以利用MC2计算时获取all_gather(𝑔𝑟𝑎𝑑_𝑦):
gradx=all_𝑔ather(𝑔𝑟𝑎𝑑𝑦)∗Xgrad_x = all\_𝑔ather (𝑔𝑟𝑎𝑑_𝑦) * X \\
所以变换后,可以省略以下通信
𝑔𝑟𝑎𝑑𝑦∗B的all_gather𝑔𝑟𝑎𝑑_𝑦∗ B的all\_gather
-
数学等价方式,优化scale逻辑
输入:x∈RB×S×H,输出:Y=Wx+λBAx={Y=Wx+B(λA)x,若 BS<HY=(W+BλA)x,若 BS≥H 输入:x\in\mathbb{R}^{B\times S\times H}, \quad 输出: Y = Wx + \lambda BAx = \begin{cases} Y=Wx+B(\lambda A)x, & \text{若 }BS<H \\ Y=(W+B\lambda A)x, & \text{若 }BS\geq H & \end{cases}
使用方法
RC2以上版本,LoRA微调场景,算法与PP、VPP、分布式优化器等场景兼容
通过设置--lora-fusion开启CCLoRA的加速,在开启了TP或SP场景,加入--use-fused-mlp启用Fused_MLP算法,针对LoRA的MLP模块进一步进行计算通信掩盖提高性能。
注意:CCLoRA 与 --overlap-param-gather 特性冲突 , 不能同时使用。
使用效果
以下验证硬件信息为Atlas 900 A2 PODc,集群规模1x8
| 模型 | NPU | TP | PP | SP | 基线吞吐 | CCLoRA+吞吐 | 性能提升 |
|---|---|---|---|---|---|---|---|
| Llama2-7B-动态 | 8 | 8 | 1 | √ | 9.72 | 13.64 | 40.3% |
| Llama2-7B-pack | 8 | 8 | 1 | √ | 5.97 | 6.65 | 11.5% |
| Mixtral-7*8B-动态 | 8 | 1 | 4 | × | 13.97 | 20.55 | 47.1% |
| Llama2-70B-动态 | 8 | 1 | 4 | × | 13.50 | 14.75 | 9.3% |