找回密码
 立即注册
首页 业界区 业界 也玩音频克隆IndexTTS

也玩音频克隆IndexTTS

金娅鸣 8 小时前
以下两篇文章已经较好的介绍IndexTTS项目,本文基于这两篇文件对该项目安装实现的一些细节再做更详细的说明,也算对自己的折腾做下总结。
https://www.cnblogs.com/cj8988/p/18973016 (windows conda)
https://www.cnblogs.com/h5l0/p/18907633 (windows wsl)
1 基于conda环境

1.1 项目安装

1. 照例显示下本地软硬件环境

1.png

2. 从github上下载项目
  1. git clone https://github.com/index-tts/index-tts.git
复制代码
3. 创建环境并安装依赖
  1. conda create -n index-tts python=3.10
  2. conda activate index-tts
  3. pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
  4. pip install -r requirements.txt
复制代码
因为是windows环境,这里和项目官方安装稍有区别,没有安装ffmpeg(如遇问题请参考后续小节解决方案),且是根据nvidia-smi显示的驱动信息安装的相对应版本的pytorch。pytorch安装过程信息如下:
2.png

从安装过程信息可知安装的pytorch版本是2.7.1。在安装requirements.txt时,正如官网所说在windows下安装pynini时会提示错误:ERROR: Failed building wheel for pynini
3.png

仍按官网解决方式进行conda安装:
  1. # after conda activate index-tts
  2. conda install -c conda-forge pynini==2.1.6
  3. pip install WeTextProcessing --no-deps
复制代码
4. 将项目以 “开发模式” 安装到当前 Python 环境
  1. cd index-tts
  2. pip install -e .
复制代码
执行后,Python环境会在site-packages目录中创建一个特殊的链接(.egg-link文件),指向 index-tts项目的根目录,使得你在任何地方都能像导入普通包一样导入该项目的模块(例如import index_tts),命令还会根据项目根目录下的setup.py或pyproject.toml中的配置,自动安装项目所需的依赖包。
关键参数说明:
-e:是 --editable 的缩写,指定 “可编辑模式”。
.:表示当前目录,即告诉 pip 从当前目录的 setup.py 或 pyproject.toml 读取包的配置信息。
这种安装方式常用于开发阶段,如果你只是想使用该包而不修改源码,直接用pip install .即可(非编辑模式,源码修改后需重新安装才会生效,否则其他项目import index_tts时仍使用的是之前安装)。
5. 下载模型

通过huggingface-cli工具下载,如果该工具未安装,请使用pip install huggingface-hub进行安装,huggingface-cli是huggingface-hub包的一部分,安装该包后即可使用huggingface-cli命令。
  1. huggingface-cli download IndexTeam/IndexTTS-1.5 config.yaml bigvgan_discriminator.pth bigvgan_generator.pth bpe.model dvae.pth gpt.pth unigram_12000.vocab --local-dir checkpoints
复制代码
可见命令会将模型下载到当前目录的checkpoints下:
4.png

项目官方后续还介绍了对于中国用户如何使用镜像加速下载,这里并没有实际尝试,而是直接使用的代理进行下载(涉及github的项目不配置代理基本没法操作,这里鄙视下国内的网络环境)。
6. 运行Web Demo

 接下并没有运行测试脚本,而是直接运行了Web Demo:
  1. pip install -e ".[webui]" --no-build-isolation
  2. python webui.py
  3. # use another model version:
  4. python webui.py --model_dir IndexTTS-1.5
复制代码
直接访问http://127.0.0.1:7860即可加载该项目,最左边上传样例声音文件,中间文本是要进行样例声音克隆的文本信息,单击生成语音即可在最右边产生出克隆声音。
5.png

 以下是声音样例下载:
源音频克隆的音频
您的浏览器不支持 audio 标签。 您的浏览器不支持 audio 标签。
1.2 其他问题

1. Deepspeed问题

在上一节虽然已经运行起来,但是生成语音时明显感觉生成速度比较慢,第一感觉就是根本没有用上GPU,在后台一看果然有问题,说是DeepSpeed加载失败:
6.png

直接用pip install deepspeed进行安装,安装失败:
7.png

自动安装不成功,只能自己源码编译,这里下载deepspeed的0.17.0版本,以下是官网的在windows下编译的步骤:
  1. 1 Install PyTorch, such as pytorch 2.3+cu121.
  2. 2 Install Visual C++ build tools, such as VS2022 C++ x64/x86 build tools.
  3. 3 Launch Cmd console with Administrator permissions for creating required symlink folders and ensure MSVC tools are added to your PATH or launch the Developer Command Prompt for Visual Studio 2022 with administrator permissions.
  4. 4 Run build_win.bat to build wheel in dist folder.
复制代码
参照编译步骤进行编译,最后产生deepspeed-0.17.0+unknown-cp311-cp311-win_amd64.whl安装文件,并对该文件进行安装。
8.png

 其实在编译deepspeed中会有两个错误提示,说是缺少aio.lib和cufile.lib,没有处理也能编译通过。之后重新运行web demo时虽然不再提示“deepspeed加载失败”,但仍会提示缺少两个文件的错误,感觉gpu还是有问题,随便找两句话进行语音生成,果然时间比较长,应该是GPU还是没有用上。
9.png

问了下deepseek,看来deepspeed对windows的支持还是不太行,如果哪位大神能搞定windows下gpu使用请在评论区告诉我一声。deepseek给出了其他解决方案,使用wsl,这正是本文第2节的内容。
10.png

2. 缺失ffmpeg问题

