windows运行index-tts-vllm配置教程(wsl2+cuda+vllm)

本文发于H5L0 - cnblogs,未经允许,请勿转载

背景

index-tts是b站开源的TTS模型,可以模仿参考音频的音色从文本生成语音,质量和速度都不错。index-tts/index-tts:工业级可控高效的零样本文本转语音系统

原模型基于torch运行,有大佬将其改用vllm运行:Ksuriuri/index-tts-vllm: Added vLLM support to IndexTTS for faster inference.

本文介绍了如何在windows上运行vllm版本的index-tts。

主要难点在于vllm暂时还不支持在windows运行,所以只能通过docker或者wsl虚拟机来运行,wsl是微软推出的windows上的linux虚拟机,现在主流版本是wsl2,下文所说的wsl默认指wsl2。此外index-tts-vllm的readme内使用的是conda,本文改用了uv。

本文写于2025年6月,过时之处请读者自行留意。

0. 全流程概述

  1. 安装wsl2
  2. 安装和配置pip
  3. 安装uv、g++、cuda-tookit等必要工具
  4. 配置虚拟环境、安装requirements
  5. 生成模型文件
  6. 运行webui.py

1. 安装wsl2

1.1 确认开启hyper-v

首先需要确认windows开启了hyper-v:

  1. 打开控制面板。

  2. 选择“程序”。

  3. 选择“程序和功能”。

  4. 选择“启用或关闭 Windows 功能”。

  5. 查看“Hyper-V”选项是否已勾选。如果已勾选,则表示 Hyper-V 已开启。

1.2 安装wsl

在管理员模式下打开 PowerShell 或 Windows 命令提示符,输入命令,然后重启计算机。 

 wsl --install 

1.3 安装发行版

wsl应该默认会安装一个发行版,使用下面的指令显示已安装的发行版:

 wsl --list

应该显示:

适用于 Linux 的 Windows 子系统分发:
Ubuntu-22.04 (默认值)

 如果没有,可以手动安装:

wsl --install Ubuntu-22.04

1.3 配置网络(可选)

如果在wsl内无法连接外网仓库,需要开个代理,并将你windows的代理工具打开“允许局域网连接”。

此处我还将wsl的网络设为了mirror模式。

2. 安装和配置pip

2.1 配置apt源

正常可以使用linux发行版(ubuntu)内的apt安装pip,但国内无法使用wsl内默认的apt源,所以需要做些修改:

打开 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

要勾上【是否使用 HTTPS】,然后复制 传统格式(/etc/apt/sources.list)文本,也可以用这下面的:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse

# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

在wsl中,用vi编辑/etc/apt/sources.list文件:

sudo vi /etc/apt/sources.list

粘贴之前的文本,替换里面所有内容,操作方法是:

