組み込みの 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/eascmdwin64Linux 32 ビット http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd32Linux 64 ビット http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd64macOS 64 ビット http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdmac64
スタンドアロンデバッグの実行
サービス構成ファイル (例:
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)。 完全なパラメーターリファレンスについては、「EASCMD クライアントを使用するためのコマンドの実行」をご参照ください。
スタンドアロンテストを実行します。
sudo eascmd test service.json