予測コンポーネントは、EasyVisionによってトレーニングされたモデルを使用して、Platform for AI (PAI) でオフライン予測を実行できます。 このトピックでは、オフライン予測用の入力データ形式とPAIコマンドパラメーターについて説明します。
概要
EasyVisionは、MaxComputeテーブルからデータを読み取り、結果を書き込むことができます。 EasyVisionは、予測用のObject Storage Serviceファイルを読み取り、その結果をOSSファイルに書き込むこともできます。 オフライン予測プロセスは、組立ラインプロセスと見なすことができる。 各アトミック操作は、各ワーカーノードの複数のスレッドで非同期かつ同時に処理できます。 I/O操作中、各ワーカーノードは、シャードを使用して入力データを取得し、対応する出力シャードにデータを書き込みます。 たとえば、モデル予測用のテーブルから画像を読み込む場合、システムはワーカーノードの数に基づいて入力テーブルのデータを分割します。 各ワーカーノードは、独自のデータを読み取り、Base64データをデコードし、モデル予測を実行し、結果を出力テーブルに書き込みます。 Base64デコードとモデル予測は、複数のスレッドによって非同期に実行されます。 これにより、CPUとGPUの計算能力を十分に活用して並行処理を行うことができます。 次の図は、Base64のデコードとモデル予測のプロセスを示しています。
EasyVisionは、ビデオデータを処理するためのビデオレベルの予測モデルを提供します。 画像関連モデルを呼び出してビデオフレームを予測することもできます。 EasyVisionのオフライン処理フレームワークは、ビデオデータを自動的にデコードし、単一フレーム画像を予測し、すべてのビデオフレーム結果を要約します。
EasyVisionが提供するデフォルトの予測コードを使用して、オフライン予測用のトレーニング済みモデルをロードすることはできません。EasyVisionを使用すると、カスタム予測コードを指定して、ev_predictの既存のI/O機能を再利用できます。 データをダウンロードしてデコードすることで、モデルのオフライン予測を実行できます。 EasyVisionでは、予測前にカスタムプロセスを挿入することもできます。 入力データは、予測器に送られる前に処理される。 詳細については、「カスタム入力データ」をご参照ください。
入力データ形式
MaxComputeテーブルからのデータの読み取り
入力テーブルには1つ以上の列を含めることができます。 1つの列は、画像のBase64-encoded URLまたはバイナリデータ用です。 この列のデータは文字列型です。 サンプルスキーマ:
+------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | id | string | | | | url | string | | | +------------------------------------------------------------------------------------+OSSファイルからのデータの読み取り
OSS入力ファイルの各列は、URLまたはOSSエンドポイントです。 例:
oss:// your/path/to/image.jpg http:// your.path/to/image.jpgカスタム入力データ
MaxComputeテーブルからデータを読み取ると、画像のURLまたはBase64-encodedデータのみが取得されます。 データがOSSファイルから読み取られると、イメージのダウンロードとデコードを容易にするために、イメージのURLのみが取得されます。 上記の方法では、画像のNumPy配列のみを取得できます。 {"image": np.ndarray} 形式は、予測中にさまざまなプロセスと予測器によって使用されます。 カスタム予測子とプロセスを使用するユーザーの数が増加するにつれて、単一入力形式はビジネス要件を満たすことができません。 したがって、OSS読み取りモードは、カスタムデータ形式をサポートするように変更されます。
カスタム形式は、元のOSSファイル形式またはJSON文字列形式にすることができます。 入力ファイルの各行はJSON文字列です。 複数のキーと値のペアを入力できます。 すべてのキーと値のペアはディクショナリに保存され、カスタム予測器とプロセスに転送されます。 カスタムキーに基づいて、対応する値を簡単に取得できます。
値がOSSパスまたはURLの場合、システムは自動的に複数のスレッドを使用してファイルコンテンツをダウンロードし、値をPython形式のオブジェクトに変換します。
read()やreadlines()などのfileメソッドを呼び出して、ファイルの内容を取得できます。 値がイメージ拡張子を持つファイルを指す場合、システムは自動的にイメージをデコードします。 キーに基づいて、input_dataディクショナリから値を取得できます。 値はnumpy.ndarray型です。サンプル入力データ:
{"image":"http:// your/path/to/image.jpg" 、"previous":"oss:// your/path/to/prior.txt" 、"config": {"key1":1, "key2":"value2"}}} {"image":"http:// your/path/to/image.jpg" 、"previous":"oss:// your/path/to/prior.txt" 、"config": {"key2":1, "key2":"value2"}}上記の入力データは、次のフィールドを含むinput_dataディクショナリのデータに変換されます。
image: イメージのデコードされたデータ。
prior: ファイル形式のオブジェクト。
config: JSON文字列のディクショナリ。
input_dataディクショナリは次の形式です。 すべてのカスタムプロセスおよび予測子クラスについて、キーを使用して画像データを照会できます。
input_dict = { "image": np.ndarray、 "prior" : file_like_object、 "config": {"key1":1, "key2":"value2"} }重要EasyVisionのすべての組み込み予測子は、imageキーを使用して入力イメージを取得します。 カスタム入力形式を使用してEasyVisionの組み込み予測子を呼び出す場合は、画像データにimageキーを使用する必要があります。
パラメーター
パラメーター | 必須 | 説明 | データ型 | デフォルト値 |
model_path | 可 | モデルのOSSパス。 例: "oss:// your_bucket/your_model_dir" | STRING | N/A |
model_type | 可 | モデルのタイプ。 有効な値:
model_typeパラメーターをself_defineに設定すると、user_predictor_clsパラメーターで指定された予測クラスが読み込まれます。 | STRING | N/A |
buckets | 可 | OSSバケットに関する情報。 カスタムモデルを使用する場合は、モデルを格納するOSSバケット情報を指定する必要があります。 例: "oss://{bucket_name}.{oss_host}/{path}" | STRING | N/A |
arn | 可 | OSSリソースへのアクセス権限を持つRAMロールのAlibaba Cloud Resource Name (ARN) 。 ARNの取得方法の詳細については、「PAI-TensorFlowタスクのパラメーター」トピックの「I/Oパラメーター」をご参照ください。 | STRING | N/A |
feature_name | 不可 | 抽出するフィーチャーの名前。 このパラメーターは、model_typeパラメーターをfeature_extractorに設定した場合にのみ必要です。 例: resnet_v1_50/logits | STRING | Empty string ("") |
input_table | 不可 | 入力テーブルの名前。 たとえば、"odps:// prj_name/tables/table_name" という名前の非パーティションテーブル、または "odps:// prj_name/tables/table_name/pt=xxx" という名前のパーティションテーブルを使用できます。 | STRING | Empty string ("") |
image_col | 不可 | イメージデータを含む列の名前。 | STRING | "image" |
image_type | 不可 | 画像データの形式。 有効な値:
| STRING | "base64" |
reserved_columns | 不可 | 予約済みデータ列の名前。 複数の名前はコンマ (,) で区切ります。 例: "col1,col2,col3" | STRING | Empty string ("") |
result_column | 不可 | 結果列の名前。 | STRING | "prediction_result" |
output_table | 不可 | 出力テーブル。 値の形式は、input_tableパラメーターの値の形式と同じです。 テーブルが存在しない場合、システムは自動的に出力テーブルを作成し、テーブルのパーティションを作成します。 予測を実行する前に、出力テーブルとしてパーティションテーブルを作成することもできます。 | STRING | Empty string ("") |
ライフサイクルの設定 (Set lifecycle) | 不可 | 出力テーブルのライフサイクル。 | INT | 10 |
num_worker | 不可 | 予測ワーカーノードの数。 ワーカーノードの数を増やして、オフライン予測を高速化できます。 | INT | 2 |
cpuRequired | 不可 | ワーカーノードのCPU数。 100の値は1つのCPUを示します。 | INT | 1600 |
gpuRequired | 不可 | 各ワーカーノードのGPUの数。 100の値は1つのGPUを示します。 ワーカーノードには最大100個のGPUを使用できます。 値0は、CPUクラスターが使用されていることを示します。 | INT | 100 |
input_oss_file | 不可 | 入力OSSファイルのパス。 入力ファイルの各行は、次のいずれかの形式にすることができます。
| STRING | Empty string ("") |
output_oss_file | 不可 | 予測結果の保存に使用される出力OSSファイルのパス。 システムは、複数の結果ファイルを生成し、結果ファイルを出力OSSファイルにマージすることができる。 結果ファイルの先頭には、出力OSSファイルの名前が付いています。 結果ファイルの数は、num_workerパラメーターで指定されたワーカーノードの数と同じです。 | STRING | Empty string ("") |
output_dir | 不可 | 出力ファイルが保存されているフォルダ。 例: "oss:// your_bucket/dir" カスタム出力形式を使用する場合は、すべての結果画像ファイルがこのフォルダーに保存されます。 | STRING | Empty string ("") |
user_resource | 不可 | アップロードされたリソースのパス。TAR.GZ、ZIP、またはPythonファイルです。 OSSパスとHTTP URLがサポートされています。 例: oss:// xxx/a.tar.gzおよび http://example.com/c.zip | STRING | Empty string ("") |
user_predictor_cls | 不可 | カスタム予測子クラスのモジュールパス。 たとえば、module.pyにPredictor Aを実装する場合、Predictor Aのモジュールパスはmodule.Aです。 | STRING | Empty string ("") |
user_process_config | 不可 | カスタムプロセスクラスの設定。 次のフィールドを使用して、プロセスクラスを設定できます。 他のカスタムフィールドを設定することもできます。
例: '{["job_name":"myprocess","user_process_cls": module.ClassA "num_threads":2, "batch_size":1]}' | JSON | Empty string ("") |
queue_size | 不可 | キャッシュキューの長さ。 | INT | 1024 |
batch_size | 不可 | 予測のバッチサイズ。 | INT | 1 |
preprocess_thread_num | 不可 | 画像のデコードやダウンロードなどの前処理に使用される同時スレッドの数。 | INT | 4 |
predict_thread_num | 不可 | 予測に使用される同時スレッドの数。 | INT | 2 |
is_input_video | 不可 | 入力がビデオかどうかを指定します。 有効な値:
| BOOL | false |
use_image_predictor | 不可 | 予測子がイメージ入力のみをサポートするかどうかを指定します。 | BOOL | true |
decode_type | 不可 | ビデオのデコードに使用されるメソッド。 有効な値:
| INT | 4 |
sample_fps | 不可 | 1秒あたりのサンプリングで抽出されるフレーム数。 | FLOAT | 5 |
reshape_size | 不可 | 出力フレームのサイズ (ピクセル単位) 。 このパラメーターを-1に設定すると、フレームのサイズは変更されません。 | INT | -1 |
decode_batch_size | 不可 | 同时にデコードされるフレームの数。 | INT | 10 |
decode_keep_size | 不可 | 異なるバッチ内の重複フレームの数。 | INT | 0 |
enableDynamicCluster | 不可 | 動的クラスター機能を有効にするかどうかを指定します。 この機能が有効になっている場合、単一のワーカーノードのフェールオーバーが許可されます。 タスクの例外が頻繁に発生する場合は、動的クラスター機能を有効にすることを推奨します。 有効な値:
| BOOL | false |
useSparseClusterSchema | 不可 | enableDynamicClusterパラメーターをtrueに設定した場合、useSparseClusterSchemaパラメーターもtrueに設定する必要があります。 有効な値:
| BOOL | false |