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

Platform For AI:オフライン予測の概要

最終更新日:Jul 22, 2024

予測コンポーネントは、EasyVisionによってトレーニングされたモデルを使用して、Platform for AI (PAI) でオフライン予測を実行できます。 このトピックでは、オフライン予測用の入力データ形式とPAIコマンドパラメーターについて説明します。

概要

EasyVisionは、MaxComputeテーブルからデータを読み取り、結果を書き込むことができます。 EasyVisionは、予測用のObject Storage Serviceファイルを読み取り、その結果をOSSファイルに書き込むこともできます。 オフライン予測プロセスは、組立ラインプロセスと見なすことができる。 各アトミック操作は、各ワーカーノードの複数のスレッドで非同期かつ同時に処理できます。 I/O操作中、各ワーカーノードは、シャードを使用して入力データを取得し、対応する出力シャードにデータを書き込みます。 たとえば、モデル予測用のテーブルから画像を読み込む場合、システムはワーカーノードの数に基づいて入力テーブルのデータを分割します。 各ワーカーノードは、独自のデータを読み取り、Base64データをデコードし、モデル予測を実行し、結果を出力テーブルに書き込みます。 Base64デコードとモデル予測は、複数のスレッドによって非同期に実行されます。 これにより、CPUとGPUの計算能力を十分に活用して並行処理を行うことができます。 次の図は、Base64のデコードとモデル予測のプロセスを示しています。

image

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

モデルのタイプ。 有効な値:

  • feature_extractor: 特徴抽出

  • classifier: イメージ分類

  • multilabel_classifier: マルチラベル分類

  • detector: オブジェクト検出

  • text_detector: テキスト検出

  • text_recognizer: テキストライン認識

  • text_detection_recognition: テキストの検出と認識

  • text_spotter: エンドツーエンドのテキスト認識

  • segmentor: セマンティック画像セグメンテーション

  • self_define: カスタム予測

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

不可

画像データの形式。 有効な値:

  • base64: テーブルに画像データがBase64形式で格納されていることを示します。

  • url: は、テーブルに画像のurlまたはOSSパスが格納されていることを示します。

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ファイルのパス。 入力ファイルの各行は、次のいずれかの形式にすることができます。

  • 予測するイメージのOSSパスまたはURL。 例: oss:// your_bucket /filerist.txt

  • JSON文字列。 詳細については、「カスタム入力データ」をご参照ください。

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: カスタムプロセスクラスの名前。

  • num_threads: カスタムプロセスクラスによって使用される同時スレッドの数。

  • batch_size: 処理するデータのバッチサイズ。

  • user_process_cls: カスタムプロセスクラスのモジュールパス。 たとえば、プロセスAをmodule.pyに実装した場合、プロセスAのモジュールパスはmodule.Aになります。

例: '{["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

不可

入力がビデオかどうかを指定します。 有効な値:

  • true

  • false

BOOL

false

use_image_predictor

不可

予測子がイメージ入力のみをサポートするかどうかを指定します。

BOOL

true

decode_type

不可

ビデオのデコードに使用されるメソッド。 有効な値:

  • 1: intraのみ

  • 2: キーフレームのみ

  • 3: bidirなし

  • 4: すべてデコード

INT

4

sample_fps

不可

1秒あたりのサンプリングで抽出されるフレーム数。

FLOAT

5

reshape_size

不可

出力フレームのサイズ (ピクセル単位) 。 このパラメーターを-1に設定すると、フレームのサイズは変更されません。

INT

-1

decode_batch_size

不可

同时にデコードされるフレームの数。

INT

10

decode_keep_size

不可

異なるバッチ内の重複フレームの数。

INT

0

enableDynamicCluster

不可

動的クラスター機能を有効にするかどうかを指定します。 この機能が有効になっている場合、単一のワーカーノードのフェールオーバーが許可されます。 タスクの例外が頻繁に発生する場合は、動的クラスター機能を有効にすることを推奨します。 有効な値:

  • true

  • false

BOOL

false

useSparseClusterSchema

不可

enableDynamicClusterパラメーターをtrueに設定した場合、useSparseClusterSchemaパラメーターもtrueに設定する必要があります。 有効な値:

  • true

  • false

BOOL

false