CosyVoice icon indicating copy to clipboard operation
CosyVoice copied to clipboard

提高flow模型训练速度和GPU浮点利用率的方法收集

Open JohnHerry opened this issue 7 months ago • 6 comments

请教各位做过flow模型自有数据训练的朋友,最好是做过from-scratch训练的。 如何提升flow模型训练时【单机多卡】的GPU浮点利用率?以及提升模型训练速度? 我们不做修改下,单机多卡H800,flow-matching的训练时的浮点利用率不到60%,有进一步提升的方法吗?

JohnHerry avatar May 26 '25 02:05 JohnHerry

增加num_worker增加batch_size

aluminumbox avatar May 26 '25 03:05 aluminumbox

已试过。 增加num_worker配置,超过8时是下降的;增加batch_size, 我们目前的8000是最好的,如果是用默认的12000或者更大,那么训练速度更慢。 我们的数据集小样本比较多,单条1到5秒内的样本占比比较大。是不是每个样本时长限制的大一点更好?

JohnHerry avatar May 26 '25 03:05 JohnHerry

还试过增加 prefetch size, 以及将flow forward中 data to cuda,加一个non_blocking=True, 结果都影响不大。 尝试过将data to cuda的过程,从flow的foward函数中,搬运到dataloader的processor中,可以极大的提升训练速度和GPU浮点利用率。但是在一个epoch训练结束后,可能由于缺乏多卡间同步机制,训练会超时崩溃。

JohnHerry avatar May 26 '25 07:05 JohnHerry

楼主微调flow 的效果(在音质和相似度方面) 会比开源效果更好嘛 ? 我这边在10小时数据上微调的效果比开源的稍差, 不太确定是什么原因.......

SunDaSheng01 avatar May 27 '25 12:05 SunDaSheng01

AR微调可以降低CER, flow微调可以提升音色相似度。

JohnHerry avatar May 28 '25 01:05 JohnHerry

哪位尝试过deepspeed训练吗? 是不是会比ddp训练快几倍呢?

JohnHerry avatar May 28 '25 08:05 JohnHerry

微调效果比官方差+1

boji123 avatar Jun 16 '25 09:06 boji123

实验中发现一个矛盾点。 如果我们用 AMP混合精度训练,那么用官方配置的 0.001这么高的学习率,是训练不下去的,训练很不稳定。特别是带cache的流式flow-matching版本。 如果调低学习率,可以勉强训练个100多万步,模型基本收敛了,但是实际测试效果,会比全精度训练的flow-matching,差了一截。
也就是全精度模型,可以用高学习率,效果也好一些,但是不能转tensorrt fp16格式去推理。因为推理时会数值溢出,生成静音。 而混合精度训练,必须降低学习率才能训练下去,而且混合精度模型转成tensorrt fp16推理时非常稳定,不会有数值溢出,但是模型性能会变差。
GPU利用率的话,把代码里一些不必要的显存操作【某些,注意不是全部,带contiguours() 调用的,需要重新生成内存东东的】弄掉以后,模型训练GPU利用率会有5%左右提升。理论上对模型效果没有影响。

JohnHerry avatar Jun 20 '25 02:06 JohnHerry

请问各位做flow-matching的AMP base模型训练的时候,一般同时使用几张卡啊?感觉做多卡AMP训练的时候,相对更容易出现梯度消失或者爆炸。而单卡训练虽然梯度和损失曲线看着正常,往往合成的都是噪音。
请问大家做flow-matching from scratch 模型训练的时候,是使用8卡还是4卡的?

JohnHerry avatar Jul 01 '25 01:07 JohnHerry