Skip to content

Conversation

@JackyHe398
Copy link

现存问题

现在如果想在GPTSoVITS的推理模组上开发小工具,几乎必须import inference_webui.py。但是模型会在import 的时候加载进GPU里,会导致很多问题,例如:

  1. 无法指定GPU,一机多卡情况下永远选择GPU0(微调时用于选择GPU的逻辑没有加进推理模块里面)
  2. 多卡推理无法进行
  3. import速度慢
  4. 逻辑较混乱

改动

此PR通过将所有的模型加载逻辑合进同一个function(def load_models(device_override):)里面解决上述问题。并且在load_model 和get_tts_wav上也加上device_override 来指定推理用卡。device_override 应为cuda序号,如“cuda:0”/"cuda:1",而不设置override的情况下默认为None,将使用默认逻辑(使用global,现时为"cuda"或"cpu")。未改动其他function名和文件名。

兼容

小幅度修改inference_cli 和 inference_gui,以兼容此PR。inference_webui_fast 方面,因未见复用 inference_webui 逻辑而没有做出任何更动。

使用及未来优化

单卡推理需要在推理之前加上一行“load_models()”,无需其他改动。多卡推理可以为每GPU开一个process,每一个process均需要调用load_models()+get_tts_wav(),并加上相应的cuda序号。考虑兼容性及 @XXXXRT666 提及“inference_webui 不是用import读的”,现时采用改动最小的方法。后续需优化代码逻辑,包括分开推理逻辑,争取可以在threading跑以减少CPU缓存占用。

@Spr-Aachen
Copy link
Contributor

Spr-Aachen commented Nov 11, 2025

其实还有个方案:从api.py入手对推理方案进行优化。
以我的 GPT-SoVITS-Refactored 项目为例——你可以看到我从原版的 api.py 中提取出了 infer.py ,而原版的 inference_webui.py 只要维持原样,由 infer_webui.py 调用即可。

@JackyHe398
Copy link
Author

其实还有个方案:从api.py入手对推理方案进行优化。 以我的 GPT-SoVITS-Refactored 项目为例——你可以看到我从原版的 api.py 中提取出了 infer.py ,而原版的 inference_webui.py 只要维持原样,由 infer_webui.py 调用即可。

這個是最好的選擇了,不過仍然要把模型加載的邏輯調出來,要不然的話還是全部load進 GPU0 裏。我這麽修改的目的是修改最小化以爭取PR的機會(作者似乎不太accept PR),不過好像沒什麽用就是了。

@JackyHe398
Copy link
Author

不過我已經暫時從這個多卡推理抽身了,所以隨緣吧。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants