RVC-Boss / GPT-SoVITS

1 min voice data can also be used to train a good TTS model! (few shot voice cloning)
MIT License
34.3k stars 3.94k forks source link

使用python3.11.0的版本,推理速度只有原本的三分之一 #840

Closed XianYue0125 closed 5 months ago

XianYue0125 commented 7 months ago

所有包都按照requirements.txt安装了,其中只有numba安装了0.57.0,而不是官方要求的0.56.4,推理速度用整合包的虚拟环境的三分之一,代码是一模一样的

官方的req文件: numpy scipy tensorboard librosa==0.9.2 numba==0.56.4 pytorch-lightning gradio==3.38.0 gradio_client==0.8.1 ffmpeg-python onnxruntime tqdm funasr==1.0.0 cn2an pypinyin pyopenjtalk g2p_en torchaudio modelscope==1.10.0 sentencepiece transformers chardet PyYAML psutil jieba_fast jieba LangSegment>=0.2.0 Faster_Whisper

我使用的venv环境: absl-py==2.0.0 addict==2.4.0 aiofiles==23.2.1 aiohttp==3.8.5 aiosignal==1.3.1 aliyun-python-sdk-core==2.15.0 aliyun-python-sdk-kms==2.16.2 altair==5.2.0 altgraph==0.17.3 annoy==1.17.3 antlr4-python3-runtime==4.9.3 anyio==3.7.1 appdirs==1.4.4 async-timeout==4.0.2 async-tio==1.3.2 attrs==23.1.0 audioread==3.0.0 av==11.0.0 beautifulsoup4==4.12.2 cachetools==5.3.2 certifi==2022.12.7 cffi==1.15.1 chardet==5.2.0 charset-normalizer==2.1.1 click==8.1.7 cn2an==0.5.22 colorama==0.4.6 coloredlogs==15.0.1 contourpy==1.2.0 crcmod==1.7 cryptography==42.0.5 ctranslate2==4.1.0

Editable install with no version control (cttpunctuator==0.0.1)

