MLOpsライブラリとエージェントのスプーラー設定¶
MLOpsライブラリはスプーラーを介してエージェントと通信します。そのため、エージェントとライブラリスプーラーの設定が一致していることが重要です。 MLOpsエージェントとライブラリのスプーラー設定を構成する場合、一部の設定は必須であり、一部はオプションです(オプションの設定は、以下の各表に示されています)。 必要な設定は、プログラムで設定することも、一般設定およびスプーラー固有の設定セクションに記載されている環境変数を使用して設定することもできます。 環境変数による設定とプログラムによる設定の両方が混在する場合は、環境変数による設定が優先されます。
MLOpsエージェントとライブラリの通信は、次のスプーラーのいずれかを使用するように設定できます。
MLOpsエージェントの設定¶
mlops.agent.conf.yaml
で別のサービスとしてエージェントを実行する場合は、channelConfigs
セクションのコメントを解除し、必須の設定を入力して、スプーラー設定を指定します。 channelConfigs
の設定の詳細については、MLOpsエージェントの設定を参照してください。
MLOpsライブラリ設定¶
MLOpsライブラリは、プログラムで設定するか、環境変数を使用して設定できます。 プログラムでスプーラーを設定するには、MLOpsinit
呼び出し中にスプーラーを指定します。たとえば、Pythonライブラリを使用してファイルシステムスプーラーを設定するには、次のようにします。
mlops = MLOps().set_filesystem_spooler("your_spooler_directory").init()
備考
上記のコードで指定されたディレクトリを作成する必要があります。プログラムはそれを作成しません。
他のスプーラータイプに対して同等のインターフェイスが存在します。
環境変数を使用してMLOpsライブラリとエージェントを設定するには、一般設定およびスプーラー固有設定のセクションを参照してください。
一般的な設定¶
次の環境変数を使用して、MLOpsエージェントとライブラリを設定し、スプーラータイプを選択します。
特徴量 | 説明 |
---|---|
MLOPS_DEPLOYMENT_ID |
MLOpsライブラリからメトリックを受け取る必要があるDataRobotデプロイのデプロイID。 |
MLOPS_MODEL_ID |
MLOpsライブラリによって報告される必要があるDataRobotモデルのモデルID。 |
MLOPS_SPOOLER_TYPE |
MLOpsライブラリが監視エージェントとの通信に使用するスプーラーのタイプ。 有効なスプーラータイプは次のとおりです。
|
オプション設定 | |
MLOPS_SPOOLER_DEQUEUE_ACK_RECORDS |
処理が完了するまで、監視エージェントがレコードをデキューしないことを確認します。 このオプションをtrue に設定して、接続エラーによってレコードが削除されないようにします。 このオプションを有効化することをお勧めします。 スプーラーチャネルの場合、デキュー操作は次のように動作します。
|
MLOPS_ASYNC_REPORTING |
MLOpsライブラリに、指標を非同期でスプーラーにレポートさせます。 |
MLOPS_FEATURE_DATA_ROWS_IN_ONE_MESSAGE |
スプーラーへの単一のメッセージに含める必要のある特徴量の行数。 |
MLOPS_SPOOLER_CONFIG_RECORD_DELIMITER |
スプーラー設定文字列内のキーと値のペア間のデフォルト値; を置き換える区切り文字(たとえば、key1=value1;key2=value2 をkey1=value1:key2=value2 に)。 |
MLOPS_SPOOLER_CONFIG_KEY_VALUE_SEPARATOR |
スプーラー設定文字列内のキーと値のペア間のデフォルト値= を置き換える区切り文字(たとえば、key1=value1 をkey1:value1 に)。 |
備考
ここでは、設定ファイルまたはプログラムで設定された変数定義よりも環境変数の設定が優先されます。
スプーラータイプを設定した後、スプーラー固有の環境変数を設定できます。
スプーラー固有設定¶
設定したMLOPS_SPOOLER_TYPE
に応じて、サポートされているスプーラーに固有の環境変数として設定情報を提供できます。
Filesystem¶
次の環境変数を使用して、FILESYSTEM
スプーラーを設定します。
特徴量 | 説明 |
---|---|
MLOPS_FILESYSTEM_DIRECTORY |
DataRobotにレポートするメトリックを保存するディレクトリ。 ディレクトリを作成する必要があります。プログラムはそれを作成しません。 |
オプション設定 | |
MLOPS_FILESYSTEM_MAX_FILE_SIZE |
デフォルトの最大ファイルサイズ(バイト単位)を上書きします。 デフォルト:1GB |
MLOPS_FILESYSTEM_MAX_NUM_FILE |
デフォルトの最大ファイル数を上書きします。 デフォルト:10ファイル |
プログラムによるfilesystemスプーラーの設定
MLOpsライブラリ用のファイルシステムスプーラーをプログラムに従って設定することもできます。
ポータブル予測サーバーのfilesystemディレクトリ
FILESYSTEM
スプーラーでポータブル予測サーバー(PPS)を使う場合、PPSの起動時にこのディレクトリをバインドマウントする必要があります。 例:
1 2 3 4 5 6 |
|
PPSの起動について詳しくは、コードスニペットでのPPSの起動のドキュメントを参照してください。
Amazon SQS¶
Amazon SQS
をスプーラーとして使用する場合、次の2つの方法のいずれかで資格情報セットを提供できます。
-
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
、AWS_REGION
またはAWS_DEFAULT_REGION
環境変数にクレデンシャルを設定します。 AWSソフトウェアパッケージのみがこれらのクレデンシャルを使用します。DataRobotはそれらにアクセスしません。 -
AWS環境を使用している場合は、資格情報認証用のAWS IAM(IDおよびアクセス管理)ロールを作成します。
次の環境変数のいずれかを使用して、SQS
スプーラーを設定します。
特徴量 | 説明 |
---|---|
MLOPS_SQS_QUEUE_URL |
スプーラーに使用されるSQSキューのURL。 |
MLOPS_SQS_QUEUE_NAME |
スプーラーに使用されるSQSキューのキュー名。 |
備考
SQS
スプーラータイプを使用する場合は、スプーラー名またはURLのみを指定してください。
RabbitMQ¶
RABBITMQ
スプーラー設定に使用する環境変数は以下の通りです。
特徴量 | 説明 |
---|---|
MLOPS_RABBITMQ_QUEUE_URL |
スプーラーに使用されるRabbitMQキューのURL。 |
MLOPS_RABBITMQ_QUEUE_NAME |
スプーラーに使用されるRabbitMQキューのキュー名。 |
オプション設定 | |
MLOPS_RABBITMQ_SSL_CA_CERTIFICATE_PATH |
CA証明書ファイル(.pem ファイル)へのパス。 |
MLOPS_RABBITMQ_SSL_CERTIFICATE_PATH |
クライアント証明書(.pem ファイル)へのパス。 |
MLOPS_RABBITMQ_SSL_KEYFILE_PATH |
クライアントキー(.pem ファイル)へのパス。 |
MLOPS_RABBITMQ_SSL_TLS_VERSION |
クライアントに使用するTLSバージョン。 TLSバージョンはサーバーバージョンと一致する必要があります。 |
備考
RabbitMQ設定では、パスワードなしでRSA形式のキーが必要です。 以下の通り、PKCS8からRSAにキーを変換することができます。
openssl rsa -in mykey_pkcs8_format.pem -text > mykey_rsa_format.pem
キーを生成するには、RabbitMQ TLSサポートを参照してください。
Google Cloud Pub/Sub¶
Google CloudPUBSUB
をスプーラーとして使用する場合は、GOOGLE_APPLICATION_CREDENTIALS
環境変数に適切な資格情報を指定する必要があります。 Google Cloudソフトウェアパッケージのみがこれらのクレデンシャルを使用します。DataRobotはそれらにアクセスしません。
PUBSUB
スプーラー設定に使用する環境変数は以下の通りです。
特徴量 | 説明 |
---|---|
MLOPS_PUBSUB_PROJECT_ID |
スプーラーによって使用されるプロジェクトのPub/SubプロジェクトIDは、プロジェクトIDのフルパスである必要があります。 |
MLOPS_PUBSUB_TOPIC_NAME |
スプーラーによって使用されるトピックのPub/Subトピック名。これは、プロジェクトIDを含む完全修飾トピック名パスではなく、プロジェクト内のトピック名である必要があります。 |
MLOPS_PUBSUB_SUBSCRIPTION_NAME |
スプーラーが使用するサブスクリプションのPub/Subサブスクリプション名。 |
Pub/Subサービスのアカウント権限
Google Cloud Pub/Subを監視エージェントのスプーラーとして使用するには、以下のサービスアカウント権限が必要です。
レベル | ユーザー権限 |
---|---|
プロジェクト | プロジェクトビューアー |
トピック | Pub/Subパブリッシャー |
サブスクリプション | Pub/Subビューアー、Pub/Subサブスクライバー |
DataRobotの外部で監視エージェントと通信するために必要な基本権限は、_Pub/Subパブリッシャー_と_Pub/Subサブスクライバー_です。 _Pub/Subビューアー_と_プロジェクトビューアー_はDataRobotの予測環境で必要です。
Apache Kafka¶
次の環境変数を使用してApacheKAFKA
スプーラーを設定します。
特徴量 | 説明 |
---|---|
MLOPS_KAFKA_TOPIC_NAME |
生成または使用する特定のKafkaトピックの名称。 ApacheKafkaリファレンス:主な概念と用語 |
MLOPS_KAFKA_BOOTSTRAP_SERVERS |
エージェントが接続するサーバーのリスト。 アップストリームで使用されるbootstrap.servers 設定と同じ構文を使用します。 ApacheKafkaリファレンス: bootstrap.servers |
オプション設定 | |
MLOPS_KAFKA_CONSUMER_POLL_TIMEOUT_MS |
メッセージを処理してDataRobotに送信する前にメッセージを消費するまで待機する時間 デフォルト値:3000ミリ秒。 |
MLOPS_KAFKA_CONSUMER_GROUP_ID |
このコンシューマーが属するコンシューマーグループを識別する一意の文字列。 デフォルト値: tracking-agent 。 ApacheKafkaリファレンス: group.id |
MLOPS_KAFKA_CONSUMER_MAX_NUM_MESSAGES |
メッセージを処理し、結果をDataRobot MLOpsに送信する前に、一度で使用するメッセージの最大数。 デフォルト値:500 ApacheKafkaリファレンス: max.poll.records |
MLOPS_KAFKA_SESSION_TIMEOUT_MS |
コンシューマーグループのクライアント障害を検出するために使用されるタイムアウト。 ApacheKafkaリファレンス: session-timeout.ms |
MLOPS_KAFKA_MESSAGE_BYTE_SIZE_LIMIT |
チャネルにイベントを生成するときの最大のチャンクサイズ。 デフォルト値:1000000バイト |
MLOPS_KAFKA_DELIVERY_TIMEOUT_MS |
メッセージを永続的に失敗したと見なす前にメッセージを送信するための絶対上限時間。 ApacheKafkaリファレンス: delivery.timeout.ms |
MLOPS_KAFKA_REQUEST_TIMEOUT_MS |
クライアントが再試行する前に要求への応答を待機する最大時間。 ApacheKafkaリファレンス: request.timeout.ms |
MLOPS_KAFKA_METADATA_MAX_AGE_MS |
クライアントがクラスターメタデータを更新する前に待機する最大時間(ミリ秒単位)。 ApacheKafkaリファレンス: metadata.max.age.ms |
MLOPS_KAFKA_SECURITY_PROTOCOL |
ブローカーへの接続に使用されるプロトコル。 ApacheKafkaリファレンス: security.protocol 有効な値。 |
MLOPS_KAFKA_SASL_MECHANISM |
クライアントがブローカーでの認証に使用するメカニズム。 ApacheKafkaリファレンス: sasl.mechanism |
MLOPS_KAFKA_SASL_JAAS_CONFIG (Javaのみ) |
JAAS設定ファイルで使用される形式の接続設定。 ApacheKafkaリファレンス: sasl.jaas.config |
MLOPS_KAFKA_SASL_LOGIN_CALLBACK_CLASS (Javaのみ) |
カスタムログインハンドラークラス。 ApacheKafkaリファレンス: sasl.login.callback.handler.class |
MLOPS_KAFKA_CONNECTIONS_MAX_IDLE_MS (Javaのみ) |
クライアントが非アクティブな接続を閉じるまでの最大時間(ミリ秒単位)。 この値は、ネットワークインフラストラクチャが課す可能性のあるタイムアウトよりも低く設定する必要があります。 ApacheKafkaリファレンス: connections.max.idle.ms |
MLOPS_KAFKA_SASL_USERNAME (Pythonのみ) |
PLAINおよびSASL-SCRAM-*メカニズムで使用するSASLユーザー名。 リファレンス: librdkafka でsasl.username の設定を参照してください。 |
MLOPS_KAFKA_SASL_PASSWORD (Pythonのみ) |
PLAINおよびSASL-SCRAM-*メカニズムで使用するSASLパスワード。 リファレンス: librdkafka でsasl.password の設定を参照してください。 |
MLOPS_KAFKA_SASL_OAUTHBEARER_CONFIG (Pythonのみ) |
OAuthログインコールバックを渡すためのカスタム設定。 リファレンス: librdkafka でsasl.oauthbearer.config の設定を参照してください。 |
MLOPS_KAFKA_SOCKET_KEEPALIVE (Pythonのみ) |
ネットワーク接続でTCPキープアライブを有効にし、これらの接続を介してパケットを定期的に送信して、非アクティブが原因で必要な接続が閉じられないようにします。 リファレンス: librdkafka でsocket.keepalive.enable の設定を参照してください。 |
DataRobot API¶
DataRobot APIスプーラーを設定するプロセスは、一般的なスプーラー設定とは異なります。 通常、監視エージェントはスプーラーに接続して情報を収集し、その情報をDataRobot MLOpsに送信します。 DataRobot APIを使用すると、実際にスプーラーに接続することはなく、MLOpsライブラリの呼び出しに変更はありません。 呼び出しはスプーラーや監視エージェントには行われず、HTTPS経由でDataRobot MLOpsに直接行われます。 この場合、複雑なスプーラーや監視エージェントを設定する必要はありません。
次のパラメーターを使用して、DataRobot Python APIスプーラーを設定します。
パラメーター | 説明 |
---|---|
MLOPS_SERVICE_URL |
MLOpsにアクセスするためのサービスURLを、YAML設定ファイルで指定する代わりに、この環境変数で指定します。 |
MLOPS_API_TOKEN |
DataRobot APIキー |
VERIFY SSL (ブーリアン) |
(オプション)クライアントがSSL接続を検証する必要があるかどうかを決定します。 デフォルト値: True |
オプション設定 | |
MLOPS_HTTP_RETRY |
呼び出しに成功するまでに再試行する回数。 デフォルト値: 3 |
API_POST_TIMEOUT_SECONDS |
タイムアウト値を設定します。 デフォルト値: 30 |
API_HTTP_RETRY_WAIT_SECONDS |
タイムアウトしてから再試行するまでの待機時間を決定します。 デフォルト値: 1 |
Azure Event Hubs¶
DataRobotでは、既存のKafkaスプーラータイプを活用することによって、Microsoft Azure Event Hubsを監視エージェントスプーラーとして使用できます。 この設定については、Apache KafkaアプリケーションのAzure Event Hubsの使用を参照してください{ target=_blank }。
備考
Azureは、Event HubsのKafkaプロトコルをスタンダードおよびプレミアム価格帯でのみサポートします。 ベーシック価格帯は、Kafka APIサポートがないので、監視エージェント向けのスプーラーとしてサポートされていません。 詳細については、Azure Event Hubsのクォータと制限を参照してください。
スプーラーとしてAzure Event Hubsを使用するには、以下の方法で監視エージェントとライブラリーの認証を設定する必要があります。
Event HubsのSASベースの認証¶
監視エージェントとライブラリにEvent HubsのSASベースの認証を使用するには、以下のシェルフラグメントの例を使用して、次の環境変数を設定します。
# Azure recommends setting the following values; see:
# https://docs.microsoft.com/en-us/azure/event-hubs/apache-kafka-configurations
export MLOPS_KAFKA_REQUEST_TIMEOUT_MS='60000'
export MLOPS_KAFKA_SESSION_TIMEOUT_MS='30000'
export MLOPS_KAFKA_METADATA_MAX_AGE_MS='180000'
# Common configuration variables for both Java- and Python-based libraries.
export MLOPS_KAFKA_BOOTSTRAP_SERVERS='XXXX.servicebus.windows.net:9093'
export MLOPS_KAFKA_SECURITY_PROTOCOL='SASL_SSL'
export MLOPS_KAFKA_SASL_MECHANISM='PLAIN'
# The following setting is specific to the Java SDK (and the monitoring agent daemon)
export MLOPS_KAFKA_SASL_JAAS_CONFIG='org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=XXXX;SharedAccessKey=XXXX";'
# For the Python SDK, you will need the following settings (in addition to the common ones above)
export MLOPS_KAFKA_SASL_USERNAME='$ConnectionString'
export MLOPS_KAFKA_SASL_PASSWORD='Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=XXX;SharedAccessKey=XXXX'
備考
上記の環境変数の値では、環境変数を設定するときに特殊文字$
と"
がシェルによって解釈されないように、一重引用符('
)を使用してください。 DataBricksを介して環境変数を設定している場合は、使用しているプラットフォームのバージョンの特殊文字をにエスケープする方法に関する ガイドラインに従う必要があります。
Event Hubs向けのAzure Active Directory OAuth 2.0¶
DataRobotは、Event Hubsの認証用にAzure Active Directory OAuth 2.0もサポートしています。 この認証方法を使用するには、新しいアプリケーション登録を作成して、それにEvent Hubs Namespace(すなわち、Azure Event Hubsのデータオーナー)の必要な権限を持たせる必要があります。 詳細については、Event Hubsのリソースにアクセスするには、Azure ADでアプリケーションの認証をするを参照してください。
Event Hubs Azure Active Directory OAuth 2.0認証を使用するには、以下のサンプルシェルのフラグメントを使用して、次の環境変数を設定します。
# Azure recommends setting the following values; see:
# https://docs.microsoft.com/en-us/azure/event-hubs/apache-kafka-configurations
export MLOPS_KAFKA_REQUEST_TIMEOUT_MS='60000'
export MLOPS_KAFKA_SESSION_TIMEOUT_MS='30000'
export MLOPS_KAFKA_METADATA_MAX_AGE_MS='180000'
# Common configuration variables for both Java- and Python-based libraries.
export MLOPS_KAFKA_BOOTSTRAP_SERVERS='XXXX.servicebus.windows.net:9093'
export MLOPS_KAFKA_SECURITY_PROTOCOL='SASL_SSL'
export MLOPS_KAFKA_SASL_MECHANISM='OAUTHBEARER'
# The following setting is specific to the Java SDK (and the tracking-agent daemon)
export MLOPS_KAFKA_SASL_JAAS_CONFIG='org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required aad.tenant.id="XXXX" aad.client.id="XXXX" aad.client.secret="XXXX";'
export MLOPS_KAFKA_SASL_LOGIN_CALLBACK_CLASS='com.datarobot.mlops.spooler.kafka.ActiveDirectoryAuthenticateCallbackHandler'
# For the Python SDK, you will need the following settings (in addition to the common ones above)
export MLOPS_KAFKA_SASL_OAUTHBEARER_CONFIG='aad.tenant.id=XXXX-XXXX-XXXX-XXXX-XXXX, aad.client.id=XXXX-XXXX-XXXX-XXXX-XXXX, aad.client.secret=XXXX'
備考
環境変数の値の一部に二重引用符("
)が含まれています。 この特殊文字(または他の文字)を含む環境変数を設定するときは注意してください。
Javaアプリケーションでの必要なスプーラーの動的ロード¶
サードパーティのコードを使用して監視エージェントスプーラーを設定するには、必要なスプーラー用に別のJARファイルを動的にロードできます。 この設定は、 Amazon SQS、 RabbitMQ、 Google Cloud Pub/Sub、および Apache Kafkaスプーラーに必須です。 ネイティブでサポートされているファイルシステムスプーラーは、JARファイルをロードせずに設定できます。
備考
以前は、datarobot-mlops
とmlops-agent
のパッケージには、デフォルトですべてのスプーラータイプが含まれていました。ただし、その設定が未使用であってもコードが常に存在していました。
プロジェクトオブジェクトモデルにスプーラーの依存関係を含める¶
MLOps Javaアプリケーションでサードパーティのスプーラーを使用するには、datarobot-mlops
と一緒に、必要なスプーラーをPOM(Project Object Model)ファイルに依存関係として含める必要があります。
<properties>
<mlops.version>8.3.0</mlops.version>
</properties>
<dependency>
<groupId>com.datarobot</groupId>
<artifactId>datarobot-mlops</artifactId>
<version>${mlops.version}</version>
</dependency>
<dependency>
<groupId>com.datarobot</groupId>
<artifactId>spooler-sqs</artifactId>
<version>${mlops.version}</version>
</dependency>
<dependency>
<groupId>com.datarobot</groupId>
<artifactId>spooler-rabbitmq</artifactId>
<version>${mlops.version}</version>
</dependency>
<dependency>
<groupId>com.datarobot</groupId>
<artifactId>spooler-pubsub</artifactId>
<version>${mlops.version}</version>
</dependency>
<dependency>
<groupId>com.datarobot</groupId>
<artifactId>spooler-kafka</artifactId>
<version>${mlops.version}</version>
</dependency>
スプーラーに実行可能なJARファイルの提供¶
スプーラーJARファイルは、 MLOpsエージェントのtarballに含まれています。 これらは DataRobot MLOpsエージェントのMaven公開リポジトリで、ダウンロード可能なJARファイルとして個別に入手することもできます。
実行可能なエージェントJARファイルでサードパーティのスプーラーを使用するには、スプーラーへのパスをクラスパスに追加します。
java ... -cp path/to/mlops-agent-8.2.0.jar com.datarobot.mlops.agent.Agent
java ... -cp path/to/mlops-agent-8.3.0.jar:path/to/spooler-kafka-8.3.0.jar com.datarobot.mlops.agent.Agent
例として提供されているstart-agent.sh
スクリプトは、このタスクを自動実行し、lib
ディレクトリにあるスプーラーJARファイルをクラスパスに追加します。 スプーラーJARファイルが別のディレクトリにある場合は、MLOPS_SPOOLER_JAR_PATH
環境変数を設定してください。
-
動的スプーラーが正常にロードされると、監視エージェントは次の
INFO
メッセージ(Creating spooler type <type>: success.
)をログに記録します。 -
動的スプーラーのロードに失敗すると、監視エージェントは
ERROR
メッセージ(Creating spooler type <type>: failed
)をログに記録し、その後に理由(依存関係がないことを示すclass not found
エラー)または詳細(問題の診断に役立つシステムの例外メッセージ)を記録します。 クラスが見つからない場合は、スプーラーの依存関係がアプリケーションのPOMに含まれていることを確認してください。 欠損している依存関係は実行時まで検出されません。
-
動的スプーラーが正常にロードされると、監視エージェントは次の
INFO
メッセージ(Creating spooler type <type>: success.
)をログに記録します。 -
動的スプーラーのロードに失敗すると、監視エージェントは
ERROR
メッセージ(Creating spooler type <type>: failed
)をログに記録し、その後に理由(JARファイルがないことを示すclass not found
エラー)または詳細(問題の診断に役立つシステムの例外メッセージ)を記録します。 クラスが見つからない場合は、そのスプーラーに一致するJARファイルが、エージェントを起動するjava
コマンドのクラスパスに含まれていることを確認してください。
ヒント
predictionEnvironmentId
で設定されたエージェントがDataRobotに接続できる場合は、エージェントはログメッセージからの情報とともに、MLOps Spooler Channel Failed
イベントをDataRobot MLOpsに送信します。 これらのイベントは、その予測環境に関連付けられている デプロイの サービスの正常性ページのイベントログに表示されます。 これらのエラーを(メール、Slack、Webhookで)通知する通知チャネルとポリシーを作成することもできます。