Speech-AI-Forge icon indicating copy to clipboard operation
Speech-AI-Forge copied to clipboard

Dynamic batch_size

Open zhzLuke96 opened this issue 9 months ago • 8 comments

对于支持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 avatar Mar 04 '25 19:03 zhzLuke96

@zhzLuke96 您好,目前没有看到 batch_size='auto_max' 和 vram_utilization 的可配置项,请问在哪里修改?另外,在参数里看到了 vLLM 的配置项,请问目前是否支持 vLLM 呢?

CJY1018 avatar Mar 25 '25 17:03 CJY1018

@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 avatar Mar 25 '25 19:03 zhzLuke96

@zhzLuke96 感谢您的回复,我的需求是100k 条文本的合成,且需要用种子控制随机音色。请问在这个规模的数据量下,有什么批处理的方法,或您有什么优化建议吗?

CJY1018 avatar Mar 26 '25 03:03 CJY1018

@CJY1018 对于你的需求现目前没有特别好的方法batch,因为现在实现的推理是 多输入,单输出 的形式 多对一 推理,只能加速单个音频生成,所以你需要的多音频batching现在做不到

所以说,你现在需要批量生成的话,暂时只能通过启动多个实例并行来加速

关于多上下文并行推理我开了个新的 story https://github.com/lenML/Speech-AI-Forge/issues/216

zhzLuke96 avatar Mar 26 '25 08:03 zhzLuke96

@zhzLuke96 好的,请问您了解ChatTTS的文本口语化用的是什么模型吗?是作者自己训练的吗?

CJY1018 avatar Apr 13 '25 10:04 CJY1018

@zhzLuke96 好的,请问您了解ChatTTS的文本口语化用的是什么模型吗?是作者自己训练的吗?

@CJY1018 我不太清楚你说的 文本口语化 指的是什么?我猜测你想说的是 refiner 文本重写过程?

这个不是其他模型,就是 chattts 本身权重 chattts你可以理解为一个多模态llm,可以处理audio和text序列

  • tts就是 text => audio
  • 口语化过程就是 text => text,其中涉及到的 speed oral 之类的参数其实就是文本提示词

zhzLuke96 avatar Apr 13 '25 11:04 zhzLuke96

@zhzLuke96 感谢您的回复。是的,我指的是refine_text的过程,我看到有一个gpt模型。然后文字可以单独重写,可以不用TTS合成 独立推理,这一点我不太理解

CJY1018 avatar Apr 13 '25 13:04 CJY1018

我看到有一个gpt模型

对的,是一个llama模型,chattts整个就是gpt模型,只是生成语音token之后会解码成音频,如果只生成文本就完全可以当作一个gpt模型

可以不用TTS合成 独立推理,这一点我不太理解

不是说可以不用tts,而是生成文本和生成语音的过程都是一样的,都是 next token predict 但是多模态模型不一样的是 next token 可以不是文本 token 并且训练之后可以让模型接下来只输出 文本token 或者 只输出 音频token

  • 如果要求模型只输出 文本token ,对于chattts来说就是做重写任务 (这个能力是由他们使用的训练数据决定的,想做其他任务应该也可以,只是他们没准备数据训练)
  • 如果要求模型只输出 音频token,那么就是 tts 合成

zhzLuke96 avatar Apr 13 '25 14:04 zhzLuke96