EAS内置的PMML Processor,支持将PMML格式的模型部署成在线服务,并提供在线实时推理。本文为您介绍如何部署及调用PMML模型服务。

背景信息

Designer上导出的PMML格式的算法模型,可以使用PMML Processor部署到EAS中;使用Sklearn、Xgboost等开源算法框架训练的算法模型,转换成PMML格式后,也可以使用PMML Processor部署到EAS中,详情请参见通用模型导出

更多关于PMML模型的介绍,详情请参见PMML模型介绍

缺失值填充策略

PMML Processor提供默认的缺失值填充策略。如果PMML模型文件中的特征字段没有指定缺失值填充(isMissing)策略,则系统默认以如下值进行填充。

数据类型

默认值填充

BOOLEAN

false

DOUBLE

0.0

FLOAT

0.0

INT

0

STRING

""

步骤一:部署服务

使用eascmd客户端部署PMML模型服务时,您需要指定Processor种类pmml,服务配置文件示例如下。

{
  "name": "eas_lr_example",
  "processor": "pmml",
  "model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr.pmml",
  "metadata": {
    "instance": 1,
    "cpu": 1
  }
}

关于如何使用eascmd客户端工具部署服务,详情请参见服务部署:EASCMDDSW

您也可以通过控制台部署PMML模型服务,详情请参见服务部署:控制台

步骤二:调用服务

参考以下步骤进行服务调用。

  1. PMML服务部署完成后,在模型在线服务(EAS)页面,单击待调用服务服务方式列下的调用信息,查看服务访问的Endpoint和用于服务鉴权的Token信息。

  2. 构造服务请求。

    PMML服务的输入输出格式为JSON格式的纯文件,一次请求支持多条样本输入,每条样本为KV格式的特征数据,示例如下。

    [
        {
            "address": 12,
            "age": 22,
            "ed": 4,
            "marital": 3.0,
            "region": 2.0,
            "tenure": 4.0
        },
        {
            "address": 2,
            "age": 34,
            "ed": 6,
            "marital": 1.3,
            "region": 2.1,
            "tenure": 4.2
        }
    ]
    说明

    实际发送服务请求时,可以去除JSON文件中的换行和空格,以减小网络传输,提升服务性能。

  3. 发送服务请求。

    支持以下两种方式:

    重要

    直接通过HTTP Header传入,会使Token在网络中以明文方式传输;使用EAS提供的SDK,会使用Token对请求做签名后再发送,安全性更高。

    • 使用curl命令对服务进行快速请求测试。

      服务提供HTTP访问入口,发送请求时,可以将鉴权Token直接通过HTTP Header传入,示例如下。

      // 发送请求。
      curl -v 18284888792***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml_test \
            -H 'Authorization: YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA***' \
            -d '[{"region": 2.0, "marital":3.0,"tenure":4.0, "age":22,"address":12,"ed":4},{"region": 2.1, "marital":1.3,"tenure":4.2, "age":34,"address":2,"ed":6}]'

      其中:

      • 18284888792***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml_test:替换为步骤1查询的服务访问的Endpoint。

      • Authorization:配置为步骤1查询的用于服务鉴权的Token信息。

      返回结果示例如下。

      [{"p_0":0.2856724025030001,"p_1":0.7143275974969999},{"p_0":0.18324957921381624,"p_1":0.8167504207861838}]
    • 使用Python SDK发送请求,详情请参见Python SDK使用说明

      示例代码如下。

      #!/usr/bin/env python
      
      from eas_prediction import PredictClient
      from eas_prediction import StringRequest
      
      if __name__ == '__main__':
          # 替换为步骤1查询的服务访问的Endpoint和服务名称。
          client = PredictClient('1828488879222***.cn-shanghai.pai-eas.aliyuncs.com', 'pmml_test')
          # 替换为步骤1查询的用于服务鉴权的Token信息。
          client.set_token('YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA***')
          client.init()
      
      
          req = StringRequest('[{"region": 2.0, "marital":3.0,"tenure":4.0, "age":22,"address":12,"ed":4},{"region": 2.1, "marital":1.3,"tenure":4.2, "age":34,"address":2,"ed":6}]')
          for x in range(100):
              resp = client.predict(req)
              print(resp)
      

      其他语言客户端SDK使用说明,详情请参见服务调用SDK

相关文档