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

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

最終更新日:Apr 02, 2026

組み込みの Elastic Algorithm Service (EAS) プロセッサがモデルの要件を満たさない場合、カスタム Java プロセッサを実装して、初期化と推論のロジックを直接制御できます。

プロセッサのライフサイクル

Java プロセッサは単一のクラスであり、EAS が順番に呼び出す 3 つのライフサイクルフェーズがあります。

フェーズメソッド呼び出しタイミング必須
初期化コンストラクターサービス起動時に 1 回はい
ロードLoad()構築後に一度はい
推論Process(byte[] input)受信リクエストごとに 1 回はい
テストmain(String[] args)ローカルマシン上でのみいいえ

EAS は次の順序でフェーズを呼び出します。

コンストラクター → Load() → Process() [リクエストごと] → ...
  • コンストラクター:デプロイ時に渡されるモデルファイルのパス (modelEntry) とサービス構成の JSON 文字列 (modelConfig) を受け取ります。

  • Load():コンストラクターが受け取ったパスを使用して、モデルをメモリにロードします。

  • Process(byte[] input):各リクエストに対して推論を実行し、結果をバイト配列として返します。

プロセッサクラスの実装

com.alibaba.eas パッケージに 1 つのクラスを定義します。コンストラクター、Load()、および Process() は必須です。main() メソッドはオプションで、EAS にデプロイせずにローカルで単体テストを行う場合に役立ちます。

package com.alibaba.eas;
import java.util.*;

public class TestProcessor {

    // 起動時に 1 回呼び出されます。
    // modelEntry: モデルファイルのパス (ローカルまたは HTTP URL)。
    // modelConfig: デプロイ時に渡されるサービス構成の JSON 文字列。
    public TestProcessor(String modelEntry, String modelConfig) {
    }

    // モデルをメモリにロードします。コンストラクターの呼び出し後に 1 回呼び出されます。
    public void Load() {
    }

    // 推論を実行します。生のバイト配列を受け入れ、生のバイト配列を返します。
    // 文字コードの問題を避けるため、String の代わりに byte[] を使用します。
    public byte[] Process(byte[] input) {
    }

    // オプション: EAS にデプロイせずにクラスをローカルでテストします。
    public static void main(String[] args) {
    }
}

サポートされる入出力タイプ

Process()byte[]String をサポートします。文字コードの問題を避けるために byte[] を使用してください。

例外の処理

Process() がキャッチされない例外をスローした場合、EAS はそれをキャプチャし、HTTP ステータスコード 400 と共に例外メッセージをクライアントに返します。

カスタムエラーメッセージを返すには、Process() 内で例外をキャッチし、クライアントに受信させたいメッセージを含む RuntimeException をスローします。

try {
    // 推論ロジック
} catch (com.alibaba.fastjson.JSONException e) {
    throw new RuntimeException("bad json format, " + e.getMessage());
}

スタンドアロンモードでのローカルデバッグ

スタンドアロンモードを使用すると、クラスターにデプロイすることなく、ローカルマシンでプロセッサを開発およびテストできます。ローカルインターフェイスはオンラインのクラスター環境と完全に互換性があるため、デプロイ前にプロセッサを検証できます。

説明

スタンドアロンモードには Docker が必要です。モデルが GPU を必要とする場合は、ローカルマシンに CUDA と Nvidia-Docker もインストールしてください。

前提条件

開始する前に、以下が揃っていることを確認してください。

  • EASCMD を実行するマシンに Docker がインストールされていること

  • (GPU モデルの場合) CUDA と Nvidia-Docker がインストールされていること

  • ご利用のオペレーティングシステム用の EASCMD クライアントがダウンロードされていること:

    プラットフォームダウンロードリンク
    Windows 64 ビットhttp://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdwin64
    Linux 32 ビットhttp://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd32
    Linux 64 ビットhttp://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd64
    macOS 64 ビットhttp://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdmac64

スタンドアロンデバッグの実行

  1. サービス構成ファイル (例:service.json) を作成します。

    {
      "name": "diy_test",
      "generate_token": "true",
      "model_path": "http://examplebucket.oss-cn-hangzhou-zmf.aliyuncs.com/scorecard.pmml",
      "processor_path": "./diy_processor_release.tar.gz",
      "processor_mainclass": "com.alibaba.eas.TestProcessor",
      "processor_type": "java",
      "metadata": {
        "resource": "eas-r-9lkbl2jvdm0puv****",
        "instance": 1,
        "cpu": 1,
        "memory": 2000
      }
    }

    主要なパラメーター:

    パラメーター説明
    model_pathモデルファイルの HTTP URL またはローカルパス。ローカルパスはスタンドアロンモードでのみサポートされます。
    processor_pathプロセッサパッケージの HTTP URL またはローカルパス。パッケージは、コンパイル済みの JAR ファイルに展開される .tar.gz です。ローカルパスはスタンドアロンモードでのみサポートされます。
    processor_mainclassLoad()Process() を実装するクラスの完全修飾名。
    processor_typeJava プロセッサの場合は java に設定します。
    metadata.resource専用リソースグループのリソースグループ ID。
    metadata.instanceサービスインスタンスの数。
    metadata.cpuインスタンスあたりの CPU コア数。
    metadata.memoryインスタンスあたりのメモリ (MB)。
  2. スタンドアロンテストを実行します。

    sudo eascmd test service.json