VPP优化工作
1.优化vpp编排
1. pp_degree==acc_steps的vpp编排优化
当前的vpp编排思想,针对pp_degree与acc_steps二者相等时,采用的是直接将编排模式设置为了FthenB的编排,该方法并不能达到vpp编排思想的降低设备的显存峰值,实际在设备中的编排效果如下图所示,此时pp_degree=acc_steps=4,num_chunks=2,hidden_layer=8

代码优化后的图如下,可以看到,我们能和vpp编排思想保持一致,成功降低设备的峰 值显存

2. acc_steps%pp_degree !=0 时vpp编排支持
当前的vpp编排思想,不支持非均衡vpp的编排,即,只有当acc_steps为pp_degree的整数倍时,才能实现编排,因此我对代码做了改进,改进后,只需要保证acc_steps>=pp_degree即可,现在能支持非均衡vpp的编排,编排效果图如下,此时pp_degree=4,acc_steps=5,num_chunks=2,hidden_layer=8

工作具体相关文档:vpp非均匀切分任务
2.支持VPP去尾操作
- 当前的vpp编排仅仅支持模型hidden_layer层数整除vpp_degree的情况,然而在很多时候,模型hidden_layer的最后一层的计算量和计算时间往往都要大于前面的层,因此为了满足一定精度的同时拥有更快的训练速度,往往可以将hidden_layer的最后一层给去掉,不会给模型带来较大的精度影响, 尤其是模型很大的时候,同时也能使训练速度有一个较高的提升,因此支持vpp去尾操作具有价值较大的现实意义。
- 这里我将展示一个在
llama模型上测试的效果,此时我设定的pp_degree=4,vpp_degree=2,acc_step=4: 当hidden_layer=8时,vpp编排的结果如下:
当hidden_layer=7时,vpp编排的结果如下:
因为vpp编排是根据chunk进行编排的,所以在两个参数下,编排的效果是一致的,这也证明了代码的准确性和通用性 - 同时我们观察一下训练10个step后的结果:
当hidden_layer=8时,训练后的结果如下:
当hidden_layer=8时,训练后的结果如下:
可以看到,此时loss相差0.007,但是时间上相差了0.005*10=0.05s。而这仅仅是训练的step为10,并且hidden_layer较小时的结果,可以预期,当模型较大,训练步数较大时,带来的时间收益是非常显著的。
工作具体相关文档:Vpp去尾工作