本文為您介紹如何使用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