docker部署对话式AI工具包 —— Nvidia Nemo

发布于 2022-05-19 18:09 阅读 170

前几天看到一篇文章 使用 Nvidia Nemo —— 3行代码快速实现语音转文字的应用,感觉还不错,就实践了一下

Nemo 是一个集成自动语音识别(ASR),自然语言处理(NLP),语音合成(TTS)的对话式AI工具包。

首先,找到Github NVIDIA/NeMo,README里介绍了各种部署方法,实践中我选了docker部署

docker部署

值得一提的是NeMo代码中有Dockerfile文件,并且官方也给出了build命令:DOCKER_BUILDKIT=1 docker build -f Dockerfile -t nemo:latest .,不过大概率你是执行不成功的1️⃣,推荐直接用官方镜像

资源包 大小 备注
nvcr.io/nvidia/nemo:22.03 7.11 GB(展开后16.5 GB) 官方镜像
stt_zh_citrinet_512 142.89 MB 模型1,音频转文字
nmt_zh_en_transformer6x6 860.75 MB 模型2,中文转英文

如果只是要运行视频中演示的代码,没有nvidia显卡也可以,如下

docker run -it --rm -v --shm-size=16g -p 8888:8888 -p 6006:6006 --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/nemo:22.03

使用

进入容器后,执行./start-jupyter.sh,会在本地8888端口启动jupyter,通过浏览器访问http://localhost:8888/,要填token,token在控制台可以看到

视频中的代码

import nemo

# 语言转文字
import nemo.collections.asr as nemo_asr

citrinet = nemo_asr.models.EncDecCTCModel.from_pretrained(model_name="stt_zh_citrinet_512")
mandarin_text=citrinet.transcribe(paths2audio_files=["/workspace/nemo/test.wav"])
print(mandarin_text)

# 文字转语音
import nemo.collections.nlp as nemo_nlp

nmt_model = nemo_nlp.models.MTEncDecModel.from_pretrained(model_name="nmt_zh_en_transformer6x6")
nmt_model.translate(mandarin_text)

代码可以保存为.py文件在容器内执行,也可以通过jupyter在线执行

代码中用到的两个模型无需手动下载,程序会自动下载并加载

关于docker使用GPU

硬件要求

只能使用支持 cuda 的 nvidia 显卡,其他不行😭

支持cuda 的显卡列表

macOS10.12(Sierra)之后的macOS不能使用NVIDIA显卡,不论外置内置。

早在2016年,MacBook Pro就不在使用Nvidia GPU了

软件

由于没有 nvidia 的显卡,这部分未经测试

docker容器使用GPU方法

docker使用GPU

问题

1️⃣

你可能遇到

  1. archive.ubuntu.com下面的包请求失败

尝试修改Dockerfile

RUN sed -i'' 's/archive\.ubuntu\.com/us\.archive\.ubuntu\.com/' /etc/apt/sources.list

结果不行,直接修改源

#清华的源
ADD sources.list /etc/apt

结果通过

  1. github clone失败

build过程中大概要clone 3个库,耗时长,并且很容易失败,挂代理也不行

可行的办法

下载Nemo的某个版本,提交到自己的github账号下

还原Dockerfile,然后只把k2相关的注释掉(会报错,暂时无解)

然后通过阿里云的容器镜像服务,在线构建镜像(记得要选择海外机),可以顺利构建出一个7G多的镜像

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验