CosyVoice icon indicating copy to clipboard operation
CosyVoice copied to clipboard

为什么新版本带 cache的flow流式合成,比之前不带cache的flow版本流式合成还慢了呢?

Open JohnHerry opened this issue 8 months ago • 4 comments

如题,我们是直接测试 flow.pt的流式合成,没有使用 TesnorRT float16格式。
4090的卡,单卡; 没有引入flow的 各种cache之前, 流式合成【chunk大小为2秒】的RTF为 0.18到0.2之间; 新版本带了各种cache之后的flow模型的流式合成,【chunk大小还是2秒】的RTF 降低到 0.38到0.44。 这里RTF,是指flow 推理计算耗除以 flow生成的梅尔音频时长。 这样一看,加了cache以后,RTF变慢了一倍以上啊? 难道加cache不就是为了加速吗?怎么还越来越慢了呢? 【只测试了flow,不包括上游LLM和下游hift,模型是用自己的数据训练的。 使用了CosyVoice2 dev/lyuxiang.lx 分支 20250331 版本代码】

JohnHerry avatar Apr 24 '25 01:04 JohnHerry

另外,带cache的流式flow模型,做流式合成时,感觉有一种说话人正在走近的感觉,也就是第一个chunk 2秒感觉发音人可能在远场,下一个chunk 2秒,感觉说话人已经走近自己很多;下一个chunk 更近,音量更大一些。 感觉从音量、听感上,就是合成发音人在不断走近麦克风。

JohnHerry avatar Apr 24 '25 09:04 JohnHerry

是的,就是在拉倒车,流式之后音质还有损失,没以前好了。我已经在生产环境退回1月份的代码了

lovewater avatar Apr 27 '25 11:04 lovewater

+1,同问;之前3月份的时候,flow推理挺快的,现在最新代码推理速度慢了好几倍

duanyu avatar May 16 '25 03:05 duanyu

我分析了一下flow中各个步骤的推理时长(非流式生成、机器4090),发现首先 estimator cache的初始化非常耗时(>1s),然后每一步的forward_estimator也很耗时(接近0.2s/step),我猜测可能是新引入的cache机制导致推理速度显著变慢。

不过有办法通过改代码让 非流式生成 + 非trt 设定下的推理速度回到之前:

  1. 把estimator cache的初始化部分注释掉;
  2. 在forward_estimator时,改用self.estimator.forward(x, mask, mu, t, spks, cond)。

测试了一下,flow的推理速度大概能回到0.6s-0.7s。如果还想进一步提速,可以考虑手动修改n_timesteps参数,减少decode steps。

duanyu avatar May 16 '25 05:05 duanyu