Docker系列——从零开始打包FunASR的Http服务

发布于:2025-03-16 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、项目结构准备

funasr-docker/
├── Dockerfile
├── requirements.txt
├── models/               # 预下载模型目录(可选)
├── config/              # 自定义配置文件
│   └── server_config.py
└── run.sh               # 服务启动脚本

二、核心文件配置

  1. Dockerfile(综合网页5/7/13)
# 基础镜像选择Python 3.8
FROM python:3.8-slim

# 设置环境变量
ENV MODEL_CACHE_PATH=/usr/src/app/model_cache
ENV DEBIAN_FRONTEND=noninteractive

# 安装系统依赖
RUN apt-get update && \
    apt-get install -y ffmpeg git && \
    rm -rf /var/lib/apt/lists/*

# 创建工作目录
WORKDIR /usr/src/app

# 复制项目文件
COPY requirements.txt .
COPY run.sh .
COPY config/ ./config/

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt \
    && pip install "modelscope[audio]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html

# 暴露服务端口
EXPOSE 10095

# 启动服务
ENTRYPOINT ["/bin/bash", "run.sh"]
  1. requirements.txt(参考网页12/13)
funasr==0.8.4
modelscope==1.11.0
uvicorn==0.23.2
fastapi==0.103.2
python-multipart==0.0.6
  1. run.sh 启动脚本(适配网页13)
#!/bin/bash

# 预下载模型(如果未预先打包)
if [ ! -d "$MODEL_CACHE_PATH" ]; then
    python -m funasr.utils.runtime_utils \
        --model-name damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online \
        --export-dir $MODEL_CACHE_PATH
fi

# 启动HTTP服务
exec python -m funasr.http_server \
    --model_path $MODEL_CACHE_PATH \
    --config_path /usr/src/app/config/server_config.py \
    --host 0.0.0.0 \
    --port 10095

三、构建与运行

  1. 镜像构建(网页1/3/7)
docker build -t funasr-http:1.0 .
  1. 容器运行(网页13/14)
docker run -d \
    -p 10095:10095 \
    -v ./model_cache:/usr/src/app/model_cache \
    --name funasr-service \
    funasr-http:1.0

四、服务验证

  1. 查看运行日志
docker logs -f funasr-service
  1. 发送测试请求(网页14)
curl -X POST "http://localhost:10095/recognition" \
    -H "Content-Type: multipart/form-data" \
    -F "audio_file=@test.wav"

五、高级配置建议

  1. 模型预下载优化(网页13)
# server_config.py
runtime_conf = {
    "vad_model": "damo/speech_fsmn_vad_zh-cn-16k-common-onnx",
    "model": "damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx",
    "punc_model": "damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx"
}
  1. 多阶段构建优化(网页8)
# 构建阶段
FROM python:3.8 as builder
RUN pip install --user modelscope
COPY models/ /models/
RUN python -m funasr.utils.runtime_utils --model-path /models

# 最终镜像
FROM python:3.8-slim
COPY --from=builder /root/.cache/modelscope/hub /usr/src/app/model_cache
...

六、排错指南

  1. 常见问题处理(网页3/7)
    模型下载失败:检查modelscope的版本兼容性,建议锁定特定版本
    端口冲突:确认10095端口未被占用,或修改EXPOSE/PORT参数
    GPU支持:需要nvidia-docker运行时和CUDA基础镜像

该方案综合了FunASR官方部署文档和Docker最佳实践,实现了:
• 预置中文语音识别模型
• HTTP API服务接口
• 模型缓存机制
• 可扩展配置架构

完整实现代码可参考FunASR官方runtime示例:https://github.com/modelscope/FunASR/tree/main/runtime/python/http