-e e:\aiteachering\digitallife\dl_server\venv\lib\site-packages\ct-transformer-punctuation-0.0.1 cycler==0.12.1 Cython==0.29.34 dataclasses-json==0.6.3 datasets==2.18.0 decorator==5.1.1 dill==0.3.8 Distance==0.1.3 distro==1.9.0 editdistance==0.8.1 einops==0.7.0 expecttest==0.2.1 fastapi==0.103.1 faster-whisper==1.0.1 ffmpeg-python==0.2.0 ffmpy==0.3.2 filelock==3.9.0 flatbuffers==23.3.3 fonttools==4.50.0 frozenlist==1.3.3 fsspec==2024.2.0 funasr==1.0.0 future==1.0.0 g2p-en==2.1.0 gast==0.5.4 google==3.0.0 google-auth==2.25.2 google-auth-oauthlib==1.2.0 gradio==3.38.0 gradio_client==0.8.1 greenlet==3.0.3 grpcio==1.60.0 h11==0.14.0 hdbscan==0.8.33 httpcore==0.17.0 httpx==0.24.1 huggingface-hub==0.21.4 humanfriendly==10.0 hydra-core==1.3.2 idna==3.4 importlib_metadata==7.1.0 inflect==7.0.0 jaconv==0.3.4 jamo==0.4.1 jieba==0.42.1 jieba_fast==0.53 Jinja2==3.1.2 jmespath==0.10.0 joblib==1.2.0 jsonpatch==1.33 jsonpointer==2.4 jsonschema==4.21.1 jsonschema-specifications==2023.12.1 kaldiio==2.18.0 kiwisolver==1.4.5 langchain==0.0.352 langchain-community==0.0.9 langchain-core==0.1.7 langchain-openai==0.0.2 LangSegment==0.2.8 langsmith==0.0.77 lazy_loader==0.2 librosa==0.9.2 lightning-utilities==0.11.0 linkify-it-py==2.0.3 llvmlite==0.40.0 Markdown==3.5.1 markdown-it-py==2.2.0 MarkupSafe==2.1.2 marshmallow==3.20.1 matplotlib==3.8.3 mdit-py-plugins==0.3.3 mdurl==0.1.2 modelscope==1.10.0 mpmath==1.2.1 msgpack==1.0.5 multidict==6.0.4 multiprocess==0.70.16 mypy-extensions==1.0.0 nest-asyncio==1.5.6 networkx==3.0 nltk==3.8.1 numba==0.57.0 numpy==1.24.2 oauthlib==3.2.2 omegaconf==2.3.0 onnx==1.15.0 onnxconverter-common==1.14.0 onnxruntime==1.17.1 openai==1.7.1 OpenAIAuth==0.3.6 orjson==3.9.15 oss2==2.18.4 packaging==23.2 pandas==2.2.1 pefile==2023.2.7 Pillow==9.3.0 platformdirs==4.2.0 pooch==1.6.0 proces==0.1.4 prompt-toolkit==3.0.38 protobuf==3.20.2 psutil==5.9.8 py==1.11.0 py3langid==0.2.2 pyarrow==15.0.2 pyarrow-hotfix==0.6 pyasn1==0.5.1 pyasn1-modules==0.3.0 PyAudio==0.2.13 pycparser==2.21 pycryptodome==3.9.9 pydantic==1.10.9 pydub==0.25.1 pyinstaller==5.13.2 pyinstaller-hooks-contrib==2023.8 pyopenjtalk==0.3.3 pyparsing==3.1.2 pypinyin==0.51.0 pyreadline3==3.4.1 PySocks==1.7.1 python-dateutil==2.9.0.post0 python-multipart==0.0.9 pytorch-lightning==2.2.1 pytorch-wpe==0.0.1 pytz==2020.5 pywin32==306 pywin32-ctypes==0.2.2 PyYAML==6.0.1 referencing==0.34.0 regex==2023.5.5 requests==2.31.0 requests-oauthlib==1.3.1 resampy==0.4.3 retry==0.9.2 revChatGPT==5.0.0 rpds-py==0.18.0 rsa==4.9 safetensors==0.4.2 scikit-learn==1.2.2 scipy==1.12.0 semantic-version==2.10.0 sentence-transformers==2.2.2 sentencepiece==0.2.0 simpleeval==0.9.13 simplejson==3.19.2 six==1.16.0 sniffio==1.3.0 socksio==1.0.0 sortedcontainers==2.4.0 soundfile==0.12.1 soupsieve==2.5 soxr==0.3.5 SQLAlchemy==2.0.24 starlette==0.27.0 sympy==1.11.1 tenacity==8.2.3 tencentcloud-sdk-python==3.0.1057 tensorboard==2.16.2 tensorboard-data-server==0.7.2 threadpoolctl==3.1.0 tiktoken==0.5.2 tokenizers==0.15.2 tomli==2.0.1 toolz==0.12.1 torch==2.0.1+cu118 torch-complex==0.4.3 torchaudio==2.0.2+cu118 torchmetrics==1.3.2 torchvision==0.15.2+cu118 tqdm==4.66.2 transformers==4.39.0 typeguard==2.13.3 typer==0.7.0 typing-inspect==0.9.0 typing_extensions==4.9.0 tzdata==2024.1 uc-micro-py==1.0.3 umap==0.1.1 urllib3==1.26.13 uvicorn==0.23.2 volcengine==1.0.119 wcwidth==0.2.6 websockets==11.0.3 Werkzeug==3.0.1 WMI==1.5.1 xxhash==3.4.1 yapf==0.40.2 yarl==1.9.2 zhconv==1.4.3 zipp==3.18.1

SapphireLab commented 7 months ago

是说用整合包的代码分别在整合包自带的环境和自己配的环境下跑,后者的速度只有前者的三分之一?

XianYue0125 commented 7 months ago

对,代码是整合包的,并没有clone github上的代码,我看整合包里面的环境是python3.9,我这边想整合到其他项目里面,是3.11的环境,所有包都严格按照整合包的req文件安装的,部署好之后启动,推理速度却只有三分之一

XianYue0125 commented 7 months ago

我做了很多尝试,主要冲突在于numba,numpy,onnxruntime,也都优先按照整合包的版本安装了,推理速度依然是三分之一,不知道问题出在哪里,torch也都是cuda版本的,torch.cuda.is_available()也是True,打印infer_device也是cuda,也是半精度,跑起来之后显存也会涨大概2.5G,问题应该不在cuda环境上,猜测是一些加速的代码没能成功起作用,但是控制台没有警告,不知道是哪些包在起作用

