Step By Step
1、构建开发环境
2、python本地测试
3、修改app.py文件测试
4、部署服务
5、在线测试
6、Python SDK 服务调用
一、构建开发环境
- 1.1 本地机器环境
测试实例使用阿里云上海区域ECS:Ubuntu 18.04 64位
- 1.2 EASCMD工具工具安装
# 安装并初始化EASCMD,该示例为安装Linux环境的EASCMD工具。
$ wget http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd64
# 下载完成后,可以修改访问权限,配置阿里云上AccessKey信息。
$ chmod +x eascmd64
$ ./eascmd64 config -i <access_id> -k <access_key> -e pai-eas.cn-shanghai.aliyuncs.com
# 初始化环境。
$ ./eascmd64 pysdk init ./pyeas_demo
二、python本地测试
pmml文件下载地址
- 2.1 依赖包安装
pip install sklearn-pmml-model
- 2.2 pycharm 测试代码
import pandas as pd
from sklearn_pmml_model.ensemble import PMMLForestClassifier
clf = PMMLForestClassifier(pmml="randomForest.pmml")
df = pd.DataFrame([[5.6, 3.0, 4.1, 1.3]],columns=['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)'])
result = clf.predict(df)
print(str(result).encode())
- 2.3 测试结果
三、修改app.py文件测试
- 3.1 到创建的项目下
- 3.2 下载randomForest.pmml模型到目录下面
- 3.3 根据2.2的测试代码修改app.py文件为如下形式
# -*- coding: utf-8 -*-
import allspark
import pandas as pd
import numpy as np
from sklearn_pmml_model.ensemble import PMMLForestClassifier
class MyProcessor(allspark.BaseProcessor):
""" MyProcessor is a example
you can send mesage like this to predict
curl -v http://127.0.0.1:8080/api/predict/service_name -d '6.3 2.5 4.9 1.5'
"""
def initialize(self):
""" load module, executed once at the start of the service
do service intialization and load models in this function.
"""
self.model = PMMLForestClassifier(pmml="randomForest.pmml")
def pre_proccess(self, data):
""" data format pre process
"""
x, y, z, w = data.split(b' ')
return float(x), float(y), float(z), float(w)
def post_process(self, data):
""" proccess after process
"""
return str(data).encode()
def process(self, data):
""" process the request data
"""
x, y, z, w = self.pre_proccess(data)
df = pd.DataFrame([[x, y, z, w]],columns=['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)'])
result = self.model.predict(df)
print(result)
return self.post_process(result), 200
if __name__ == '__main__':
# paramter worker_threads indicates concurrency of processing
runner = MyProcessor(worker_threads=10)
runner.run()
- 3.4 ENV环境安装:sklearn-pmml-model
./ENV/bin/pip install sklearn-pmml-model
- 3.5 启动app
./ENV/bin/python app.py
- 3.6 本地curl测试服务
curl http://127.0.0.1:8080/ -d '5.6 3.0 4.1 1.3'
四、部署服务
- 4.1 服务打包
./eascmd64 pysdk pack ./pyeas_demo
- 4.2 上传压缩包到oss
./eascmd64 upload pyeas_demo.tar.gz --inner
- 4.3 修改app.json部署文件
- 4.4 EASCMD 使用app.json部署服务
/root/eas_demo/eascmd64 create app.json
五、在线测试
- 5.1 控制台查看部署的EAS服务
- 5.2 服务调用测试
六、Python SDK 服务调用
- 6.1 测试代码
import http.client
conn = http.client.HTTPConnection("172144**********.cn-shanghai.pai-eas.aliyuncs.com") # 请求endpoint
payload = "5.6 3.0 4.1 1.3" # 请求body
headers = {
'authorization': "NTQzN2QxZGQy*********" # 认证Token
}
conn.request("POST", "/api/predict/pyeas_demo", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
- 6.2 测试结果
说明:
本身PAI EAS服务是支持直接部署pmml格式的模型,这里主要是为了演示自定义process的部署过程,其它类型的模型部署方法类似,这里面主要介绍的是通过eascmd方式构建环境,后面会继续介绍一种基于容器的环境搭建与部署方式。