部署docker版本的FunASR
0. 研究背景
在一些对数据安全要求较高的场景中,通常是在内网中部署一套ASR系统,但是购买大厂的ASR系统价格十分昂贵,因此需要在自己公司内部机房中搭建一套ASR系统,不但可以减少数据泄露风险,同时还能减少成本。
1. 部署过程
拉取最新的funasr
镜像,可以访问这里。
1.1 模型下载
首先我们需要从 modelscope 网站中下载需要的模型。
damo/speech_fsmn_vad_zh-cn-16k-common-onnx # 音频活动性检测模型
damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx # 非实时语音识别模型
damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx # 实时语音识别模型
damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx # 实时预测标点符号模型
damo/speech_ngram_lm_zh-cn-ai-wesp-fst # 语言理解模型
thuduj12/fst_itn_zh # 逆文本化模型,用于把中文的数字转为阿拉伯数字
iic/SenseVoiceSmall-onnx # 支持识别事件,语种,情感模型
damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx # 时间戳模型
damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnx # 热词模型
1.2 导入docker镜像
通过下面命令导入镜像到服务器中。
docker load -i funasr.tar
2. 运行
首先启动导入的 docker 镜像,进入到容器内。
sudo docker run -p 10096:10095 -it --privileged=true
-v /usr/local/src/funasr/models:/workspace/models
asr.blog.lukeewin.top:latest
注意:
- 宿主服务器一定要开放 10096 端口。如果还有其它防火墙,也需要放行 10096 端口。
- 把模型放到宿主服务器中的
/usr/local/src/funasr/models
路径中。以 damo 开头的就创建 damo 目录,然后把以 damo开头的模型文件放进去,其它的类似。
执行上面的命令后会进入到 docker 容器内。
然后执行下面命令切换到指定路径下执行下面的命令来启动接口。
cd /workspace/FunASR/runtime
bash run_server_2pass.sh
注意:如果你想要替换模型,必须添加参数,或者编辑 run_server_2pass.sh 脚本。你打开这个脚本之后,就知道如何修改了。
打开这个脚本之后,可以看到下面内容,这里解释一下下面的各个参数的意思。
download_model_dir="/workspace/models" # 这是指定模型加载的路径
model_dir="damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx" # 这是指定非流式模型
online_model_dir="damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx" # 这是设置流式模型,也就是实时语音识别模型
vad_dir="damo/speech_fsmn_vad_zh-cn-16k-common-onnx" # 这是指定 vad 模型
punc_dir="damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx" # 这是指定实时标点符号预测模型
itn_dir="thuduj12/fst_itn_zh" # 这是逆文本化模型,也即是把中文的数字转为阿拉伯数字
lm_dir="damo/speech_ngram_lm_zh-cn-ai-wesp-fst" # 这是语言模型
port=10095 # 端口号
certfile="$(pwd)/ssl_key/server.crt" # ssl 证书
keyfile="$(pwd)/ssl_key/server.key" # ssl 证书
hotword="$(pwd)/websocket/hotwords.txt" # 热词,使用热词模型才有效果
# set decoder_thread_num # 服务端线程池个数(支持的最大并发路数),脚本会根据服务器线程数自动配置decoder-thread-num、io-thread-num
decoder_thread_num=$(cat /proc/cpuinfo | grep "processor"|wc -l) || { echo "Get cpuinfo failed. Set decoder_thread_num = 32"; decoder_thread_num=32; }
multiple_io=16
io_thread_num=$(( (decoder_thread_num + multiple_io - 1) / multiple_io )) # 服务端启动的IO线程数
model_thread_num=1 # 每路识别的内部线程数(控制ONNX模型的并行),默认为 1,其中建议 decoder-thread-num*model-thread-num 等于总线程数
cmd_path=/workspace/FunASR/runtime/websocket/build/bin # 执行命令的路径
cmd=funasr-wss-server-2pass
详细内容可以参考官方文档。
如何访问可以参考官方文档。
2. 安装docker
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
sudo apt update
sudo apt-get update
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成
#查看Docker版本
sudo docker version
#查看Docker运行状态
sudo systemctl status docker
# 设置开机自启动
sudo systemctl enable docker
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
source /etc/bash_completion.d/docker.sh
参考文章
有偿部署,欢迎联系我。