本文为您介绍如何使用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,示例如下。
相关字段说明请参见EASCMD客户端使用说明。{ "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" }
- 部署调试。
sudo eascmd test service.json
在文档使用中是否遇到以下问题
更多建议
匿名提交