XianYue0125 commented 7 months ago

刚才尝试了一下把所有东西部署在3.10.6上也一样,速度只有三分之一

XianYue0125 commented 7 months ago

image 上面这张图是跑整合包里面原码的速度

image 然后这张是单独运行整合包的速度

go_webui.bat启动的也是api.py,运行的代码内容应该是完全一样的才对,只是换了一个虚拟环境,然后硬件设备是R7 5800+4070

XianYue0125 commented 7 months ago

然后两个项目分开,各自用各自的环境,只使用post发送请求,然后去固定的文件地址读取音频文件,速度是正常的100多it/s

只有把两个项目的环境合并之后,推理速度会变成三分之一

XianYue0125 commented 7 months ago

单独给整合包重新构建了一个venv,然后安装req的所有包,跑起来速度是正常的,使用解释器为python3.10.6 image

SapphireLab commented 7 months ago

单独给整合包重新构建了一个venv,然后安装req的所有包,跑起来速度是正常的,使用解释器为python3.10.6 image

对api.py的代码进行了修改吗?

原本我想的是没有按照fast inference分支的推理调用(三月整合包),因为api.py的版本相对过时,没有调用tts_pipeline.run() 进行分batch处理,所以仍然按照主分支的推理t2s_model.infer_panel()走,速度会慢就很正常。

但你最后这个api.py的结果达到100it/s,和前面的30it/s对比就很奇怪了,我稍后也做一下环境测试。

XianYue0125 commented 7 months ago

整合包是0306fix,代码没有做修改,只改了api_port端口的数字,方便发送端口请求,这个改了也不会影响速度,单跑tts也是100it/s

XianYue0125 commented 7 months ago

另外我想请教一个问题,就是我在使用python -m venv venv,把虚拟环境移到其他电脑会因为没有安装python报错,整合包的runtime是怎么做到把python一起打包进去的,是使用的conda吗

XianYue0125 commented 7 months ago

image python3.11.0也是满速

XianYue0125 commented 7 months ago

我先确认了两个项目都能在3.11.0稳定运行,然后先只用tts的虚拟环境,等着整个项目报错找不到包,然后一个一个往进复制site-pickage的包,没有通过pip安装,防止依赖关系自动升降级其他包,在程序能跑起来之后,速度还是三分之一,目前可以确定加上这些包之后一起运行会出问题,对于进程锁那些问题我不太了解,猜测会不会是有地方冲突造成了等待,导致推理速度变慢。

image 这是文件对比,是两者的venv/lib/site-packages比较

左侧是3.11.0,新建的虚拟环境,可以单跑满速的gptsovits

右侧是一模一样的3.11.0,复制左边的虚拟环境之后,加入了项目需要的其他包,跑起来速度就变成三分之一了

XianYue0125 commented 7 months ago

两个都是3.11.0,各用各的虚拟环境,是满速的

两个合在一起共用一个虚拟环境,速度变慢了,很头疼

SapphireLab commented 7 months ago

我先确认了两个项目都能在3.11.0稳定运行,然后先只用tts的虚拟环境,等着整个项目报错找不到包,然后一个一个往进复制site-pickage的包,没有通过pip安装,防止依赖关系自动升降级其他包,在程序能跑起来之后,速度还是三分之一,目前可以确定加上这些包之后一起运行会出问题,对于进程锁那些问题我不太了解,猜测会不会是有地方冲突造成了等待,导致推理速度变慢。

image 这是文件对比,是两者的venv/lib/site-packages比较

左侧是3.11.0,新建的虚拟环境,可以单跑满速的gptsovits

右侧是一模一样的3.11.0,复制左边的虚拟环境之后,加入了项目需要的其他包,跑起来速度就变成三分之一了


两个都是3.11.0,各用各的虚拟环境,是满速的

两个合在一起共用一个虚拟环境,速度变慢了,很头疼


下面是我做的简单测试.


