全部产品
云市场

Java开发自定义Processor

更新时间:2019-11-12 15:23:05

1. 接口定义

使用Java开发自定义Processor仅需要定义一个类,除构造函数外,也是只需要Load()和Process()两个函数即可,类的原型如下:


  1. package com.alibaba.eas;
  2. import java.util.*;
  3. public class TestProcessor {
  4. public TestProcessor(String modelEntry, String modelConfig) {
  5. /* 传递模型文件名,可做一些初始化的工作 */
  6. }
  7. public void Load() {
  8. /* 根据模型名加载模型信息 */
  9. }
  10. public byte[] Process(byte[] input) {
  11. /* 对输入数据进行预测处理,返回结果,目前支持byte[]和String,推荐使用byte[],避免编码问题 */
  12. }
  13. public static void main(String[] args) {
  14. /* 主函数非必须,可用于本地单机验证类的功能 */
  15. }
  16. }


中间抛出异常时框架会捕捉到抛出的异常,并将Exception中的message作为错误信息返回给客户端,同时http响应400,用户也可以自己捕获异常,然后输出自己的异常错误信息,如下:


  1. try{
  2. } catch (com.alibaba.fastjson.JSONException e) {
  3. throw new RuntimeException("bad json format, " + e.getMessage());
  4. }


2、单机开发调试

单机调试功能可用于非集群模式用户在本地环境中对模型或processor进行开发调试,相关开发接口及调用接口与线上集群环境完全兼容,本功能可以让用户在开发测试阶段避免频繁部署更新服务,同时也能节省调试所用到的资源费用开销。

注意:该功能依赖于docker,需要在运行EASCMD的机器上预装docker。若需要GPU及CUDA,则需要预先在本地机器上安装CUDA及nvidia-docker

2.1. docker安装

如果还未安装,可以参考https://docs.docker-cn.com/engine/installation/


2.2.下载客户端工具EASCMD

windows环境:http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdwin64

linux32:http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd32

linux64: http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd64

mac: http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdmac64


2.3. 创建服务配置文件

将需要部署的模型和编写好的processor指定到配置文件,如下示例:

  1. {
  2. "name": "diy_test",
  3. "generate_token": "true",
  4. "model_path": "model.tar.gz", #可以写http路径,也可以写本地路径
  5. "model_entry": "./model_path/",
  6. "model_config": "{\"model\": \"deploy.prototxt\", \"weight\": \"bvlc_reference_caffenet.caffemodel\"}",
  7. "processor_path": "diy_predictor_gpu.tar.gz", #可以写http路径,也可以写本地路径
  8. "processor_entry": "diy_predictor_gpu.so",
  9. "processor_type": "cpp",
  10. "cuda": "/usr/local/cuda"
  11. }


相关配置字段说明详见

EASCMD客户端使用手册


2.4. 部署调试

  1. sudo eascmd test service.json