docker部署对话式AI工具包 —— Nvidia Nemo
前几天看到一篇文章 使用 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 显卡,其他不行😭
macOS10.12(Sierra)之后的macOS不能使用NVIDIA显卡,不论外置内置。
早在2016年,MacBook Pro就不在使用Nvidia GPU了
软件
问题
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
结果通过
- github clone失败
build过程中大概要clone 3个库,耗时长,并且很容易失败,挂代理也不行
可行的办法
下载Nemo
的某个版本,提交到自己的github账号下
还原Dockerfile
,然后只把k2
相关的注释掉(会报错,暂时无解)
然后通过阿里云的容器镜像服务
,在线构建镜像(记得要选择海外机),可以顺利构建出一个7G多的镜像