按dd清除每一行,按i進入insert,按右鍵黏貼,按esc退出insert,:wq保存後離開。 (WSL2安装Debian(Ubuntu)并配置国内apt源 - 知乎

然后执行以下指令更新源:

sudo apt update

2.2 安装pip

sudo apt install pip

如果有问题,可以使用pip官网的方式安装:Installation - pip documentation v25.1.1

如果安装后执行pip指令有问题,可能需要修改PATH路径:

sudo export PATH="{your path}:$PATH"

其中{your path}是安装时警告提示的路径

 

3. 安装必要工具

3.1 安装uv

pip install uv

3.2 安装gcc和g++

这在后续安装cuda和运行编译cuda核时可能用到

pip install gcc
pip install g++

3.3 安装和配置cuda

此处比较特殊,wsl实际使用的是windows上的cuda,所以需要在windows安装cuda driver,然后在wsl中安装不包括driver的cuda tookit。

详见:WSL 2 上的 NVIDIA GPU 加速计算 — WSL 12.9 上的 CUDA 文档

3.3.1 windows中安装cuda

首先,需要在windows(注意是windows)上安装cuda:

到英伟达官网下载exe安装即可,我用的是12.9:CUDA Toolkit 12.9 Downloads | NVIDIA Developer

3.3.2 wsl中安装cuda-tookit

在wsl中使用apt安装cuda-tookit,参考:CUDA Toolkit 12.9 Downloads | NVIDIA Developer

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-9

前面两句必须执行,用于避免安装driver。

3.3.3 wsl中配置环境变量

在index-tts-vllm中有代码会用到,所以提前配上:

export CUDA_HOME="/usr/local/cuda-12.9"
export PATH="/usr/local/cuda-12.9/bin:$PATH"

可以使用以下指令确认是否配上了:

echo $CUDA_HOME
nvidia-smi

 

4. 配置项目

4.0 克隆项目

如果还没克隆项目,使用git克隆。需要先定位到指定文件夹,然后执行:

git clone https://github.com/Ksuriuri/index-tts-vllm.git

然后进入项目目录,后文的工作目录都必须是此项目目录

cd index-tts-vllm

4.1 配置uv虚拟环境

 使用以下指令,创建一个虚拟环境:

uv .venv

设置python版本:

uv python install 3.12

4.2 安装依赖包

执行以下指令,在uv内安装包:

uv pip install -r requirements.txt

 

5. 生成模型文件

这步请参见项目的readme:Ksuriuri/index-tts-vllm: Added vLLM support to IndexTTS for faster inference.

 

6. 运行

使用以下指令执行:

VLLM_USE_V1=0 uv run webui.py

第一次启动可能会久一些,因为要对 bigvgan 进行 cuda 核编译。

运行后有输出:

Running on local URL:  http://0.0.0.0:7860

 如果你的wsl网络模式为Mirror,可以使用 127.0.0.1:7860 访问。

运行效果: 

console log
 >> start inference...
INFO 06-02 21:48:00 async_llm_engine.py:211] Added request 68fe18fe-5eb6-4983-8794-47e622de19f0.
INFO 06-02 21:48:00 metrics.py:455] Avg prompt throughput: 0.1 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.3%, CPU KV cache usage: 0.0%.
INFO 06-02 21:48:01 async_llm_engine.py:179] Finished request 68fe18fe-5eb6-4983-8794-47e622de19f0.
wav shape: torch.Size([1, 95232]) min: tensor(-23013.1973, device='cuda:0') max: tensor(19868.6172, device='cuda:0')
>> gpt_gen_time: 0.81 seconds
>> bigvgan_time: 0.37 seconds
>> Total inference time: 2.58 seconds
>> Generated audio length: 3.97 seconds
>> RTF: 0.6490
>> start inference...
INFO 06-02 21:48:52 async_llm_engine.py:211] Added request 4fbc2eee-8a04-4318-ba92-427ea99e2302.
INFO 06-02 21:48:52 metrics.py:455] Avg prompt throughput: 2.7 tokens/s, Avg generation throughput: 1.8 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.6%, CPU KV cache usage: 0.0%.
INFO 06-02 21:48:55 async_llm_engine.py:179] Finished request 4fbc2eee-8a04-4318-ba92-427ea99e2302.
wav shape: torch.Size([1, 300032]) min: tensor(-26799.9609, device='cuda:0') max: tensor(23520.4961, device='cuda:0')
INFO 06-02 21:48:55 async_llm_engine.py:211] Added request dbaf6ead-61bb-473c-ba38-3a3eeaea2897.
INFO 06-02 21:48:57 metrics.py:455] Avg prompt throughput: 26.4 tokens/s, Avg generation throughput: 116.8 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 1.7%, CPU KV cache usage: 0.0%.
INFO 06-02 21:48:57 async_llm_engine.py:179] Finished request dbaf6ead-61bb-473c-ba38-3a3eeaea2897.
wav shape: torch.Size([1, 325632]) min: tensor(-25247.1484, device='cuda:0') max: tensor(21450.7129, device='cuda:0')
>> gpt_gen_time: 5.08 seconds
>> bigvgan_time: 0.10 seconds
>> Total inference time: 5.65 seconds
>> Generated audio length: 26.07 seconds
>> RTF: 0.2166
>> start inference...
INFO 06-02 21:49:49 async_llm_engine.py:211] Added request 02256c82-24e6-4be2-bbf7-0b1dee1af11a.
INFO 06-02 21:49:49 metrics.py:455] Avg prompt throughput: 3.8 tokens/s, Avg generation throughput: 0.6 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.8%, CPU KV cache usage: 0.0%.
INFO 06-02 21:49:52 async_llm_engine.py:179] Finished request 02256c82-24e6-4be2-bbf7-0b1dee1af11a.
wav shape: torch.Size([1, 406528]) min: tensor(-20475.1055, device='cuda:0') max: tensor(19743.6074, device='cuda:0')
>> gpt_gen_time: 3.04 seconds
>> bigvgan_time: 0.09 seconds
>> Total inference time: 3.56 seconds
>> Generated audio length: 16.94 seconds
>> RTF: 0.2101

在我的RTX4060ti上,第二次运行开始RTF稳定在0.21左右,即合成10秒的音频只需2秒多点,在一众基于LLM的TTS中已经是非常快的了。

 


其他可能的异常:

1. [rank0]: ModuleNotFoundError: No module named 'tn.english'

 WeTextProcessing包有问题,卸载重装:

uv pip uninstall WeTextProcessing
uv pip install wetext
uv pip uninstall wetext
uv pip install WeTextProcessing

 

posted @ 2025-06-02 21:22  H5L0  阅读(1614)  评论(0)    收藏  举报