本文为您介绍如何使用Java开发自定义Processor。
接口定义
使用Java开发自定义Processor仅需要定义一个类,该类中除构造函数以外,只需要
Load()和
Process()函数即可。类的原型如下。
package com.alibaba.eas;
import java.util.*;
public class TestProcessor {
public TestProcessor(String modelEntry, String modelConfig) {
/*传递模型文件名,可以添加初始化工作。*/
}
public void Load() {
/*根据模型名加载模型信息。*/
}
public byte[] Process(byte[] input) {
/*对输入数据进行预测处理并返回结果。支持BYTE[]和STRING,推荐使用BYTE[],可以避免编码问题。*/
}
public static void main(String[] args) {
/*主函数为非必选,可以在本地单机验证类功能。*/
}
}
如果抛出异常,框架会捕获该异常,并将Exception中的
message作为错误信息返回给客户端,同时HTTP响应400。您也可以自己捕获异常,输出自己的异常错误信息,示例如下。
try{
} catch (com.alibaba.fastjson.JSONException e) {
throw new RuntimeException("bad json format, " + e.getMessage());
}
单机开发调试
单机调试功能用于非集群模式,用户在本地环境中对模型或Processor进行开发及调试,其开发接口及调用接口与线上集群环境完全兼容。该功能不仅可以避免您在开发测试阶段频繁部署新服务,而且可以节省调试所用的资源费用。
单机调试的方法如下:
说明 该功能依赖于Docker,需要在运行EASCMD的服务器上预装Docker。如果需要GPU及CUDA,则必须预先在本地安装CUDA及Nvidia-Docker。
- 如果未安装Docker,则参见Docker安装进行安装。
- 下载客户端工具EASCMD,各版本的下载地址如下:
- 创建服务配置文件。
在配置文件中,指定需要部署的模型和编写的Processor,示例如下。
相关字段说明请参见 命令使用说明。{ "name": "diy_test", "generate_token": "true", "model_path": "http://examplebucket.oss-cn-hangzhou-zmf.aliyuncs.com/scorecard.pmml", #支持HTTP路径或本地路径(仅用于本地调试)。 "processor_path": "./diy_processor_release.tar.gz", #支持HTTP路径或本地路径(仅用于本地调试),解压后为java processor编译的jar包。 "processor_mainclass": "com.alibaba.eas.TestProcessor", #java processor中实现Load()和Process()的主类名。 "processor_type": "java", "metadata": { "resource": "eas-r-9lkbl2jvdm0puv****", #resource字段表示使用专属资源组部署服务。 "instance": 1, "cpu": 1, "memory": 2000 } }
- 部署调试。
sudo eascmd test service.json