在折腾过程中,还有一次提示缺少ffmpeg的问题,顺便记录下,首先下载ffmpeg的gyan预编译版本,然后解压到本地,再配置path环境变量。
11.png

2 基于wsl环境

2.1 WSL安装及环境配置

这部分内容不再详细说明,请参照本文最前面的第二个参考链接及之前的博文进行,这里使用的Linux版本是Ubuntu 22.04,并且已经在WSL可以访问到GPU。
12.png

除此之外,为了能在Windows下能直接访问Ubuntu,需将Ubuntu的localhost暴露在Windows下:
13.png

2.2 配置项目

1. clone项目

使用如下命令先将index-tts-vllm项目clone下来:
  1. git clone https://github.com/Ksuriuri/index-tts-vllm.git
复制代码
然后进入项目目录,后文的工作目录都必须是此项目目录。
  1. cd index-tts-vllm
复制代码
2. 配置uv虚拟环境

使用以下指令,创建一个虚拟环境.venv,并激活该虚拟环境
  1. uv .venv<br>source .venv/bin/activate
复制代码
执行完该命令会创建了名为.venv的虚拟环境,并在当前目录下创建.venv目录对该虚拟环境进行管理
14.png

安装python版本3.12:
  1. uv python install 3.12
复制代码
3. 安装依赖包

执行以下指令,在uv内安装包:
  1. uv pip install -r requirements.txt
复制代码
4. 生成模型文件

官方https://github.com/Ksuriuri/index-tts-vllm给出了两个权重文件下载链接:
15.png

这里选择第一进行下载,执行以下命令中的前两行即可,第3行命令是不下载大文件的操作方式,第4行命令是用huggingface-cli的下载方式(在本文中将权重文件IndexTTS-1.5下载到了和index-tts-vllm的同一级目录):
  1. git lfs install
  2. git clone https://huggingface.co/IndexTeam/IndexTTS-1.5
  3. # If you want to clone without large files - just their pointers
  4. GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/IndexTeam/IndexTTS-1.5
  5. # Use huggingface-cli to download in a specific directory
  6. huggingface-cli download IndexTeam/IndexTTS-1.5
复制代码
下载完成后重新进入到index-tts-vllm目录下执行如下命令,将官方的模型权重转换为 transformers 库兼容的版本,保存在模型权重路径下的vllm文件夹中,方便后续vllm库加载模型权重。
  1. bash convert_hf_format.sh /home/zww/IndexTTS-1.5/
复制代码
16.png

2.3 运行项目

将webui.py中的model_dir修改为模型权重下载路径:
17.png

运行以下命令启动程序:
  1. VLLM_USE_V1=0 python webui.py
复制代码
如官方所说,第一次启动可能会久一些,因为要对 bigvgan 进行 cuda 核编译,注:一定要带上VLLM_USE_V1=0,因为本项目没有对 vllm 的 v1 版本做兼容。启动log信息如下:
18.gif
19.gif
[code]INFO 07-21 11:44:08 [__init__.py:243] Automatically detected platform cuda.✅ Registry GPT2TTSModel to vllm⚠️  SamplingParams._verify_args Patched⚠️  ModelInputForGPUBuilder._compute_lens PatchedINFO 07-21 11:44:13 [__init__.py:31] Available plugins for group vllm.general_plugins:INFO 07-21 11:44:13 [__init__.py:33] - lora_filesystem_resolver -> vllm.plugins.lora_resolvers.filesystem_resolver:register_filesystem_resolverINFO 07-21 11:44:13 [__init__.py:36] All plugins in this group will be loaded. Set `VLLM_PLUGINS` to control which plugins to load.INFO 07-21 11:44:14 [config.py:3131] Downcasting torch.float32 to torch.float16.INFO 07-21 11:44:14 [config.py:793] This model supports multiple tasks: {'embed', 'generate', 'score', 'classify', 'reward'}. Defaulting to 'generate'.INFO 07-21 11:44:14 [llm_engine.py:230] Initializing a V0 LLM engine (v0.9.0) with config: model='/home/zww/IndexTTS-1.5/vllm', speculative_config=None, tokenizer='/home/zww/IndexTTS-1.5/vllm', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config={}, tokenizer_revision=None, trust_remote_code=False, dtype=torch.float16, max_seq_len=803, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=None, enforce_eager=False, kv_cache_dtype=auto,  device_config=cuda, decoding_config=DecodingConfig(backend='xgrammar', disable_fallback=False, disable_any_whitespace=False, disable_additional_properties=False, reasoning_backend=''), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None), seed=None, served_model_name=/home/zww/IndexTTS-1.5/vllm, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=None, chunked_prefill_enabled=False, use_async_output_proc=True, pooler_config=None, compilation_config={"compile_sizes": [], "inductor_compile_config": {"enable_auto_functionalized_v2": false}, "cudagraph_capture_sizes": [256, 248, 240, 232, 224, 216, 208, 200, 192, 184, 176, 168, 160, 152, 144, 136, 128, 120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 4, 2, 1], "max_capture_size": 256}, use_cached_outputs=False,WARNING 07-21 11:44:14 [interface.py:344] Using 'pin_memory=False' as WSL is detected. This may slow down the performance.INFO 07-21 11:44:14 [cuda.py:292] Using Flash Attention backend.INFO 07-21 11:44:15 [parallel_state.py:1064] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, TP rank 0, EP rank 0INFO 07-21 11:44:15 [model_runner.py:1170] Starting to load model /home/zww/IndexTTS-1.5/vllm...Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00
您需要登录后才可以回帖 登录 | 立即注册