详情页标题前

阿里云人工智能平台PAI使用C或C++开发自定义Processor-云淘科技

详情页1

本文为您介绍如何使用C或C++开发自定义Processor

快速上手Demo

下载EAS预测服务示例,该项目包含两个自定义Processor,其中:

  • echo:请求时将用户输入原样返回,同时返回模型中的文件列表。

  • image_classification:mnist文本分类,输入mnist jpg图片,返回图片分类类别。

编译方法请参见项目下的README文件,每个Processor的本地调试方法请参见各目录下的README文件。

接口定义

使用C或C++开发自定义Processor,需要定义initialize()和process()函数,分别用于服务初始化时加载模型和处理客户端请求并返回结果。两个函数的声明如下。

void *initialize(const char *model_entry, const char *model_config, int *state)

参数

类型

描述

model_entry

输入参数

对应创建服务时配置文件中的model_entry字段,关于该字段的更多信息请参见创建服务。您可以传入一个文件名(例如randomforest.pmml)或目录(例如./model)。

model_config

输入参数

对应创建服务时配置文件中的model_config字段,表示自定义的模型配置信息。关于该字段的更多信息请参见创建服务。

state

输出参数

模型加载状态。如果为0,则表示模型加载成功,否则表示模型加载失败。

返回值

自定义的model变量内存地址,可以为任意类型。

int process(void *model_buf, const void *input_data, int input_size,void **output_data, int *output_size)

参数

类型

描述

model_buf

输入参数

initialize()函数返回的模型内存地址。

input_data

输入参数

用户数入数据,可以为任意字符串或BINARY类型。

input_size

输入参数

用户数入数据的长度。

output_data

输出参数

Processor返回的数据,需要在堆为其分配内存,模型负责释放该内存。

output_size

输出参数

Processor返回的数据长度。

返回值

返回0或200表示成功,可以直接返回HTTP错误码。如果返回不识别的HTTP错误码,则自动转换为http 400 error。

代码示例

以下是一个简单的示例,未加载任何模型数据,预测服务将用户请求直接返回给客户端。

#include 
#include 
extern "C" {
    void *initialize(const char *model_entry, const char *model_config, int *state)
    {
       *state = 0;
        return NULL;
    }
    int process(void *model_buf, const void *input_data, int input_size,
            void **output_data, int *output_size)
    {
        if (inputSize == 0) {
            const char *errmsg = "input data should not be empty";
            *outputData = strndup(errmsg, strlen(errmsg));
            *outputSize = strlen(errmsg);
            return 400;
        }
        *outputData = strndup((char *)inputData, inputSize);
        *outputSize = inputSize;
        return 200;
    }
}

该Processor未读取任何模型信息,将用户输入原样输出,可以通过如下的Makefile将其编译为SO文件。

CC=g++
CCFLAGS=-I./ -D_GNU_SOURCE -Wall -g -fPIC
LDFLAGS= -shared -Wl,-rpath=./
OBJS=processor.o
TARGET=libpredictor.so
all: $(TARGET)
$(TARGET): $(OBJS)
      $(CC) -o $(TARGET) $(OBJS) $(LDFLAGS) -L./
%.o: %.cc
      $(CC) $(CCFLAGS) -c $< -o $@
clean:
      rm -f $(TARGET) $(OBJS)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/164104.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云人工智能平台PAI常见问题-云淘科技

    本文为您介绍自定义Processor的相关问题。 自定义Processor压缩包太大,如何提高上传效率? 开发Processor过程中,已经安装的Python包,为什么上线之后无法找到? EAS线上运行过程中,为什么无法找到ENV环境的某些系统依赖库? 如何解决导入cv2报错libSM.so.6: cannot open shared object file…

    阿里云人工智能平台PAI 2023年12月10日
  • 阿里云人工智能平台PAI使用说明-云淘科技

    Processor是包含在线预测逻辑(模型加载和请求预测逻辑)的程序包,如果EAS提供的官方通用Processor无法满足模型部署需求,则可以根据Processor的开发标准自定义Processor。 Processor部署 准备好模型和Processor文件等服务部署前的准备内容后,分别上传至存储云产品(OSS、NAS),EAS通过挂载存储云产品来获取部署…

    2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。