Stream Analytics への Machine Learning スタジオ (クラシック) の統合
重要
Azure Machine Learning スタジオ (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えることをおすすめします。
2021 年 12 月 1 日の時点で、新しい Machine Learning Studio (クラシック) リソース (ワークスペースと Web サービス プラン) を作成することはできません。 2024 年 8 月 31 日まで、既存の Machine Learning スタジオ (クラシック) の実験と Web サービスを引き続き使用できます。 詳細については、以下を参照してください:
Machine Learning Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
Azure Stream Analytics では、Azure Machine Learning Studio (クラシック) のエンドポイントを呼び出すユーザー定義関数 (UDF) がサポートされています。 Stream Analytics REST API ライブラリでは、この機能に対する REST API のサポートについて説明されています。
この記事では、Stream Analytics にこの機能を正しく実装するために必要な補足情報について説明します。 チュートリアルも利用できます。
概要: Machine Learning スタジオ (クラシック) の用語
Machine Learning スタジオ (クラシック) で提供されているコラボレーション対応のドラッグ アンド ドロップ ツールを使うと、データに対する予測分析ソリューションの構築、テスト、デプロイを行うことができます。 Machine Learning Studio (クラシック) を使って、次の機械学習リソースを操作できます。
- ワークスペース: 他のすべての機械学習リソースを管理と制御のためにまとめて保持するコンテナー。
- 実験: データ科学者がデータセットを利用して機械学習モデルをトレーニングするために作成するテスト。
- エンドポイント: 特徴量を入力として受け取り、指定された機械学習モデルを適用して、スコア付けされた出力を返すために使用するオブジェクト。
- スコアリング Web サービス: エンドポイントのコレクション。
各エンドポイントには、バッチ実行と同期実行のための API があります。 Stream Analytics では、同期実行を使用します。 Machine Learning スタジオ (クラシック) では、この特定のサービスは要求/応答サービスと呼ばれます。
Stream Analytics ジョブに必要な Machine Learning スタジオ (クラシック) リソース
Stream Analytics ジョブの処理が正常に実行されるためには、要求/応答エンドポイント、API キー、Swagger 定義がすべて必要です。 Stream Analytics には、Swagger エンドポイントの URL を作成し、インターフェイスを検索して、既定の UDF 定義をユーザーに返す、追加のエンドポイントがあります。
REST API を使用して Stream Analytics と Machine Learning スタジオ (クラシック) UDF を構成する
REST API を使うと、Machine Learning スタジオ (クラシック) の関数を呼び出すようにジョブを構成できます。
- Stream Analytics ジョブを作成する。
- 入力を定義します。
- 出力を定義します。
- UDF を作成します。
- UDF を呼び出す Stream Analytics 変換を記述します。
- ジョブを開始します。
基本的なプロパティを使用して UDF を作成する
例として、次のサンプル コードでは、Machine Learning スタジオ (クラシック) エンドポイントにバインドする newudf という名前のスカラー UDF を作成します。 endpoint
の値 (サービス URI) は、選択されているサービスの API ヘルプ ページで確認できます。 apiKey
の値は、サービスのメイン ページで確認できます。
PUT : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.StreamAnalytics/streamingjobs/<streamingjobName>/functions/<udfName>?api-version=<apiVersion>
要求本文の例
{
"name": "newudf",
"properties": {
"type": "Scalar",
"properties": {
"binding": {
"type": "Microsoft.MachineLearning/WebService",
"properties": {
"endpoint": "https://ussouthcentral.services.azureml.net/workspaces/f80d5d7a77fb4b46bf2a30c63c078dca/services/b7be5e40fd194258796fb402c1958eaf/execute ",
"apiKey": "replacekeyhere"
}
}
}
}
}
既定の UDF の RetrieveDefaultDefinition エンドポイントを呼び出す
スケルトン UDF を作成した後は、UDF を完全に定義する必要があります。 RetrieveDefaultDefinition
エンドポイントを使うと、Machine Learning スタジオ (クラシック) エンドポイントにバインドされているスカラー関数の既定の定義を取得できます。
次のペイロードでは、スタジオ (クラシック) エンドポイントにバインドされているスカラー関数の既定の UDF 定義を取得する必要があります。 実際のエンドポイントは、PUT
要求で既に指定されているため指定しません。
要求でエンドポイントが明示的に指定されている場合、Stream Analytics は要求からエンドポイントを呼び出します。 そうでない場合、Stream Analytics は最初に参照されたエンドポイントを使います。 ここでは、UDF は 1 つの文字列パラメーター (文) を受け取り、その文の Sentiment
ラベルを示す string
型の出力を 1 つ返します。
POST : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.StreamAnalytics/streamingjobs/<streamingjobName>/functions/<udfName>/RetrieveDefaultDefinition?api-version=<apiVersion>
要求本文の例
{
"bindingType": "Microsoft.MachineLearning/WebService",
"bindingRetrievalProperties": {
"executeEndpoint": null,
"udfType": "Scalar"
}
}
この要求の出力は、次の例のようになります。
{
"name": "newudf",
"properties": {
"type": "Scalar",
"properties": {
"inputs": [{
"dataType": "nvarchar(max)",
"isConfigurationParameter": null
}],
"output": {
"dataType": "nvarchar(max)"
},
"binding": {
"type": "Microsoft.MachineLearning/WebService",
"properties": {
"endpoint": "https://ussouthcentral.services.azureml.net/workspaces/f80d5d7a77ga4a4bbf2a30c63c078dca/services/b7be5e40fd194258896fb602c1858eaf/execute",
"apiKey": null,
"inputs": {
"name": "input1",
"columnNames": [{
"name": "tweet",
"dataType": "string",
"mapTo": 0
}]
},
"outputs": [{
"name": "Sentiment",
"dataType": "string"
}],
"batchSize": 10
}
}
}
}
}
応答を使用して UDF にパッチを適用する
ここでは、前の応答を使って UDF にパッチを適用する必要があります。
PATCH : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.StreamAnalytics/streamingjobs/<streamingjobName>/functions/<udfName>?api-version=<apiVersion>
要求本文 (RetrieveDefaultDefinition
からの出力):
{
"name": "newudf",
"properties": {
"type": "Scalar",
"properties": {
"inputs": [{
"dataType": "nvarchar(max)",
"isConfigurationParameter": null
}],
"output": {
"dataType": "nvarchar(max)"
},
"binding": {
"type": "Microsoft.MachineLearning/WebService",
"properties": {
"endpoint": "https://ussouthcentral.services.azureml.net/workspaces/f80d5d7a77ga4a4bbf2a30c63c078dca/services/b7be5e40fd194258896fb602c1858eaf/execute",
"apiKey": null,
"inputs": {
"name": "input1",
"columnNames": [{
"name": "tweet",
"dataType": "string",
"mapTo": 0
}]
},
"outputs": [{
"name": "Sentiment",
"dataType": "string"
}],
"batchSize": 10
}
}
}
}
}
UDF を呼び出すための Stream Analytics 変換を実装する
すべての入力イベントについて UDF (ここでは scoreTweet
という名前) のクエリを実行し、そのイベントに対する応答を出力に書き込みます。
{
"name": "transformation",
"properties": {
"streamingUnits": null,
"query": "select *,scoreTweet(Tweet) TweetSentiment into blobOutput from blobInput"
}
}
ヘルプを参照する
詳細については、Azure Stream Analytics に関する Microsoft Q&A ページを参照してください。