开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:如何使用 PAI-EAS 部署 API 服务】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14232
如何使用 PAI-EAS 部署 API 服务
内容介绍
一个部分是如何部署模型在线服务;
第二部分是如何用部署好的服务做调用预测。这两部分都会讲解如何使用Web的前端页面来使用,如何使用EAS进行使用。
一、如何部署模型在线服务
二、部署好之后的调用
一、如何部署模型在线服务
首先我们从模型服务如何部署开始,部署首先进行 Web 页面的操作。
上图的页面是 PAI studio 运行好的一个实验前端页面,这是一个心脏病预测的实验。心脏病测验是一个基本的线性逻辑回归的预测,这样的模型训练好之后后面有一个勾号说明实验运营好并且实验已经训练好了。
可以对这个模型进行操作,首先可以右键勾号,可以将这个模型导出成一个 PMML 文件。之后可以将 PMML文件上传到 OSS 或者内部的任何一个存储的地方,之后用存储的链接来部署。
另外还有一种更简便的方式,可以点击左上角的一键部署(模型在线部署)就无需将模型导出,然后在上传到某一个存储的地方再使用链接部署了。现在尝试一下一键部署,选择实验画布里面有的服务,因为有时一个实验里面会有多种类型,需要做选择。选择好点击下一步。
可以看到上图做部署有三种选项,第一个是新建服务,将这个模型部署成一个全新的服务;第二个是在已有的服务基础上增加一个版本,这种服务适合模型的迭代更新,也就是说之前已经训好一个模型了,后来由于数据的变动相对模型进行优化迭代或者它的精准度有进一步的提升,就在这个基础上部署它的第二个版本。第三个是蓝绿部署,这个部署适用于两个差异比较大的模型,希望进行AB的互相的交换逐渐的向B模型去过渡的时候使用蓝绿部署的功能。在蓝绿部署的时候,这两个模型是可以互相切流的,也就是流量可以一点一点切换然后过渡过去的。比如原来的一个A模型和一个 B 模型,AB 模型同时接受流量并且流量的配比由我们自己决定,A 模型20%,B 模型占80%,这个我们都可以自己做调整。
这里我们先做一个新建的模型服务的示例。
定义一个名字,选择进程数(这个模型服务下面有多少个子进程,每一个子进程都可以独立的承担流量的接受并且对流量进行数据的处理以及预测;进程数多对服务有更好的保障。其中某一个进程坏掉了,其他进程可以继续做模拟服务的预测,保证线上服务的稳定性),核数(根据模型所需的资源来定,遇到具体的情况再做判断。)现在这个模型需要2核4G 的计算资源,选择好之后点击下一步。
上图是一个确认页面,确认没问题之后点击部署。
点击部署好了之后页面,会出现刚刚选好的模型0304,状态是 creating,需要稍微等待几分钟就会变成正常的running 的状态。下面的是昨天部署的服务。
可以对已经部署好的模型做一些相应的操作,点击模型的名称,可以看到这个模型的调用的说明:
如何访问模型以及它的 token 密钥是什么。这是下一步做模型调用的需要的基本信息。我们会在第二个环节讲解。
同样还可以做其他的操作,比如点击模型的更新
更新可以增加它的进程数(下面有几个子进程)更改每一个进程所需要的计算的资源量。以上是更新的操作。
同时还可以看到监控的页面,下图:
监控页面就是这个服务当前整体的 QPS、response、traffic 流量、RT 延迟、CPU 和 memory 水位的情况都可以在方便的通过可视化的方式看到模型的状态。因为目前的模型还没有被调用过,所有它的信息暂时还看不到。但是我们可以对这个模型进行服务调用,调用完之后会有相应的监控指标会出现。
刚刚模型的 creating 现在变成了 waiting,就是整个服务在做拉起的状态。Waiting 之后的状态就会进入 running,可能会有几分钟的时间。目前已经过了两分钟了。以上就是整个部署的过程,包括部署之后可以进行的一些操作。
还可以通过 ESCMD 的方式来进行服务的部署。
大家可以在文档中对应的了解,文档中也都讲解了 ESCMD 如何使用。首先第一步是下载 ESCMD,下载完成之后需要做权限的设置和基本账户的配置。以上东西配置好之后就可以进行命令的使用了。
下面是具体的演示:
在终端就可以通过./escmd 的方式来执行命令行的任务。在执行之前需要做一些准备工作。包括 json 文件的编写,也就是说待会 escmd 这个 comeout 命令就是 create 这个 .json 文件。也就是会根据这个 json 文件进行模型服务的部署。
"name": "heart 0304"
"node l_path“:”oss://eas-model-singpore/1664081855183111/heart-model.pmml”,
"processor":“pmml”,
"metadata":{
"instance"
:
1,
"cpu""
:
2
JSON 文件里面第一个写了 name,name 就是这个模型服务要部署成什么名字,就是在刚刚的页面做的同样的操作。下面还需要写上模型的路径(将文件下载下来之后上传到某一个地方,这个 URL 只要是内部能够访问的 URL,或者是OSS 的 URL 都可以在这里使用。)这是模型路劲。
下面是 process 的类型(这个模型使用什么样的模型加载处理逻辑,会有一些内置的 process,会可以使用自定义的方式对 process 进行定制化一些操作。)这里我们刚好有内置的 process 的名字,刚好叫做 PML。
Metadata 是对模型运行所需要的资源以及实例数进行定义,这里看到 instance(模型下面有多少个子进程)是一个实例,这里我们设置为2个实例。CPU 就 是需要计算的资源,memory 就是按照1:4比例分配的,这里2核的话就是8G.
编写好 json 文件之后,就可以去做执行了。
执行的命令:./escmdmac64(下载好的 cmd 的名字) create 命令 heart.json。点击回车之后就可以看到在做创建了。Servers is now creating(指的就是在创建状态了)这个创建也是需要一定的时间的。
我们可以看到在 CMD 操作的命令会在前端页面同样的展示出来。也就是说通过 CMD 创建的模型服务在前端同样看得到。看到模型0305现在就是在创建中的一个状态了。创建的状态也可以做一些模型的操作。以上就是使用 CMD做基本创建的命令执行。
CMD 还可以做很多其他的操作,除了创建还可以做修改配置:
我们刚刚在前端页面也做了修改配置,使用 CMD 就是把刚刚的 create 换成 modify,将名字写在后面+Dmetadata写好之后就可以做修改配置了。比如原来是2核8G现在想要变成4核16G.我们就可以通过 modify 的命令将 metadata的信息改一下。
还可以做模型的更新服务:
更新成新的模型文件。
还可以做停止 STOP。使用的方式都是大同小异的,都是在终端内使用./EScomeout 执行,之后将后面的命令换一下就好了。STOP、CREAT、modify、DELETE 等操作。
以上就是通过ESCMD来进行模型服务的部署,我们看到现在已经是 running 状态了,也就是刚刚创建的模型已经部署好了。发现前端页面也是同步的,模型服务是运行中的状态。
目前已经通过两种方式:前端页面一键部署、CMD 部署(需要将模型服务下载,并且上传到一个地方将 URL链接填进去)
以上是如何部署和一些操作服务,接下来我们看一些如何做部署好的服务调用。
二、部署好之后的调用
上图可以看到一些调用的信息,这是普通的公网调用,下面有访问地址和 token 密钥,密钥可以点击查看或者隐藏。就是通过以上地址定位模型查看以及健全的访问。
调用的两种方式:
点击右上角在线调试
这里以选好了模型的名字,请求地址,token 都自动调好了。这里只需要填一下 body 的信息,可以在文件内直接复制。链接就是心脏病做预测用的一些信息,比如包括这个人的性别、年龄、肺部的信息最后进行心脏病的预测。就是一些请求的内容。点击运行,就可以看到返回信息,就是判断有没有得心脏病和有没有得心脏病的概率;分别是0.98和0.01。通过这一块就可以做一个调试来看看这个模型运行是否正常,以及构建的请求的 body 是否合理合规。在线调试成功之后可以用正式的方式来做调研。在线调试就相当于前端页面的访问,正式的都是通过代码来调用的。
代码调用有两种方式:
第一种可以使用 ES 官方提供的 SDK 来做调用 python 的 SDK 或者 Java 的 SDK 两 种。下图就是使用 python的SDK来做调用。
另外也可以自己实现调用的逻辑,用 python 语言自行实现调用逻辑。这两种方式都是可以的。用官方的方式(可以做到性能的保障但是没有高的自由度)或者自定义实现的方式(可以实现特定的需求),下图就是自定义的例子:
import requests
url=http://1664081855183111.ap-southeast-1.pai-eas.aliyuncs.com/api/predict/heart_0302'
Headers={"Authorization":"OTJHNZU2MTJiNDLNUc5MWJjMDYOMjUzNGY2MGUyY2M3YjI2ZQNE==")
data = "I("sex":0, " cp":0 "fbs":0, "restecg": 0, "exang":0, "slop":0, "thal':0, "age":0, "trestbps":0, "chol":0, "thalach": 0, "oldpeak":0, "ca":0}
resp- requests.post (url, data =data, headers headers)
print resp
print resp. content
可以看到 import request,url 后面加链接。Header 的信息,data 是输入请求的数据(同在线调试)。下面去做预测。执行预测然后把预测的结果打印出来。
接下来就可以运行这个文件 python heart-custom.py 文件。然后运行,很快会出现 response[200]是正常的。也可以看到预测对应的概率,分别是0.99和0.005。
以上就是通过调用拿到结果的信息。预测之后就会有监控的信息。
可以看到上图的 response、QPS、CPU、memory(看不到可能是因为时长挑的太久了)已经有数据了。上图就是刚刚做的调用所展示出来的数据。如果调用更大的话,这边的监控数据会显示曲线。
以上就是如何通过前端页面或者通过代码的方式来做模型调用的服务。
调用的代码也有两种方式,对应的方式在文档内有详细的讲述如何使用。如何使用普通的方式调用或者使用官方的SDK在文档中看到。