次の方法で共有


Dataflow Gen2 から機械学習モデル エンドポイントを呼び出す (プレビュー)

Important

この機能は プレビュー段階です

Microsoft Fabric Dataflow Gen2 では、機械学習モデル エンドポイントを呼び出して、データ変換中にリアルタイムの予測を取得できます。 この統合により、トレーニング済みの機械学習モデルをデータフロー パイプラインの一部として適用することで、データを強化できます。 M クエリ関数を使用して、サービス プリンシパル認証を使用してモデル エンドポイントを呼び出すことができます。

[前提条件]

Dataflow Gen2 から ML モデル エンドポイントを呼び出す前に、次のことを確認してください。

サービス プリンシパルのアクセス許可を設定する

サービス プリンシパルが機械学習モデル エンドポイントを呼び出せるようにするには、適切なアクセス許可を付与する必要があります。

  1. Fabric で機械学習モデルを含むワークスペースに移動します。

  2. ワークスペース メニューから [ アクセスの管理 ] を選択します。

  3. [ユーザーまたはグループの追加] を選択します。

  4. アプリケーション名またはクライアント ID でサービス プリンシパルを検索します。

  5. サービス プリンシパルを少なくとも 共同作成者 ロールに割り当てて、モデル エンドポイントにアクセスして呼び出します。

エンドポイントの URL と認証の詳細を取得する

M クエリ関数を作成する前に、次の情報を収集します。

  1. エンドポイント URL: Fabric で機械学習モデルに移動し、[ エンドポイントの詳細 ] セクションからエンドポイント URL をコピーします。

    機械学習モデルのエンドポイント URL を検索する場所を示すスクリーンショット。

  2. テナント ID: Azure portal の Microsoft Entra ID でテナント ID を検索します。

  3. クライアント ID: Azure portal でサービス プリンシパルのアプリケーション (クライアント) ID を見つけます。

  4. クライアント シークレット: Azure portal からサービス プリンシパルのクライアント シークレットを作成または取得します。

エンドポイントを呼び出す M クエリ関数を作成する

Dataflow Gen2 では、サービス プリンシパルを使用して認証し、ML モデル エンドポイントを呼び出すカスタム M クエリ関数を作成できます。

  1. Dataflow Gen2 で、データの取得>空のクエリを選択します。

  2. または、強化するデータを取得し、[ホーム] タブから [詳細エディター] を開きます。

  3. クエリを次の M 関数コードに置き換えます。

    let
        CallMLEndpoint = (endpointUrl as text, tenantId as text, clientId as text, clientSecret as text, inputData as any) =>
        let
            // Get access token using service principal
            tokenUrl = "https://login.microsoftonline.com/" & tenantId & "/oauth2/v2.0/token",
            tokenBody = "client_id=" & clientId &
                        "&scope=https://api.fabric.microsoft.com/.default" &
                        "&client_secret=" & clientSecret &
                        "&grant_type=client_credentials",
            tokenResponse = Web.Contents(
                tokenUrl,
                [
                    Headers = [#"Content-Type" = "application/x-www-form-urlencoded"],
                    Content = Text.ToBinary(tokenBody)
                ]
            ),
            tokenJson = Json.Document(tokenResponse),
            accessToken = tokenJson[access_token],
    
            // Call ML endpoint with bearer token
            requestBody = Json.FromValue(inputData),
            response = Web.Contents(
                endpointUrl,
                [
                    Headers = [
                        #"Content-Type" = "application/json",
                        #"Authorization" = "Bearer " & accessToken
                    ],
                    Content = requestBody
                ]
            ),
            result = Json.Document(response)
        in
            result
    in
        CallMLEndpoint
    
  4. クエリ ペインでクエリを右クリックして、クエリの名前を CallMLEndpoint に変更します。

データフローで関数を使用する

関数を作成したら、それを使用して、データ内の各行の ML エンドポイントを呼び出すことができます。

  1. データフロー内のソース データを読み込むか、接続します。

  2. ML エンドポイント関数を呼び出すカスタム列を追加します。 列の追加カスタム列を選択します。

  3. エンドポイントを呼び出すには、次の式を使用します (パラメーターを実際の値に置き換えます)。

    CallMLEndpoint(
        "<your-machine-learning-endpoint-url>",
        "<your-tenant-id>",
        "<your-client-id>",
        "<your-client-secret>",
        [input1 = [Column1], input2 = [Column2]]
    )
    
  4. この関数は機械学習モデルから予測結果を返します。このモデルは、後続の変換手順で拡張して使用できます。

ベスト プラクティス

  • セキュリティで保護された資格情報: Dataflow Gen2 パラメーター または 変数ライブラリ統合 を使用して、ハードコーディングするのではなく、クライアント シークレットなどの機密性の高い値を格納することを検討してください。

  • エラー処理: M クエリにエラー処理ロジックを追加して、エンドポイントのエラーやタイムアウトのシナリオを適切に処理します。

  • エンドポイントの可用性: データフローを実行する前に、機械学習モデルのエンドポイントがアクティブであることを確認します。 非アクティブなエンドポイントでは、データフローの更新が失敗します。 エンドポイントを一貫して呼び出す場合は、自動スリープ機能を無効にします。

  • パフォーマンス: 各行の機械学習エンドポイントの呼び出しは、大規模なデータセットでは遅くなる可能性があります。 予測を適用する前に、データのフィルター処理またはサンプリングを検討してください。

考慮事項と制限事項

  • Dataflow Gen2 から機械学習エンドポイントを呼び出す場合は、サービス プリンシパル認証が必要です。
  • 機械学習エンドポイントを呼び出すと、データフロー コンピューティングと機械学習エンドポイントの消費量の両方のコストが発生します。 それに応じて ファブリックの容量の使用状況 を監視します。