EAS内置的GBDT Processor(包括XGBoost、LightGBM),支持将相应格式的模型部署成在线服务,并提供在线实时推理。本文为您介绍如何部署及调用GBDT模型服务。
背景信息
GBDT(Gradient Boosted Decision Trees)是一类机器学习算法,XGBoost和LightGBM是算法对应的高效工程实现。
在Designer上,使用GBDT或XGBoost组件训练的算法模型导出成相应格式,或您自己的模型均可部署到EAS中。
从Designer上导出的GBDT模型可以直接通过PMML的Processor来进行部署,详情请参见PMML。
步骤一:部署服务
使用eascmd客户端部署模型服务时,您需要指定processor为xgboost或lightgbm,服务配置文件示例如下:
{
"name": "gbdt_example",
"processor": "<processor类型>",
"model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/xgb_model.json",
"metadata": {
"instance": 1,
"cpu": 1
}
}
其中:<processor类型>需要替换为xgboost或lightgbm。
当模型较大时,因模型编译功能可能会占用比较大的内存,建议您使用特定的自定义Processor进行模型部署。服务配置文件示例如下:
{
"name": "gbdt_example",
"processor_type": "python",
"processor_path": "https://eas-data.oss-cn-shanghai.aliyuncs.com/processors/xgboost_processor_notreelite.tar.gz",
"processor_entry": "xgboost_inference.py",
"model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/xgb_model.json",
"metadata": {
"instance": 1,
"cpu": 1
}
}
关于如何使用客户端工具部署服务,详情请参见服务部署:EASCMD&DSW。
步骤二:调用服务
服务部署完成后,在模型在线服务(EAS)页面,单击待调用服务服务方式列下的调用信息,查看服务访问的Endpoint和用于服务鉴权的Token信息。参考以下步骤进行服务调用。
构造服务请求。
GBDT服务的输入输出格式为JSON格式的数组,一次请求支持多条样本输入,示例如下。
[ [14.87, 16.67, 98.64, 682.5, 0.1162, 0.1649, 0.169, 0.08923, 0.2157, 0.06768, 0.4266, 0.9489, 2.989, 41.18, 0.006985, 0.02563, 0.03011, 0.01271, 0.01602, 0.003884, 18.81, 27.37, 127.1, 1095.0, 0.1878, 0.448, 0.4704, 0.2027, 0.3585, 0.1065], [11.2, 29.37, 70.67, 386.0, 0.07449, 0.03558, 0.0, 0.0, 0.106, 0.05502, 0.3141, 3.896, 2.041, 22.81, 0.007594, 0.008878, 0.0, 0.0, 0.01989, 0.001773, 11.92, 38.3, 75.19, 439.6, 0.09267, 0.05494, 0.0, 0.0, 0.1566, 0.05905] ]
说明实际发送服务请求时,可以去除JSON文件中的换行和空格,以减小网络传输,提升服务性能。
发送服务请求。
支持以下三种方式。
重要直接通过HTTP Header传入,会使Token在网络中以明文方式传输;使用EAS提供的SDK,会使用Token对请求做签名后再发送,安全性更高。
通过在线调试发送服务请求。
在目标服务的在线调试页面,发送服务请求,详情请参见服务在线调试。
使用curl命令对服务进行快速请求测试。
服务提供HTTP访问入口,发送请求时,可以将鉴权Token直接通过HTTP Header传入,示例如下。
// 发送请求。 curl -v 18284888792***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/eas_gbdt_example \ -H 'Authorization: YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA***' \ -d '[[14.87, 16.67, 98.64, 682.5, 0.1162, 0.1649, 0.169, 0.08923, 0.2157, 0.06768, 0.4266, 0.9489, 2.989, 41.18, 0.006985, 0.02563, 0.03011, 0.01271, 0.01602, 0.003884, 18.81, 27.37, 127.1, 1095.0, 0.1878, 0.448, 0.4704, 0.2027, 0.3585, 0.1065], [11.2, 29.37, 70.67, 386.0, 0.07449, 0.03558, 0.0, 0.0, 0.106, 0.05502, 0.3141, 3.896, 2.041, 22.81, 0.007594, 0.008878, 0.0, 0.0, 0.01989, 0.001773, 11.92, 38.3, 75.19, 439.6, 0.09267, 0.05494, 0.0, 0.0, 0.1566, 0.05905]]' // 返回如下结果。 [[0.0004703899612650275, 0.9877758026123047]]
使用Python SDK发送请求,详情请参见Python SDK使用说明。
示例代码如下。
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import StringRequest if __name__ == '__main__': client = PredictClient('1828488879222***.cn-shanghai.pai-eas.aliyuncs.com', 'pmml_test') client.set_token('YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA***') client.init() req = StringRequest('[[0.0004703899612650275,0.9877758026123047]]') for x in range(100): resp = client.predict(req) print(resp)
其他语言客户端SDK使用说明,详情请参见服务调用SDK。