ポータブルバッチ予測¶
本機能の提供について
The Portable Prediction Server is a premium feature exclusive to DatRobot MLOps. この機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
ポータブルバッチ予測(PBP)を使用すると、切断された環境で大量のデータをスコアリングできます。 ポータブルバッチ予測を使用する前に、自己完結型のDockerイメージとして配布されるDataRobotモデルパッケージ(.mlpkg
ファイル)用のDataRobot実行環境である、ポータブル予測サーバー(PPS)を設定する必要があります。 ポータブルバッチ予測は、PPSと同じDockerイメージを使用しますが、異なるモードで実行します。
スコアリング方法¶
ポータブルバッチ予測では、次のアダプターを使用してデータセットをスコアリングできます。
Filesystem
JDBC
AWS S3
Azure Blob
GCS
Snowflake
Synapse
ポータブルバッチ予測を実行するには、次のアーティファクトが必要です。
これらのアーティファクトを準備した後、ポータブルバッチ予測を実行できます。 ポータブルバッチ予測を実行する追加の例も参照してください。
ジョブ定義¶
時系列スコアリングの場合はprediction_endpoint
、intake_settings
、
output_settings
、timeseries_settings
(オプション)、JDBCスコアリングの場合はjdbc_settings
(オプション)を記述したJSON
構成ファイルを使用してジョブを定義できます。
セルフマネージドAIプラットフォームのみ:予測エンドポイントのSSL設定
prediction_endpiont
のSSL認証を無効にする必要がある場合、ALLOW_SELF_SIGNED_CERTS
をTrue
に設定することができます。 この設定では、アプリケーションからWebサーバーへのリクエストに対するSSL証明書の検証が無効になります。 これは、クラスターでSSL暗号化を有効にしていて、世界的に信頼された認証局によって署名されていない証明書(自己署名)を使用している場合に便利です。
prediction_endpoint
は、PPSにアクセスする方法を説明し、<schema>://<hostname>:<port>
として構成されます。ここで、次のパラメーターを定義します。
パラメーター | タイプ | 説明 |
---|---|---|
schema |
文字列 | http or https |
hostname |
文字列 | PPSが実行されているインスタンスのホスト名。 |
port |
文字列 | PPS内で実行されている予測APIのポート。 |
jdbc_setting
には次の属性があります。
パラメーター | タイプ | 説明 |
---|---|---|
url |
文字列 | JDBCインターフェースを介して接続するためのURL。 |
class_name |
文字列 | JDBC通信のエントリーポイントとして使用されるクラス名。 |
driver_path |
文字列 | ファイルシステム上のJDBCドライバーへのパス(PBPコンテナ内で使用可能である必要があります)。 |
template_name |
文字列 | 書き戻しの場合のテンプレートの名前。 サポートテンプレートの名前については、DataRobotの担当者にお問い合わせください。 |
その他のパラメーターは、標準の バッチ予測で使用できるものと同様ですが、camelCase
ではなくsnake_case
になっています。
パラメーター | タイプ | 説明 |
---|---|---|
abort_on_error |
ブーリアン | エラーが発生した場合のポータブルバッチ予測ジョブのキャンセルを有効または無効にします。 例: true |
chunk_size |
文字列 | 非同期タスクとして順番にスコアリングするために、データセットをチャンキングします。 ほとんどの場合、デフォルト値で最良のパフォーマンスが生成されます。 チャンクのサイズを大きくすると高速なモデルのスコアリングに使用でき、小さくすると低速なモデルのスコアリングに使用できます。 例: "auto" |
column_names_remapping |
array | このジョブの出力から、列名を変更するか、列を削除します。 列を削除するには、削除する列のoutput_name をnull またはfalse に設定します。例: [{'input_name': 'isbadbuy_1_PREDICTION', 'output_name':'prediction'}, {'input_name': 'isbadbuy_0_PREDICTION', 'output_name': null}] |
csv_settings |
object | カンマ区切り値(CSV)ファイルで区切り文字、文字エンコーディング、および引用文字を設定します。 例: { "delimiter": ",", "encoding": "utf-8", "quotechar": "\"" } |
deployment_id |
文字列 | ポータブルバッチ予測に関連付けられたデプロイのIDを定義します。 例: 61f05aaf5f6525f43ed79751 |
disable_row_level_error_handling |
ブーリアン | 予測行によるエラー処理を有効または無効にします。 例: false |
include_prediction_status |
ブーリアン | 出力にprediction_status 列を含めることを有効または無効にします。デフォルトではfalseです。 例: false |
include_probabilities |
ブーリアン | すべてのクラスで確率を返すことを有効または無効にします。 例: true |
include_probabilities_classes |
array | クラスの確率を指定するクラスを定義します。 例: [ 'setosa', 'versicolor', 'virginica' ] |
intake_settings |
object | 入力タイプに必要な 入力オプションを設定します。 例: { "type": "localFile" } |
num_concurrent |
整数 | デプロイで指定された予測インスタンスで同時にスコアリングするチャンクの最大数を設定します。 例: 1 |
output_settings |
object | 出力タイプに必要な 出力オプションを設定します。 例: { "credential_id": "string", "format": "csv", "partitionColumns": [ "string" ], "type": "azure", "url": "string" } |
passthrough_columns |
array | 予測応答に含めるスコアリングデータセット列を定義します。 このオプションとpassthrough_columns_set は一緒に使用できません。 例: [ "column1", "column2" ] |
passthrough_columns_set |
文字列 | 予測応答にすべてのスコアリングデータセット列を含めることを可能にします。 唯一のオプションはall です。 このオプションとpassthrough_columns は一緒に使用できません。 例: "all" |
prediction_warning_enabled |
ブーリアン | 予測警告を有効または無効にします。 例: true |
skip_drift_tracking |
ブーリアン | この予測バッチでドリフト追跡を有効または無効にします。 これにより、デプロイ統計に影響を与えることなくテスト予測を行えます。 例: false |
timeseries_settings |
object | 時系列予測に必要な設定を定義します。 例: { "forecast_point": "2019-08-24T14:15:22Z", "relax_known_in_advance_features_check": false, "type": "forecast" } |
ポータブルバッチ予測では 予測の説明を設定することもできます。
パラメーター | タイプ | 説明 |
---|---|---|
max_explanations |
整数/文字列 | 予測サーバーから返される説明の数を設定します。 SHAPの説明については、特別な定数all のみも受け入れられます。 例: 1 |
explanation_algorithm |
文字列 | 予測の説明に使用するアルゴリズムを、SHAPまたはXEMPのいずれかで定義します。 例: "shap" |
explanation_class_names |
array | 各行について説明するクラス名を定義します。 この設定は、多クラスモデルで XEMPベースの予測の説明にのみ適用でき、explanation_num_top_classes とは一緒に使用できません。例: [ "class1", "class2" ] |
explanation_num_top_classes |
整数 | 各行について説明するために、上位予測クラスの数を予測値ごとに設定します。 この設定は、多クラスモデルで XEMPベースの予測の説明にのみ適用でき、explanation_class_names とは一緒に使用できません。例: 1 |
threshold_low |
浮動小数 | 予測の説明を必要とする下限しきい値を設定します。 予測の説明を計算するには、予測は、この値以下(またはthreshold_high の値以上)である必要があります。 例: 0.678 |
threshold_high |
浮動小数 | 予測の説明を必要とする上限しきい値を設定します。 予測の説明を計算するには、予測は、この値以上(またはthreshold_low の値以下)である必要があります。 例: 0.345 |
以下に、Snowflakeとの間でスコアを付けるJDBCの例の概要を示します。これは、job_definition_jdbc.json
という名前のファイルに保存できます。
{
"prediction_endpoint": "http://127.0.0.1:8080",
"intake_settings": {
"type": "jdbc",
"table": "SCORING_DATA",
"schema": "PUBLIC"
},
"output_settings": {
"type": "jdbc",
"table": "SCORED_DATA",
"statement_type": "create_table",
"schema": "PUBLIC"
},
"passthrough_columns_set": "all",
"include_probabilities": true,
"jdbc_settings": {
"url": "jdbc:snowflake://my_account.snowflakecomputing.com/?warehouse=WH&db=DB&schema=PUBLIC",
"class_name": "net.snowflake.client.jdbc.SnowflakeDriver",
"driver_path": "/tmp/portable_batch_predictions/jdbc/snowflake-jdbc-3.12.0.jar",
"template_name": "Snowflake"
}
}
資格情報の環境特徴量¶
クラウドストレージでJDBCまたはプライベートコンテナを使用している場合は、必要な 資格情報を環境特徴量として指定できます。 次のテーブルは、使用される特徴量名を示しています。
名前 | タイプ | 説明 |
---|---|---|
AWS_ACCESS_KEY_ID |
文字列 | AWSアクセスキーID |
AWS_SECRET_ACCESS_KEY |
文字列 | AWSシークレットアクセスキー |
AWS_SESSION_TOKEN |
文字列 | AWSトークン |
GOOGLE_STORAGE_KEYFILE_PATH |
文字列 | GCP資格情報ファイルへのパス |
AZURE_CONNECTION_STRING |
文字列 | Azureの接続文字列 |
JDBC_USERNAME |
文字列 | JDBCのユーザー名 |
JDBC_PASSWORD |
文字列 | JDBCのパスワード |
SNOWFLAKE_USERNAME |
文字列 | Snowflakeのユーザー名 |
SNOWFLAKE_PASSWORD |
文字列 | Snowflakeのパスワード |
SYNAPSE_USERNAME |
文字列 | Azure Synapseのユーザー名 |
SYNAPSE_PASSWORD |
文字列 | Azure Synapseのパスワード |
これがJDBCスコアリングに使用されるcredentials.env
ファイルの例です。
export JDBC_USERNAME=TEST_USER
export JDBC_PASSWORD=SECRET
ポータブルバッチ予測を実行¶
ポータブルバッチ予測は、Dockerコンテナ内で実行されます。 ジョブ定義、ファイル、およびデータセット(ホストファイルシステムからスコアリングし、コンテナ内のパスを設定する場合)をDockerにマウントする必要があります。 以下は、前の例のJDBCジョブ定義と資格情報を使用して、Snowflakeとの間でスコアリングするポータブルバッチ予測ジョブを開始する方法の完全な例です。
docker run --rm \
-v /host/filesystem/path/job_definition_jdbc.json:/docker/container/filesystem/path/job_definition_jdbc.json \
--network host \
--env-file /host/filesystem/path/credentials.env \
datarobot-portable-predictions-api batch /docker/container/filesystem/path/job_definition_jdbc.json
ここに進行状況を監視するために、PPSとDataRobotプラットフォームへの書き戻し ジョブステータスを含む完全なエンドツーエンドフローを実行する方法の別の例を示します。
#!/bin/bash
# This snippet starts both the PPS service and PBP job using the same PPS docker image
# available from Developer Tools.
#################
# Configuration #
#################
# Specify path to directory with mlpkg(s) which you can download from deployment
MLPKG_DIR='/host/filesystem/path/mlpkgs'
# Specify job definition path
JOB_DEFINITION_PATH='/host/filesystem/path/job_definition.json'
# Specify path to file with credentials if needed (for cloud storage adapters or JDBC)
CREDENTIALS_PATH='/host/filesystem/path/credentials.env'
# For DataRobot integration, specify API host and Token
API_HOST='https://app.datarobot.com'
API_TOKEN='XXXXXXXX'
# Run PPS service in the background
PPS_CONTAINER_ID=$(docker run --rm -d -p 127.0.0.1:8080:8080 -v $MLPKG_DIR:/opt/ml/model datarobot/datarobot-portable-prediction-api:<version>)
# Wait some time before PPS starts up
sleep 15
# Run PPS in batch mode to start PBP job
docker run --rm -v $JOB_DEFINITION_PATH:/tmp/job_definition.json \
--network host \
--env-file $CREDENTIALS_PATH \
datarobot/datarobot-portable-prediction-api:<version> batch /tmp/job_definition.json
--api_host $API_HOST --api_token $API_TOKEN
# Stop PPS service
docker stop $PPS_CONTAINER_ID
その他の例¶
以下のすべての例では、PPSがポート8080
でローカルに実行されていると想定し、ファイルシステム構造の形式は次のとおりです。
/host/filesystem/path/portable_batch_predictions/
├── job_definition.json
├── credentials.env
├── datasets
| └── intake_dataset.csv
├── output
└── jdbc
└── snowflake-jdbc-3.12.0.jar
シングルモデルモードPPSでのファイルスコアリング¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"intake_settings": {
"type": "filesystem",
"path": "/tmp/portable_batch_predictions/datasets/intake_dataset.csv"
},
"output_settings": {
"type": "filesystem",
"path": "/tmp/portable_batch_predictions/output/results.csv"
}
}
#!/bin/bash
docker run --rm \
--network host \
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions \
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json
マルチモデルモードPPSでのファイルスコアリング¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"deployment_id": "lending_club",
"intake_settings": {
"type": "filesystem",
"path": "/tmp/portable_batch_predictions/datasets/intake_dataset.csv"
},
"output_settings": {
"type": "filesystem",
"path": "/tmp/portable_batch_predictions/output/results.csv"
}
}
#!/bin/bash
docker run --rm \
--network host \
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions \
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json
マルチモデルモードPPSでのファイルスコアリングとDRジョブステータス追跡とのインテグレーション¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"deployment_id": "lending_club",
"intake_settings": {
"type": "filesystem",
"path": "/tmp/portable_batch_predictions/datasets/intake_dataset.csv"
},
"output_settings": {
"type": "filesystem",
"path": "/tmp/portable_batch_predictions/output/results.csv"
}
}
PPS MLPKGの場合、ポータブルバッチ予測ジョブを実行しているデプロイのデプロイIDをconfig.yaml
で指定します。
#!/bin/bash
docker run --rm \
--network host
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions \
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json \
--api_host https://app.datarobot.com --api_token XXXXXXXXXXXXXXXXXXX
シングルモデルモードPPSでのJDBスコアリング¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"deployment_id": "lending_club",
"intake_settings": {
"type": "jdbc",
"table": "INTAKE_TABLE"
},
"output_settings": {
"type": "jdbc",
"table": "OUTPUT_TABLE",
"statement_type": "create_table"
},
"passthrough_columns_set": "all",
"include_probabilities": true,
"jdbc_settings": {
"url": "jdbc:snowflake://your_account.snowflakecomputing.com/?warehouse=SOME_WH&db=MY_DB&schema=MY_SCHEMA",
"class_name": "net.snowflake.client.jdbc.SnowflakeDriver",
"driver_path": "/tmp/portable_batch_predictions/jdbc/snowflake-jdbc-3.12.0.jar",
"template_name": "Snowflake"
}
}
credentials.env
ファイル:
JDBC_USERNAME=TEST
JDBC_PASSWORD=SECRET
#!/bin/bash
docker run --rm \
--network host \
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions \
--env-file /host/filesystem/path/credentials.env \
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json
シングルモデルモードPPSでのS3スコアリング¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"intake_settings": {
"type": "s3",
"url": "s3://intake/dataset.csv",
"format": "csv"
},
"output_settings": {
"type": "s3",
"url": "s3://output/result.csv",
"format": "csv"
}
}
credentials.env
ファイル:
AWS_ACCESS_KEY_ID=XXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXX
#!/bin/bash
docker run --rm \
--network host \
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions \
--env-file /path/to/credentials.env \
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json
マルチモデルモードPPSでのSnowflakeスコアリング¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"deployment_id": "lending_club",
"intake_settings": {
"type": "snowflake",
"table": "INTAKE_TABLE",
"schema": "MY_SCHEMA",
"external_stage": "MY_S3_STAGE_IN_SNOWFLAKE"
},
"output_settings": {
"type": "snowflake",
"table": "OUTPUT_TABLE",
"schema": "MY_SCHEMA",
"external_stage": "MY_S3_STAGE_IN_SNOWFLAKE",
"statement_type": "insert"
},
"passthrough_columns_set": "all",
"include_probabilities": true,
"jdbc_settings": {
"url": "jdbc:snowflake://your_account.snowflakecomputing.com/?warehouse=SOME_WH&db=MY_DB&schema=MY_SCHEMA",
"class_name": "net.snowflake.client.jdbc.SnowflakeDriver",
"driver_path": "/tmp/portable_batch_predictions/jdbc/snowflake-jdbc-3.12.0.jar",
"template_name": "Snowflake"
}
}
credentials.env
ファイル:
# Snowflake creds for JDBC connectivity
SNOWFLAKE_USERNAME=TEST
SNOWFLAKE_PASSWORD=SECRET
# AWS creds needed to access external stage
AWS_ACCESS_KEY_ID=XXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXX
#!/bin/bash
docker run --rm \
--network host \
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions \
--env-file /host/filesystem/path/credentials.env \
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json
マルチモデルモードPPSでのAzure Blobを介した時系列スコアリング¶
job_definition.json
ファイル:
{
"prediction_endpoint": "http://127.0.0.1:8080",
"deployment_id": "euro_date_ts_mlpkg",
"intake_settings": {
"type": "azure",
"url": "https://batchpredictionsdev.blob.core.windows.net/datasets/euro_date.csv",
"format": "csv"
},
"output_settings": {
"type": "azure",
"url": "https://batchpredictionsdev.blob.core.windows.net/results/output_ts.csv",
"format": "csv"
},
"timeseries_settings":{
"type": "forecast",
"forecast_point": "2007-11-14",
"relax_known_in_advance_features_check": true
}
}
credentials.env
ファイル:
# Azure Blob connection string
AZURE_CONNECTION_STRING='DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=XXX;EndpointSuffix=core.windows.net'
#!/bin/bash
docker run --rm \
--network host \
-v /host/filesystem/path/portable_batch_predictions:/tmp/portable_batch_predictions
--env-file /host/filesystem/path/credentials.env
datarobot/datarobot-portable-prediction-api:<version> batch \
/tmp/portable_batch_predictions/job_definition.json