すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:C または C++ を使用したカスタムプロセッサの開発

最終更新日:Aug 27, 2026

C または C++ のカスタムプロセッサは、initialize() 関数と process() 関数を定義することで、モデルのロードとリクエスト予測ロジックを実装します。

クイックスタート

pai-prediction-example プロジェクトをダウンロードします。このプロジェクトには、次の 2 つのカスタムプロセッサが含まれています:

  • echo:ユーザーの入力とモデル内のファイルリストをそのまま返します。

  • image_classificationmnist 画像分類。mnist の jpg 画像を入力として受け取り、画像の分類カテゴリを返します。

コンパイル方法はプロジェクトの README ファイルに記載されています。各プロセッサのローカルでのデバッグ方法は、それぞれのディレクトリにある README ファイルに記載されています。

インターフェイス定義

カスタムプロセッサは、initialize()process() という 2 つの C 関数をエクスポートする必要があります。どちらも必須であり、EAS はサービスライフサイクルの異なる時点でこれらの関数を呼び出します。

パラメーター 方向 説明
model_entry 入力 デプロイメント設定ファイルの model_entry フィールドに対応し、モデルパッケージのエントリファイルを示します。このフィールドの詳細については、「JSON デプロイメント」をご参照ください。ファイル名 (例:randomforest.pmml) またはディレクトリ (例:./model) を渡すことができます。
model_config 入力 デプロイメント設定ファイルの model_config フィールドに対応し、カスタムモデルの設定情報を示します。このフィールドの詳細については、「JSON デプロイメント」をご参照ください。
state 出力 モデルのロードステータス。成功した場合は 0 に設定します。それ以外の値はロードの失敗を示します。
戻り値 メモリにロードされたモデルへのポインター。EAS は、後続のすべての process() 呼び出しに、このポインターを model_buf として渡します。
パラメーター 方向 説明
model_buf 入力 initialize() によって返されるモデルのメモリアドレス。
input_data 入力 リクエストペイロード。文字列またはバイナリデータです。
input_size 入力 入力データの長さ。
output_data 出力 プロセッサによって返されるデータ。メモリはヒープ上に割り当てる必要があります。メモリの解放はモデル側で行う必要があります。
output_size 出力 出力データの長さ。
戻り値 応答の HTTP ステータスコード。成功した場合は 0 または 200 を返します。
HTTP ステータスコードとして認識されない戻り値は、自動的に HTTP 400 に変換されます。エラーを返す場合は、常に標準の HTTP ステータスコード (例:400 または 500) を使用してください。

使用例

以下に簡単な使用例を示します。このオンライン予測コードは、モデルデータをロードせず、ユーザーの入力をそのままクライアントに返します。

  • 予測コードを記述します。

    #include <stdio.h>
    #include <string.h>
    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 (input_size == 0) {
                const char *errmsg = "input data should not be empty";
                *output_data = strdup(errmsg);
                *output_size = strlen(errmsg);
                return 400;
            }  
            *output_data = strdup((char *)input_data);
            *output_size = input_size;
            return 200;
        }
    }
  • 次の 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)
  • EAS にサービスをデプロイします。JSON デプロイメント設定には、次のプロセッサ関連のフィールドを含める必要があります。processor_entry はメインのプロセッサファイルを指定します。これは、前のステップで生成された .so ファイルです。

    {
        "name": "test_echo",
        "model_path": "http://*****.oss-cn-shanghai.aliyuncs.com/****/saved_model.tar.gz",
        "processor_path": "oss://path/to/echo_processor_release.tar.gz",
        "processor_entry": "libpredictor.so",
        "processor_type": "cpp",
        "metadata": {
            "instance": 1
        }
    }