本文為您介紹如何使用Java開發(fā)自定義Processor。

接口定義

使用Java開發(fā)自定義Processor僅需要定義一個類,該類中除構造函數(shù)以外,只需要 Load()Process()函數(shù)即可。類的原型如下。
package com.alibaba.eas;
import java.util.*;
public class TestProcessor {
  public TestProcessor(String modelEntry, String modelConfig) {
    /*傳遞模型文件名,可以添加初始化工作。*/
  }
  public void Load() {
    /*根據(jù)模型名加載模型信息。*/
  }
  public byte[] Process(byte[] input) {
    /*對輸入數(shù)據(jù)進行預測處理并返回結果。支持BYTE[]和STRING,推薦使用BYTE[],可以避免編碼問題。*/
  }
  public static void main(String[] args) {
    /*主函數(shù)為非必選,可以在本地單機驗證類功能。*/
  }
}
如果拋出異常,框架會捕獲該異常,并將Exception中的 message作為錯誤信息返回給客戶端,同時HTTP響應400。您也可以自己捕獲異常,輸出自己的異常錯誤信息,示例如下。
try{
} catch (com.alibaba.fastjson.JSONException e) {
  throw new RuntimeException("bad json format, " + e.getMessage());
}

單機開發(fā)調試

單機調試功能用于非集群模式,用戶在本地環(huán)境中對模型或Processor進行開發(fā)及調試,其開發(fā)接口及調用接口與線上集群環(huán)境完全兼容。該功能不僅可以避免您在開發(fā)測試階段頻繁部署新服務,而且可以節(jié)省調試所用的資源費用。
說明 該功能依賴于Docker,需要在運行EASCMD的服務器上預裝Docker。如果需要GPU及CUDA,則必須預先在本地安裝CUDA及Nvidia-Docker。
單機調試的方法如下:
  1. 如果未安裝Docker,則參見Docker安裝進行安裝。
  2. 下載客戶端工具EASCMD,各版本的下載地址如下:
  3. 創(chuàng)建服務配置文件。
    在配置文件中,指定需要部署的模型和編寫的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中實現(xiàn)Load()和Process()的主類名。
      "processor_type": "java",
      "metadata": {
         "resource": "eas-r-9lkbl2jvdm0puv****", #resource字段表示使用專屬資源組部署服務。
         "instance": 1,
         "cpu": 1,
         "memory": 2000
      }
    }
    相關字段說明請參見 命令使用說明
  4. 部署調試。
    sudo eascmd test service.json