-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tts infer重构优化和批量推理支持 #721
tts infer重构优化和批量推理支持 #721
Conversation
使t2s模型支持批量推理: GPT_SoVITS/AR/models/t2s_model.py 修复batch bug GPT_SoVITS/AR/models/utils.py 重构的tts infer GPT_SoVITS/TTS_infer_pack/TTS.py 文本预处理模块 GPT_SoVITS/TTS_infer_pack/TextPreprocessor.py new file GPT_SoVITS/TTS_infer_pack/__init__.py 文本拆分方法模块 GPT_SoVITS/TTS_infer_pack/text_segmentation_method.py tts infer配置文件 GPT_SoVITS/configs/tts_infer.yaml modified GPT_SoVITS/feature_extractor/cnhubert.py modified GPT_SoVITS/inference_gui.py 重构的webui GPT_SoVITS/inference_webui.py new file GPT_SoVITS/inference_webui_old.py
添加音频倍速支持: GPT_SoVITS/inference_webui.py
Update
|
…into rebuild-and-optimize
批量推理备份文件: GPT_SoVITS/AR/models/t2s_model_batch_only.py
Update
|
增加一些新特性,并修复了一些bug GPT_SoVITS/TTS_infer_pack/TTS.py 优化网页布局 GPT_SoVITS/inference_webui.py
(1, x_len + y_len), dtype=torch.bool, device=xy_pos.device | ||
) | ||
y_emb = self.ar_audio_embedding(y[:, -1:]) | ||
xy_pos = y_emb * self.ar_audio_position.x_scale + self.ar_audio_position.alpha * self.ar_audio_position.pe[:, y_len + idx].to( dtype= y_emb.dtype,device=y_emb.device) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
padding之后,self.ar_audio_position.pe[:, y_len + idx]
里面的位置y_len+idx是错误的,这里需要对每个句子单独计算,单独取出来。个人建议使用类似transformers
的方式,使用一个position_ids
来记录对应的位置,每次循环+1即可。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
感谢指正,我待会看看。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我觉得应该不用单独算,因为y实际上没有padding。实际测试下来似乎也没啥问题🤔
fixed some bugs GPT_SoVITS/TTS_infer_pack/TTS.py
批量推理是指能同时接收多个推理指令(并发?); |
就是朴实无华的并行计算。在用CUDA之类的计算加速卡,以一个batch_size的大小的张量进行并行计算时,会更快一点,获得几乎成倍的提升。 |
懂了,感谢解答; |
如果设置"return_fragment": True,会报错
像下图一样就可以修正
|
@X-T-E-R 感谢你的测试,我待会修复它 |
您好,您有其他的联系方式吗,多段返回还有较多的问题,我比较希望在线与您取得联系 |
有比较多的反馈,合入这个PR后,生成的语音吞字、重复问题变严重,是否可以加个开关控制是否开启这个特性? @RVC-Boss @ChasonJiang |
@yiya1989 还没合并进主分支呢,不想用并行推理,设置batch_size=1就和主分支一样了 |
感谢老哥的回复,感谢为项目的付出! 我是用的B站 up主做的一键整合包。他这里确实用了你这个分支的代码。我本地跑效果来看,吞音重复问题确实更明显了。可以关注下。 |
他这版本太老了bug比较多,建议用官方的fast_inference分支,当batch_size>1时,重复的问题确实更明显了;用batch_size=1就好了,不过要慢得多 |
了解了,多谢!我看 fast_inference 是有相关代码的。但是pr标题是merge到main分支。这个是因为pr一开始提的是main分支,但后面更换了目标分支为fast_inference,所以导致pr提示的merge分支不准确么? |
是的 |
tts infer重构优化和批量推理支持
改进内容
评估
测试环境:Windows 11, i5-13600KF + RTX4070
测试设置:fp16, batch_size=10 (Original 为1),测试10次取均值
测试文本:
测试结果:
状态
Warning: 改动较大,建议大量测试后再merge。