Dynamic batch_size
对于支持batch生成的模型(其实应该都支持,官方库没支持的一般后续都能支持上),我们只要加大batch size即可加速长文本合成,但是目前的batch切割是固定size,并且vram面积其实一定程度上是随机的 我们可以根据每个segment中的token长度估算vram使用最大值,可以设置vram使用策略,最高效的使用vram
因此,此提升无法加快实时生成,但是可以极大优化长文本生成的情况
主要的点:
- 矩阵估算,
batch_size * L * C = V- L: 当前batch中最长token数
- C: 模型系数
- V: 预估最大vram占用面积
- 不同模型的预估方程系数可能不同
- 应该可以通过算法调整 segment 合成顺序最大化利用 vram 面积
- 应该只涉及 BatchGenerate 这个类
- 结果:增加
batch_size='auto_max'的参数可配置项,增加vram_utilization可配置项
@zhzLuke96 您好,目前没有看到 batch_size='auto_max' 和 vram_utilization 的可配置项,请问在哪里修改?另外,在参数里看到了 vLLM 的配置项,请问目前是否支持 vLLM 呢?
@CJY1018 这个story还在计划中,还没写 😂
关于vllm,vllm目前属于完全没接入,只是chattts有一个测试分支,留了个口测试过一次
- 主要是vllm的多模态支持貌似还是不太完善 https://github.com/vllm-project/vllm/issues/4194
- 不是所有模型所有模块都可以通过 vllm 加速,虽然基于llama但是还是和纯llm不同,推理瓶颈不一定在llm里
- 有的模型不是based llm的,比如f5tts
具体之后能不能用上vllm还是看上游库 vllm自身以及各个tts模型的官方支持,这里不会特别跟进vllm
@zhzLuke96 感谢您的回复,我的需求是100k 条文本的合成,且需要用种子控制随机音色。请问在这个规模的数据量下,有什么批处理的方法,或您有什么优化建议吗?
@CJY1018 对于你的需求现目前没有特别好的方法batch,因为现在实现的推理是 多输入,单输出 的形式 多对一 推理,只能加速单个音频生成,所以你需要的多音频batching现在做不到
所以说,你现在需要批量生成的话,暂时只能通过启动多个实例并行来加速
关于多上下文并行推理我开了个新的 story https://github.com/lenML/Speech-AI-Forge/issues/216
@zhzLuke96 好的,请问您了解ChatTTS的文本口语化用的是什么模型吗?是作者自己训练的吗?
@zhzLuke96 好的,请问您了解ChatTTS的文本口语化用的是什么模型吗?是作者自己训练的吗?
@CJY1018 我不太清楚你说的 文本口语化 指的是什么?我猜测你想说的是 refiner 文本重写过程?
这个不是其他模型,就是 chattts 本身权重 chattts你可以理解为一个多模态llm,可以处理audio和text序列
- tts就是
text => audio 口语化过程就是text => text,其中涉及到的 speed oral 之类的参数其实就是文本提示词
@zhzLuke96 感谢您的回复。是的,我指的是refine_text的过程,我看到有一个gpt模型。然后文字可以单独重写,可以不用TTS合成 独立推理,这一点我不太理解
我看到有一个gpt模型
对的,是一个llama模型,chattts整个就是gpt模型,只是生成语音token之后会解码成音频,如果只生成文本就完全可以当作一个gpt模型
可以不用TTS合成 独立推理,这一点我不太理解
不是说可以不用tts,而是生成文本和生成语音的过程都是一样的,都是 next token predict
但是多模态模型不一样的是 next token 可以不是文本 token
并且训练之后可以让模型接下来只输出 文本token 或者 只输出 音频token
- 如果要求模型只输出
文本token,对于chattts来说就是做重写任务(这个能力是由他们使用的训练数据决定的,想做其他任务应该也可以,只是他们没准备数据训练) - 如果要求模型只输出
音频token,那么就是 tts 合成