娄底网站建设的公司,郑州网站建设炉石,做软件用什么软件,产品类型 速成网站最近因为项目需要将rasa nlu配置到docker容器中供系统调用#xff0c;本篇主要整理该服务的docker配置过程。 本篇的重点在于docker的使用#xff0c;不在Rasa NLU。 系统环境#xff1a;Ubuntu 18.04.6 1. Rasa介绍 Rasa是一个开源的机器学习框架#xff0c;专为构建基于文… 最近因为项目需要将rasa nlu配置到docker容器中供系统调用本篇主要整理该服务的docker配置过程。 本篇的重点在于docker的使用不在Rasa NLU。 系统环境Ubuntu 18.04.6 1. Rasa介绍 Rasa是一个开源的机器学习框架专为构建基于文本和语音的对话驱动型自动化智能客服助手而设计。它能够克服传统客服的部分缺陷提供自然语言理解(Rasa NLU)和对话管理(Rasa Core)两大核心功能。Rasa NLU负责用户意图识别、实体提取等而Rasa Core则基于对话历史和用户输入预测并决定下一步的对话动作。Rasa支持多种语言包括英语和汉语且易于集成到其他应用或系统中如网站、软件和机器人等。其轻量级、高性能的设计以及多模型支持的特性使得开发者能够快速构建各类智能对话应用。
2. 具体过程
2.1 拉取镜像 在开始之前需要将rasa镜像拉取到Ubuntu系统中。最近国内很多docker镜像库接连失效考虑使用代理拉取rasa镜像。但笔者的Ubuntu系统是安装在虚拟机中无法使用代理。基于以上种种原因本篇先在宿主机上拉取rasa镜像然后将宿主机作为私人仓库供虚拟机拉取镜像。具体步骤如下
确保宿主机系统和虚拟机中的Ubuntu系统都已经安装docker。先在宿主机系统(即安装虚拟机的系统)上拉取rasa镜像(rasa的镜像地址可以在docker hub中自行查找)。其具体代码如下:
docker pull rasa/rasa:3.6.20-full如果在Ubuntu系统上直接通过docker pull拉取rasa镜像能够成功的话就不需要执行后续步骤了
在宿主机系统上创建docker私人仓库并将刚刚拉取的rasa镜像推送到私人仓库中其具体代码如下
docker pull registry
#创建私人仓库对应的docker容器一般宿主机选择5000端口即设置-p 5000:5000,但笔者的宿主机系统上的5000端口已经被占用所以改成9000端口(端口号可以依据宿主机的情况来设定)
docker run -d --name registry -p 9000:5000 registry
#给rasa镜像打标签
docker tag rasa/rasa:3.6.20-full localhost:9000/rasa
#将镜像推送到私人仓库中
docker push localhost:9000/rasa使用ifconfig命令获取宿主机系统的ip地址(步骤省略)。虚拟机中的Ubuntu系统可以通过宿主机系统ip:9000访问宿主机上的私人仓库。修改虚拟机中Ubuntu系统中的docker文件daemon.json并重启docker服务。具体操作如下
sudo vim /etc/docker/daemon.json将如下内容添加到daemon.json文件中
insecure-registries:[宿主机系统ip:9000]
#宿主机ip地址不需要添加http://或https://前缀接着重启docker服务具体如下
systemctl daemon-reload
sytemctl restart docker.service虚拟机系统通过以下命令即可从宿主机上的docker私人仓库上拉取rasa镜像
docker login 宿主机ip:9000 #需要输入账号和密码可以随意设置与宿主机的账号密码无关
#领取rasa镜像
docker pull 宿主机系统ip:9000/rasa
#查看镜像
docker images2.2 创建容器 从此处开始以下过程都是在虚拟机中的Ubuntu系统上进行。rasa镜像拉取成功之后需要使用如下命令创建容器
docker run -d --name rasa -p 9000:5005 宿主机ip:9000/rasa run --enable-api关于这行命令及其使用的参数说明如下
-d:表示容器在后台运行-name:指定容器名称-p:映射或公开容器的端口到宿主机(这里的宿主机指的是docker容器宿主机即Ubuntu系统)的端口。在这个案例中即通过Ubuntu系统的9000端口(这个端口号与私人docker仓库的的端口号没有任何关系这里只是恰好相同)即可访问该docker容器的5005端口而5005端口为Rasa NLU默认的运行端口。run --enable-api: 为修改的容器启动命令。docker镜像的ENTRYPOINT指令规定了Docker容器启动时运行的默认可执行文件或命令而CMD规定了容器启动时的默认参数rasa镜像中默认的ENTRYPOINT和CMD可以docker hub中查到其具体如下。 但笔者希望该容器能以RESTful HTTP API的形式提供Rasa NLU服务所以需要修改CMD为run --enable-api(要更改CMD, 只需将覆盖的命令和参数添加到docker run命令的最后即可)。
上述命令运行成功之后即可通过docker ps -a命令看到成功创建的容器。
2.3 部署Rasa NLU 容器创建完成之后接着就需要与容器进行交互了并创建Rasa NLU服务了。其指令如下
docker exec -it -u 0 rasa bash关于这个命令有以下几点需要说明
-it:为用户提供了一个完整的交互式终端环境让用户能够像在本地计算机上一样与容器进行交互。-u 0:以root用户的身份在容器中执行指定的命令。如果在容器中执行指令的时候如果遇到权限问题就需要加上这个。bash: 启动一个新的bash shell会话。
成功执行上述命令之后即可看到如下结果 接着便可以在该容器中创建Rasa NLU服务了(先执行rasa init命令之后即可开始训练模型具体的过程这里省略)。 如果在创建服务的过程中需要向docker容器中传输文件可以使用docker cp命令。假设需要将Ubuntu系统中的/tmp/nlu.yml传输到rasa容器中的/app/data中时可以使用如下命令
#执行该命令时需要先使用exit命令退出docker容器的bash shell会话回到Ubuntu系统中
docker cp /tmp/nlu.yml rasa:/app/data若需要将容器中的文件传输到Ubuntu系统中则将上述两类路径的位置调换即可。
2.4 重启容器并使用服务 等到训练完Rasa NLU的模型之后需要重启容器保证所做的修改生效。具体指令如下
docker restart rasa接着便可以使用该服务了这里仅举一个例子具体如下
curl localhost:9000/model/parse -d {text:hello}其执行结果如下 还有一点要注意在重启完docker容器之后不要立即就执行上述命令。因为重启容器其实是执行rasa run --enable-api命令这个命令的执行需要一点时间。如果立即执行了curl命令调用Rasa NLU服务可能会报错。
参考资料
https://blog.csdn.net/qq_41056224/article/details/120343764