部署概述

docker安装

# 配置内核参数
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -p

# 查看docker版本
dnf list docker-ce --showduplicates | sort -r

# 安装docker
dnf install docker-ce-26.1.3-1.el8 -y

# 安装docker-compose
wget "https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-$(uname -s)-$(uname -m)"
chmod +x docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose

部署方案

  • 采用Ascend官方Docker镜像, 集成CANN, Pytorch以及Triton, 兼容性更好, 部署灵活方便
镜像名称 CANN版本 Pytorch版本 Triton版本
cosyvoice2-0.5b:7.3.T-aarch64 8.3.RC1 2.7.1 2.51.0

目录结构

目录 用途 备注
/data/cosyvoice2 cosyvoice2推理服务主目录
/data/cosyvoice2/models 模型目录 挂载到容器/models
/data/cosyvoice2/images docker镜像目录
/data/cosyvoice2/config 配置文件目录, 存放了Nginx主配置文件 挂载到容器/etc/nginx/nginx.conf
/data/cosyvoice2/asset 转换文件暂存目录 挂载到容器/asset

环境准备

镜像下载

  • 使用Ascend官方封装镜像, 兼容性更好
docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/cosyvoice2-0.5b:7.3.T-aarch64

模型下载

# 安装modelscope
python -m ensurepip --upgrade
python -m pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

## 下载CosyVoice
python -m modelscope.cli.cli download --model MindInferenceService/cosyvoice2-0.5b

模型部署

# 创建目录, 把模型拷贝到models, 把镜像拷贝到images
mkdir -pv /data/cosyvoice2/{images,models,config,files}

# 导入镜像
cd /data/cosyvoice2/images
ls *.tar | xargs -I {} docker load -i {}

# 目录授权
chown 1001.1001 models/ -R
chmod 750 models/ -R

Nginx配置

cat > config/nginx.conf << EOF
error_log /home/HwHiAiUser/nginx/logs/error.log;
pid /home/HwHiAiUser/nginx/logs/nginx.pid;

user root;

worker_processes 4;
worker_cpu_affinity 0001;
worker_rlimit_nofile 4096;

events {
    worker_connections 1024;
}

http {
    access_log /home/HwHiAiUser/nginx/logs/access.log;

    server {
        listen 8000;
        server_name localhost;

        location / {
            proxy_pass http://127.0.0.1:9000;
            proxy_send_timeout 900s;
            proxy_read_timeout 900s;
        }
    }

    server {
        listen 8001;
        server_name localhost;

        location / {
            proxy_pass http://127.0.0.1:9001;
            proxy_send_timeout 900s;
            proxy_read_timeout 900s;
        }
    }

    server {
        listen 8002;
        server_name localhost;

        location / {
            proxy_pass http://127.0.0.1:9002;
            proxy_send_timeout 900s;
            proxy_read_timeout 900s;
        }
    }
}
EOF

容器编排

docker-compose编排文件

cd /data/cosyvoice2
cat > docker-compose.yml << EOF
services:
  cosyvoice-server:
    image: swr.cn-south-1.myhuaweicloud.com/ascendhub/cosyvoice2-0.5b:7.3.T-aarch64
    hostname: cosyvoice-server
    container_name: cosyvoice-server
    shm_size: '128gb'
    ports:
      - "18200:8000"
      - "18201:8001"
      - "18202:8002"
    environment:
      - MIS_CACHE_PATH=/models
      - ASCEND_RUNTIME_OPTIONS=VIRTUAL              # 声明挂载虚拟芯片
      - ASCEND_VISIBLE_DEVICES=118                  # vNPU_ID
    devices:
      - "/dev/davinci_manager:/dev/davinci_manager"
      - "/dev/hisi_hdc:/dev/hisi_hdc"
      - "/dev/devmm_svm:/dev/devmm_svm"
    volumes:
      - /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro
      - /usr/local/sbin:/usr/local/sbin:ro
      - ./models:/models
      - ./config/nginx.conf:/etc/nginx/nginx.conf
      - ./asset:/asset
EOF

docker-compose up -d

启动容器

# 启动容器
docker-compose up -d

# 查看日志
docker logs -f cosyvoice-server

验证

CosyVoice (TTS)

# server_url 请根据实际的IP和映射端口填写, 在文件目录下放一个zero_shot_prompt.wav(目录所属1001.1001), 路径使用base64转码

# 示例:
echo -n "/asset/zero_shot_prompt.wav" | base64
L2ZpbGVzL3plcm9fc2hvdF9wcm9tcHQud2F2

# server_url请根据实际的IP和映射端口填写
curl --location 'http://3.1.22.97:18200/v2/models/cosyvoice2-0.5b/infer' \
--header 'Content-Type: application/json' \
--data '{"inputs": [
        {"name": "stream_out", "shape": [
                1,
                1
            ], "datatype": "BOOL", "data": [
                [false
                ]
            ]
        },
        {"name": "tts_text", "shape": [
                1,
                1
            ], "datatype": "BYTES", "data": [
                ["5pS25Yiw5aW95Y+L5LuO6L+c5pa55a+E5p2l55qE55Sf5pel56S854mp77yM6YKj5Lu95oSP5aSW55qE5oOK5Zac5LiO5rex5rex55qE56Wd56aP6K6p5oiR5b+D5Lit5YWF5ruh5LqG55Sc6Jyc55qE5b+r5LmQ77yM56yR5a655aaC6Iqx5YS/6Iis57u95pS+44CC"
                ]
            ]
        },
        {"name": "spk_id", "shape": [
                1,
                1
            ], "datatype": "BYTES", "data": [
                ["5Lit5paH5aWz"
                ]
            ]
        },
        {"name": "prompt_text", "shape": [
                1,
                1
            ], "datatype": "BYTES", "data": [
                ["55So5Zub5bed6K+d6K+06L+Z5Y+l6K+d"
                ]
            ]
        },
        {"name": "prompt_speech_path", "shape": [
                1,
                1
            ], "datatype": "BYTES", "data": [
                ["L2ZpbGVzL3plcm9fc2hvdF9wcm9tcHQud2F2"
                ]
            ]
        },
        {"name": "infer_mode", "shape": [
                1,
                1
            ], "datatype": "BYTES", "data": [
                ["aW5zdHJ1Y3Q="
                ]
            ]
        }
    ]
}'
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