このトピックでは、Javaを使用してカスタムプロセッサを開発する方法について説明します。
構文
Javaを使用してカスタムプロセッサを開発するには、1つのクラスを定義するだけです。 このクラスには、コンストラクターに加えて、Load() 関数とProcess() 関数のみが必要です。 次の情報は、クラスのプロトタイプを指定します。
package com.alibaba.eas;
import java.util.*;
public class TestProcessor {
public TestProcessor(String modelEntry, String modelConfig) {
/* Pass the model file name for initialization. */
}
public void Load() {
/* Load model information based on the model name. */
}
public byte[] Process(byte[] input) {
/* Perform predictions based on the input data and return the prediction results. BYTE[] and STRING are supported. We recommend that you use BYTE[] to prevent coding issues. */
}
public static void main(String[] args) {
/* The main function is optional and its class functions can be verified on an on-premises standalone machine. */
}
}
例外が発生した場合、フレームワークは例外をキャプチャし、例外のメッセージをエラーメッセージとしてクライアントに返します。 さらに、HTTPステータスコード400が返されます。 次の例に示すように、例外をキャプチャして対応するエラーメッセージを返すこともできます
try{
} catch (com.alibaba.fastjson.JSONException e) {
throw new RuntimeException("bad json format, " + e.getMessage());
}
スタンドアロンの開発とデバッグ
スタンドアロンデバッグ機能は、非クラスタシナリオ用に設計されています。 この機能により、オンプレミス環境でモデルまたはプロセッサを開発およびデバッグできます。 開発および呼び出しインターフェイスは、オンラインクラスター環境と完全に互換性があります。 この機能により、開発およびテストフェーズで頻繁に新しいサービスを展開する必要がなくなり、デバッグのリソースコストを削減できます。
この機能はDockerに依存しています。 したがって、EASCMDクライアントが実行されているサーバーにDockerを事前にインストールする必要があります。 グラフィックス処理ユニット (GPU) とCUDAが必要な場合は、CUDAとNvidia-Dockerをオンプレミスサーバーに事前にインストールする必要があります。
スタンドアロンデバッグを実行するには、次の手順を実行します。
Dockerをインストールします。 詳細については、「Dockerのインストール」をご参照ください。
次のリンクからEASCMDクライアントをダウンロードします。 異なるバージョンが提供される。
サービス設定ファイルを作成します。
次の例に示すように、構成ファイルでデプロイするモデルとコンパイルするプロセッサを指定します
{ "name": "diy_test", "generate_token": "true", "model_path": "http://examplebucket.oss-cn-hangzhou-zmf.aliyuncs.com/scorecard.pmml", #You can specify an HTTP path or a local path (only for local debugging). "processor_path": "./diy_processor_release.tar.gz", #You can specify an HTTP path or a local path (only for local debugging). The package is decompressed to a JAR file compiled by the Java processor. "processor_mainclass": "com.alibaba.eas.TestProcessor", #The name of the main class that is used to implement Load() and Process() in the Java processor. "processor_type": "java", "metadata": { "resource": "eas-r-9lkbl2jvdm0puv****", #The resource parameter indicates that the model is deployed in a dedicated resource group. "instance": 1, "cpu": 1, "memory": 2000 } }
パラメーターの詳細については、「EASCMDクライアントを使用するコマンドの実行」をご参照ください。
モデルをデプロイしてデバッグします。
sudo eascmd test service.json