部署环境

显卡 NVIDIA A100 20GB显存(这里没有租用完整一张显卡)
内存 30GB
系统 Ubuntu 24.04 需注意选择支持GPU的系统

如果想要购买已经构建好的Docker镜像,欢迎联系微信 lukeewin01。

注意:部署时,需要选择支持GPU的系统,如看到下面截图中的标识,表明支持GPU。

把默认勾选的“自动备份”功能去掉。当然你也可以保留,只是费用比较贵,我一般选择去掉。

然后点击“Deploy”,会自动安装系统。点击之后,会自动跳转到“Cloud Compute”页面中,在这个页面中可以看到目前已存在的服务器实例,如下图所示。

注意:如果你还没账号,可以点击"注册账号",只有注册并登录,才能选择服务器。

构建Docker镜像

经过上面的步骤,现在我们已经选择好了服务器,我只需要通过SSH连接工具远程连接到服务器中,然后进行构建Docker镜像操作即可。

注意:如果你使用的是国内的服务器来构建,会存在网络问题,这里推荐按照我文档中使用的服务器来构建,可以确保正确构建。如果还没服务器的,可以点击"注册账号"。

这里我使用开源的SSH工具WindTerm来远程连接到服务器,你也可以使用其它SSH工具。

apt-get update -y && apt update -y && apt-get upgrade -y

下载FunASR源码

git clone https://github.com/modelscope/FunASR.git

然后切换路径到triton_gpu路径中

cd FunASR/runtime/triton_gpu

要想构建Docker镜像,必须要先安装docker软件,如果还没安装的,可以按照下面命令安装。

注意:如果你使用的也是我上面说的这个服务器提供商的服务器,那么不需要安装了,自带安装好了docker。

开始构建镜像

docker build . -f Dockerfile/Dockerfile.sensevoice -t soar97/triton-sensevoice:24.05

注意:如果你不是使用我推荐的服务器,有可能会构建失败,大概率是网络问题。这里推荐使用我这篇文章推荐的服务器,如果还没注册,可以点击"注册账号"。

在构建过程中会报下面错误:

表明系统中缺少依赖,执行下面命令安装依赖。

如果还没安装cuda,要先安装cuda,可以执行下面命令。同时还需要安装cudnn,可以看我的博文,如何在Linux中安装CUDA和CUDNN

wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
sudo sh cuda_12.4.1_550.54.15_linux.run
vim ~/.bashrc
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/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 cudnn
sudo apt-get -y install cudnn-cuda-12
apt install -y cuda-cupti-12-0

复制这个动态链接库到 /usr/local/cuda/lib64 中。

cp /usr/local/cuda-12.4/extras/CUPTI/lib64/libcupti.so.12 /usr/local/cuda/lib64

如果还是一直构建失败,可以先跳过这步,等构建完成docker后,进入docker内容再安装。

在执行 RUN rm -r ./model_repo_sense_voice_small/.huggingface 时会报错,没有这个文件,可以把这个语句删掉。

现在可以看到已经生成了docker镜像。

启动Docker容器

经过上一步骤,我们已经构建好了Docker镜像,现在我们需要执行下面命令来启动容器。

docker run -it --name "sensevoice-server" --gpus all --net host -v /mnt:/mnt --shm-size=2g soar97/triton-sensevoice:24.05

然后把第二步中剩下的步骤执行完成。

cd kaldifeat
sed -i 's/in running_cuda_version//g' get_version.py && python3 setup.py install

如果编译安装失败,重新编译之前需要把 build 目录删除掉,并且执行下面命令清除缓存。

pip install --no-cache-dir --force-reinstall -v .

如果还是报错,那么就需要卸载torch和torchaudio,重新安装,并且版本不能太高。

pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118

然后再执行下面命令。

pip install --no-cache-dir --force-reinstall -v .

当看到下面截图的内容时,说明安装成功了,这说明安装的torch版本不能太高。

启动SenseVoiceSmall接口

cd /workspace/model_repo_sense_voice_small
nohup bash run.sh > log.txt 2>&1 &

现在就启动好了,如下图所示。

测试接口

git clone https://github.com/yuekaizhang/Triton-ASR-Client.git
cd Triton-ASR-Client
python3 client.py \
    --server-addr localhost \
    --server-port 8001 \
    --model-name sensevoice \
    --compute-cer \
    --num-tasks 32 \
    --batch-size 16 \
    --manifest-dir ./datasets/aishell1_test

在执行安装依赖时会报错,需要使用conda环境。

conda create -n triton_client python=3.10
conda activate triton_client
pip install -r requirements.txt

报下面错误

ValueError: manifest_dir ./datasets/aishell1_test should contain wav files

是因为路径有问题,把aishell1_test中的data_aishell里的wav复制到aishell1_test中。并且还需要修改 wav.scp 中的路径。

导出镜像

docker save -o triton-sensevoice.tar triton-sensevoice:25.08

由于导出的镜像很大,这里压缩一下。

tar -czvf triton-sensevoice.tar.gz triton-sensevoice.tar 

压缩之后还是很大,不方便传输,这里使用下面命令进行拆分。

split -b 2048m triton-sensevoice.tar.gz 

使用上面命令会生成下面几个文件。

xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

对每个文件计算hash值,防止在传递过程中缺失内容。

for file in xa*; do sha256sum "$file" > "$file.sha256"; done

同时也计算拆分前的hash值。

sha256sum triton-sensevoice.tar.gz > triton-sensevoice.tar.gz.sha256

现在就可以拷贝到其它服务器中了。

导入镜像

导入之前先合并,然后解压,验证hash是否正确

cat xa* > triton-sensevoice.tar.gz
for file in xa*; do
    sha256sum -c "$file.sha256"
done
sha256sum -c triton-sensevoice.tar.gz.sha256
tar -zxvf triton-sensevoice.tar.gz
docker load -i triton-sensevoice.tar

Q.E.D.


热爱生活,热爱程序