GPT-SoVITS icon indicating copy to clipboard operation
GPT-SoVITS copied to clipboard

各位佬,这个有可能做成流式实时合成语音吗

Open 62bit opened this issue 1 year ago • 13 comments

如题

62bit avatar Mar 01 '24 10:03 62bit

如题

目前的推理速度还不行,作者大佬还没有公布缩小后的模型,据作者说速度可以double,我现在研究trt加速,目前还没有成功,先得解决推理速度

stevin-dong avatar Mar 01 '24 11:03 stevin-dong

能不能流式跟推理速度关系不大吧 目前的推理速度我感觉卡点在 GPT 模块的实时率比较低

另外,目前模型合成长句子的方式是切成短句合成不是吗? 句子级别的流式,是可接受的不?

TinaChen95 avatar Mar 06 '24 05:03 TinaChen95

目前的推理优化稀烂,垃圾点的N卡和先进点的N卡,速度差不太多 需要工程大佬入场。什么compile啊,triton啊,flashattention啊,trt啊。。。 我个人做算法的,工程上比较局限(´;ω;‘)

RVC-Boss avatar Mar 06 '24 10:03 RVC-Boss

如果只是单纯从接口上实现流式的话,现在有不少pull requests了,比如https://github.com/RVC-Boss/GPT-SoVITS/pull/448 https://github.com/RVC-Boss/GPT-SoVITS/pull/692 来推销一下我的推理特化项目: 一切语音合成基于一个统一的API服务,

并且实现了 前后端分离、模型管理、多角色/情绪切换、流式推理等特性。

https://www.yuque.com/xter/zibxlp

https://github.com/X-T-E-R/TTS-for-GPT-soVITS

X-T-E-R avatar Mar 06 '24 15:03 X-T-E-R

能不能流式跟推理速度关系不大吧 目前的推理速度我感觉卡点在 GPT 模块的实时率比较低

另外,目前模型合成长句子的方式是切成短句合成不是吗? 句子级别的流式,是可接受的不?

见上段

X-T-E-R avatar Mar 06 '24 15:03 X-T-E-R

目前的推理优化稀烂,垃圾点的N卡和先进点的N卡,速度差不太多 需要工程大佬入场。什么compile啊,triton啊,flashattention啊,trt啊。。。 我个人做算法的,工程上比较局限(´;ω;‘)

GPT类模型现在业界主流的算法工程方案是适当牺牲推理延迟(单个token生成的时间),换取更高的吞吐量,最简单的batch inference就能以大约1.5倍的推理时间换取10倍以上的吞吐量提高。实际上GPT-SoVITS的模型规模不大,正常来说 RTX 3090 上应该能达到 5000 tokens/s 的吞吐量。这里面优化一共要做两个事情,一个是算子计算优化,代表性的工具有 SDPA, flash attention 之类的工具,另一个是显存管理优化。显存管理优化一般会集成到一些推理服务框架里面,比如vllm, tensorrt-llm, flashinfer等。

现在的问题是,很多GPT-SoVITS的用户使用的是Windows,大部分推理服务框架都只支持 Linux 系统,也没有支持 Windows 的计划,想要在 Windows 上编译需要做大量修改。剩下可用的只有 flash attention,但是 flash attention 需要自己在 Windows 上编译,想要发布的二进制懒人包兼容各种 Windows 环境,需要很多人在不同的平台上进行测试。

还有一个选择就是提供基于 C++ 的推理实现,目前比较简单易用的是国人做的 fastllm,但是这个工具提供的 C++ 接口非常底层,而且过于小众,我不确定社区是否能修改/维护相应的推理代码。

GoHomeToMacDonal avatar Mar 06 '24 16:03 GoHomeToMacDonal

目前的推理优化稀烂,垃圾点的N卡和先进点的N卡,速度差不太多 需要工程大佬入场。什么compile啊,triton啊,flashattention啊,trt啊。。。 我个人做算法的,工程上比较局限(´;ω;‘)

GPT类模型现在业界主流的算法工程方案是适当牺牲推理延迟(单个token生成的时间),换取更高的吞吐量,最简单的batch inference就能以大约1.5倍的推理时间换取10倍以上的吞吐量提高。实际上GPT-SoVITS的模型规模不大,正常来说 RTX 3090 上应该能达到 5000 tokens/s 的吞吐量。这里面优化一共要做两个事情,一个是算子计算优化,代表性的工具有 SDPA, flash attention 之类的工具,另一个是显存管理优化。显存管理优化一般会集成到一些推理服务框架里面,比如vllm, tensorrt-llm, flashinfer等。

现在的问题是,很多GPT-SoVITS的用户使用的是Windows,大部分推理服务框架都只支持 Linux 系统,也没有支持 Windows 的计划,想要在 Windows 上编译需要做大量修改。剩下可用的只有 flash attention,但是 flash attention 需要自己在 Windows 上编译,想要发布的二进制懒人包兼容各种 Windows 环境,需要很多人在不同的平台上进行测试。

还有一个选择就是提供基于 C++ 的推理实现,目前比较简单易用的是国人做的 fastllm,但是这个工具提供的 C++ 接口非常底层,而且过于小众,我不确定社区是否能修改/维护相应的推理代码。

我转Onnx后,再转tensorrt,出错,有大佬转trt成功的吗: SubGraphCollection_t onnxruntime::TensorrtExecutionProvider::GetSupportedList(SubGraphCollection_t, int, int, const onnxruntime::GraphViewer&, bool*) const [ONNXRuntimeError] : 1 : FAIL : TensorRT input: /vq_model/enc_p/encoder_text/attn_layers.0/Pad_3_output_0 has no shape specified. Please run shape inference on the onnx model first. Details can be found in https://onnxruntime.ai/docs/execution-providers/TensorRT-ExecutionProvider.html#shape-inference-for-tensorrt-subgraphs 看错误信息是说没有指定形状,但是导出onnx时,指定参数形状导出又出错 微信图片_20240307123110

stevin-dong avatar Mar 07 '24 04:03 stevin-dong

目前的推理优化稀烂,垃圾点的N卡和先进点的N卡,速度差不太多 需要工程大佬入场。什么compile啊,triton啊,flashattention啊,trt啊。。。 我个人做算法的,工程上比较局限(´;ω;‘)

可别triton了,那个不支持winwodws,对于这种项目来讲没啥用

YIZXIY avatar Mar 07 '24 13:03 YIZXIY

xformers理论上应该能用在这个项目上吧

YIZXIY avatar Mar 07 '24 13:03 YIZXIY

xformers理论上应该能用在这个项目上吧

YIZXIY avatar Mar 07 '24 13:03 YIZXIY

目前的推理优化稀烂,垃圾点的N卡和先进点的N卡,速度差不太多 需要工程大佬入场。什么compile啊,triton啊,flashattention啊,trt啊。。。 我个人做算法的,工程上比较局限(´;ω;‘)

可别triton了,那个不支持winwodws,对于这种项目来讲没啥用

windows下的wsl2跑ubuntu巨好用,直接部署或者用docker,都没问题

0x5446 avatar May 25 '24 08:05 0x5446

vllm看了一下,不太行,这个项目的prefill和forward的行为是不一样的,flash infer的Page Attention感觉没那么有必要?占用不算大,他的采样内核倒是可以拿来用,现在AR的瓶颈其实是CPU,xformers的话,不如flash attn加速来的快

XXXXRT666 avatar Apr 04 '25 18:04 XXXXRT666