本文为您介绍如何使用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。
单机调试的方法如下:
  1. 如果未安装Docker,则参见Docker安装进行安装。
  2. 下载客户端工具EASCMD,各版本的下载地址如下:
  3. 创建服务配置文件。
    在配置文件中,指定需要部署的模型和编写的Processor,示例如下。
     {
      "name": "diy_test",
      "generate_token": "true",
      "model_path": "model.tar.gz", #支持HTTP路径或本地路径。
      "model_entry": "./model_path/",
      "model_config": "{\"model\": \"deploy.prototxt\", \"weight\": \"bvlc_reference_caffenet.caffemodel\"}",
      "processor_path": "diy_predictor_gpu.tar.gz", #支持HTTP路径或本地路径。
      "processor_entry": "diy_predictor_gpu.so",
      "processor_type": "java",
      "cuda": "/usr/local/cuda"
    }
    相关字段说明请参见EASCMD客户端使用说明
  4. 部署调试。
    sudo eascmd test service.json