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

Platform For AI:Java によるカスタムプロセッサの開発

最終更新日:Aug 29, 2026

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

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

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

フェーズ メソッド 呼び出しタイミング 必須
初期化 コンストラクター サービスの起動時に1回 はい
ロード Load() 構築後に1回 はい
推論 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 またはローカルパス。パッケージは .tar.gz 形式で、展開するとコンパイル済みの JAR ファイルになります。ローカルパスはスタンドアロンモードでのみ使用できます。
    processor_mainclass Load()Process() を実装するクラスの完全修飾名。
    processor_type Java プロセッサの場合は java に設定します。
    metadata.resource 専用リソースグループのリソースグループ ID。
    metadata.instance サービスインスタンスの数。
    metadata.cpu インスタンスあたりの CPU コア数。
    metadata.memory インスタンスあたりのメモリ (単位: MB)。
  2. スタンドアロンテストを実行します。

    sudo eascmd test service.json