本文為您介紹如何使用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。
- 如果未安裝Docker,則參見Docker安裝進行安裝。
- 下載客戶端工具EASCMD,各版本的下載地址如下:
- 創(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 } }
- 部署調試。
sudo eascmd test service.json