Env Python Device Fast_Inference(原api)
t2smodel.model.infer_panel()
Fast_Inference (改)
tts_pipeline.run()
GPT-SoVITS 3.11 cpu 36 it/s 45 it/s
GPT-SoVITS (Baseline) 3.9 gpu 74 it/s 112 it/s
GPT-SoVITS (Baseline) 3.11 gpu 71 it/s 116 it/s
GPT-SoVITS+langchain 3.11 gpu 61 it/s 114 it/s
GPT-SoVITS+langchain+openai 3.11 gpu 71 it/s 109 it/s
GPT-SoVITS+langchain+openai
+revChatGPT
3.11 gpu 73 it/s 115 it/s
GPT-SoVITS+langchain+openai
+revChatGPT+pywin32
3.11 gpu 69 it/s 107 it/s
GPT-SoVITS+langchain+openai
+revChatGPT+pywin32
+adodbapi+typeguard
3.11 gpu 73 it/s 105 it/s
GPT-SoVITS+langchain+openai
+revChatGPT+pywin32
+adodbapi+typeguard
+langchain_openai
3.11 gpu 70 it/s 111 it/s
GPT-SoVITS+langchain+openai
+revChatGPT+pywin32
+adodbapi+typeguard
+langchain_openai+zhconv
3.11 gpu 70 it/s 115 it/s

第三方包对应清单 (序号表示安装顺序) - [x] 6 adodbapi (需要降级 setuptools) - [x] 2 distro - [x] 5 isapi - [x] 1 langchain - [x] 1 langchain_community - [x] 1 langchain_core - [x] 8 langchain_openai - [x] 1 langsmith - [x] 2 openai - [x] 3 prompt_toolkit - [x] 5 pythonwin - [x] 5 pywin32_system32 - [x] 3 revChatGPT - [x] 1 tenacity - [x] 3 tiktoken - [x] 7 typeguard - [x] 3 wcwidth - [x] 5 win32 - [x] 5 win32com - [x] 5 win32comext - [x] 9 zhconv
SapphireLab commented 7 months ago

另外我想请教一个问题,就是我在使用python -m venv venv,把虚拟环境移到其他电脑会因为没有安装python报错,整合包的runtime是怎么做到把python一起打包进去的,是使用的conda吗

我知道的是 python有嵌入式版本可以下载.

image

XXXXRT666 commented 7 months ago

另外我想请教一个问题,就是我在使用python -m venv venv,把虚拟环境移到其他电脑会因为没有安装python报错,整合包的runtime是怎么做到把python一起打包进去的,是使用的conda吗

如果你使用你电脑上的python,venv会指向电脑上的python,runtime使用的是python embeddable版本

XianYue0125 commented 7 months ago

另外我想请教一个问题,就是我在使用python -m venv venv,把虚拟环境移到其他电脑会因为没有安装python报错,整合包的runtime是怎么做到把python一起打包进去的,是使用的conda吗

如果你使用你电脑上的python,venv会指向电脑上的python,runtime使用的是python embeddable版本

好的,感谢,我之后尝试一下这个嵌入式版本

XianYue0125 commented 7 months ago

我先确认了两个项目都能在3.11.0稳定运行,然后先只用tts的虚拟环境,等着整个项目报错找不到包,然后一个一个往进复制site-pickage的包,没有通过pip安装,防止依赖关系自动升降级其他包,在程序能跑起来之后,速度还是三分之一,目前可以确定加上这些包之后一起运行会出问题,对于进程锁那些问题我不太了解,猜测会不会是有地方冲突造成了等待,导致推理速度变慢。 image 这是文件对比,是两者的venv/lib/site-packages比较 左侧是3.11.0,新建的虚拟环境,可以单跑满速的gptsovits 右侧是一模一样的3.11.0,复制左边的虚拟环境之后,加入了项目需要的其他包,跑起来速度就变成三分之一了

两个都是3.11.0,各用各的虚拟环境,是满速的 两个合在一起共用一个虚拟环境,速度变慢了,很头疼

