speech_sambert-hifigan_tts_zh-cn_16k的docker部署
speech_sambert-hifigan_tts_zh-cn_16k的docker部署
要部署 iic/speech_sambert-hifigan_tts_zh-cn_16k
模型的 Docker 容器,需要创建一个包含所有依赖的环境并启动服务。以下是完整的部署指南:
1. 创建 Dockerfile
首先创建一个 Dockerfile
来定义容器环境:
dockerfile
# 使用 Python 基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 安装系统依赖
RUN apt-get update && apt-get install -y \build-essential \ffmpeg \&& rm -rf /var/lib/apt/lists/*# 安装 Python 依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt# 复制模型代码和配置
COPY . .# 暴露服务端口
EXPOSE 8000# 启动服务
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
2. 创建 requirements.txt
列出所需的 Python 依赖:
txt
fastapi==0.95.1
uvicorn==0.22.0
modelscope==1.9.5
torch==2.0.1
numpy==1.24.3
3. 创建 API 服务代码 (app.py)
编写一个简单的 FastAPI 服务来处理语音合成请求:
python
运行
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
import torch
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks# 初始化模型
device = "cuda" if torch.cuda.is_available() else "cpu"
pipe = pipeline(task=Tasks.text_to_speech,model="iic/speech_sambert-hifigan_tts_zh-cn_16k",device=device
)# 创建 FastAPI 应用
app = FastAPI()# 定义请求模型
class TTSRequest(BaseModel):text: strvoice: str = "zhitian_emo" # 默认音色# 语音合成接口
@app.post("/tts")
async def text_to_speech(request: TTSRequest):try:# 调用模型生成语音result = pipe({"text": request.text,"voice": request.voice})# 返回 Base64 编码的音频return {"output": result["output_wav"],"text": request.text,"voice": request.voice}except Exception as e:raise HTTPException(status_code=500, detail=str(e))if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)
4. 构建 Docker 镜像
在包含上述文件的目录下执行:
bash
docker build -t tts-modelscope .
docker build -t tts-modelscope .
5. 运行 Docker 容器
bash
docker run -d -p 8000:8000 --gpus all tts-modelscope
docker run -p 8000:8000 tts-modelscope
docker run -it --rm tts-modelscope bash
docker run -v D:\Hworkspace\pythonProject\aiagent\ai004_speech_sambert_docker:/app -it --rm tts-modelscope bash
modelscope.hub.errors.NotExistError: The model: iic/speech_sambert-hifigan_tts_zh-cn_16k has no revision: v1.9.5 valid are: [v1.0.2,v1.0.1,v0.1.0,v1.0.0]!
docker run --name my-container -p 8000:8000 my-image:latest
- 参数说明:
-d
:后台运行容器-p 8000:8000
:将容器的 8000 端口映射到主机的 8000 端口--gpus all
:启用 GPU 支持(如果有 GPU)
5.1. 启动命令
uvicorn apdp:app --host 0.0.0.0 --port 8000 --workers 4
uvicorn apdp:app --host 0.0.0.0 --port 8000
docker run nginx
关键说明:
- 命令格式:直接去掉了原指令中的 JSON 数组格式,保留了命令及其参数的原始顺序
- 参数解释:
apdp:app
:指定了 Uvicorn 要运行的 ASGI 应用,通常是模块名:应用实例名
--host 0.0.0.0
:让服务器监听所有可用的网络接口--port 8000
:设置服务器监听的端口为 8000
附加建议:
如果需要在生产环境中运行,建议添加--workers
参数以提高并发处理能力:
bash
uvicorn apdp:app --host 0.0.0.0 --port 8000 --workers 4
6. 使用 API
向容器发送请求测试:
import requests
import json
import base64
from io import BytesIO
from scipy.io import wavfile
import sounddevice as sd# API 地址
url = "http://localhost:8000/tts"# 请求数据
payload = {"text": "北京今天天气怎么样","voice": "zhitian_emo"
}# 发送请求
response = requests.post(url, json=payload)
data = response.json()# 播放音频
audio_data = base64.b64decode(data["output"])
with BytesIO(audio_data) as f:samplerate, audio_array = wavfile.read(f)
sd.play(audio_array, samplerate)
sd.wait()
7.优化建议
-
模型缓存:首次运行时模型会自动下载,可以预先下载并挂载到容器中以加速启动。
-
GPU 加速:确保主机安装了 NVIDIA 驱动和 Docker 运行时,以充分利用 GPU。
-
并发处理:在生产环境中,可以添加负载均衡器(如 Nginx)来处理多个请求。
-
安全配置:添加 API 密钥验证,避免未授权访问。
通过以上步骤,你可以将 iic/speech_sambert-hifigan_tts_zh-cn_16k
模型部署为一个独立的 Docker 服务,方便集成到其他应用中。