下面是我做的简单测试.

  • 创建环境: Python 3.11.8 + Cuda 12.2 + torch 2.2.1 + torchaudio 2.2.1 + numba 0.59.1 + 其他按requirements.txt
  • 运行设备: 4060Ti (显卡坞)
  • 使用代码: 因为手头没有 0306fix, 链接只有 fix2 了就直接用 github 的 Fast_inference 分支 (更新日期接近). 因为 fast_inference 分支用的还是 main 分支的api, 即调用解码器的 infer_panel() 返回值会出现类型错误 (0306fix不会?), 所以重新修改了一下并和webui一样调用 tts_pipeline.run().
  • 测试过程: pip 依次安装相关第三方包 (顺序和表格&清单对应), 并重启 api 查看迭代速度.
  • 运行情况:

    • 和我自己的 basline 对比迭代速度基本没有什么变化, 只能说没能复现问题.
    • 初次运行有时会速度降低, 如 100it/s → 70it/s 但后续重复运行就不会了.

Env Python Device Fast_Inference(原api) t2smodel.model.infer_panel() Fast_Inference (改) tts_pipeline.run() GPT-SoVITS 3.11 cpu 36 it/s 45 it/s GPT-SoVITS (Baseline) 3.9 gpu 74 it/s 112 it/s GPT-SoVITS (Baseline) 3.11 gpu 71 it/s 116 it/s GPT-SoVITS+langchain 3.11 gpu 61 it/s 114 it/s GPT-SoVITS+langchain+openai 3.11 gpu 71 it/s 109 it/s GPT-SoVITS+langchain+openai +revChatGPT 3.11 gpu 73 it/s 115 it/s GPT-SoVITS+langchain+openai +revChatGPT+pywin32 3.11 gpu 69 it/s 107 it/s GPT-SoVITS+langchain+openai +revChatGPT+pywin32 +adodbapi+typeguard 3.11 gpu 73 it/s 105 it/s GPT-SoVITS+langchain+openai +revChatGPT+pywin32 +adodbapi+typeguard +langchain_openai 3.11 gpu 70 it/s 111 it/s GPT-SoVITS+langchain+openai +revChatGPT+pywin32 +adodbapi+typeguard +langchain_openai+zhconv 3.11 gpu 70 it/s 115 it/s 第三方包对应清单 (序号表示安装顺序)

我觉得可能和和选择的python解释器有关系,明天我再试一试,有了结果第一时间回复

XXXXRT666 commented 7 months ago

另外我想请教一个问题,就是我在使用python -m venv venv,把虚拟环境移到其他电脑会因为没有安装python报错,整合包的runtime是怎么做到把python一起打包进去的,是使用的conda吗

如果你使用你电脑上的python,venv会指向电脑上的python,runtime使用的是python embeddable版本

使用conda和整合包runtime的话,有几个runtime/虚拟环境就有几个python,venv我记得只有一个

XianYue0125 commented 7 months ago

image

两个项目合并的时候,不把gpt-sovits看成一个包导入,而是直接和主项目一起混在根目录下,就没问题了 : )

两个项目都是用了相对路径,在运行的时候调用了很多重名但不同作用的方法,可能是推理速度减慢的原因

SapphireLab commented 7 months ago

所以和python版本, 配置环境无关, 是项目结构问题?

hyhuc0079 commented 6 months ago

可是git上那个requirement不是fix0306的呀?你试试在整合包环境里pip list一下看看,是不是有的包更新了比如onnx到17正好刚支持cuda。 另外我也在环境放了好多个版本我一般都是分开 gpt-sovits |--venv1 |--conda1 |--gptsovits1 |--gptsovits2

用哪个环境就activate哪个,另外还是conda好,能去重我现在基本都转到conda了。

XianYue0125 commented 5 months ago

是的,和项目结构有关系,算是找到了问题的原因,调用了错误的torch版本和代码。

另外还有个额外的发现,英伟达驱动对显存占用,推理速度都有不小的影响,我在项目中使用gpt-sovits加上相关的whisper、标点符号等模型,占用4G显存,更新驱动之后居然减到了2G,感兴趣的也可以试一试,更新之后推理的各方面都好了很多

RVC-Boss commented 5 months ago

是的,和项目结构有关系,算是找到了问题的原因,调用了错误的torch版本和代码。

另外还有个额外的发现,英伟达驱动对显存占用,推理速度都有不小的影响,我在项目中使用gpt-sovits加上相关的whisper、标点符号等模型,占用4G显存,更新驱动之后居然减到了2G,感兴趣的也可以试一试,更新之后推理的各方面都好了很多

驱动这个太神奇了