AKS または Arc Kubernetes クラスターに Azure Machine Learning 拡張機能をデプロイする

AKS または Arc Kubernetes クラスターでトレーニング ジョブまたは推論ワークロードを実行できるようにするには、まず AKS または Arc Kubernetes クラスターに Azure Machine Learning 拡張機能をデプロイする必要があります。 Azure Machine Learning 拡張機能は AKS 用のクラスター拡張機能および Arc Kubernetes 用のクラスター拡張機能に基づいて構築されており、そのライフサイクルは Azure CLI k8s-extension を使用して簡単に管理できます。

この記事では、次の内容について説明します。

  • 前提条件
  • 制限事項
  • Azure Machine Learning 拡張機能の構成設定を確認する
  • Azure Machine Learning 拡張機能のデプロイ シナリオ
  • Azure Machine Learning 拡張機能のデプロイを確認する
  • Azure Machine Learning 拡張機能のコンポーネントを確認する
  • Azure Machine Learning 拡張機能を管理する

必須コンポーネント

  • AKS クラスターが Azure で実行されている。 クラスター拡張機能を以前に使っていない場合は、KubernetesConfiguration サービス プロバイダーを登録する必要があります。
  • または Arc Kubernetes クラスターが稼働している。 「既存の Kubernetes クラスターを Azure Arc に接続する」にある手順に従います。
  • 運用環境では、Kubernetes クラスターには少なくとも 4 つの vCPU コアと 14 GB のメモリが必要です。 リソースの詳細とクラスター サイズの推奨事項の詳細は、「推奨されるリソース計画」を参照してください。
  • アウトバウンド プロキシ サーバーまたはファイアウォールの内側で実行するクラスターには、追加のネットワーク構成が必要です。
  • バージョン 2.24.0 以降の Azure CLI をインストールするか、これにアップグレードします。
  • バージョン 1.2.3 以降の Azure CLI 拡張機能 k8s-extension をインストールするか、これにアップグレードします。

制限事項

  • AKS でのサービス プリンシパルの使用は、Azure Machine Learning ではサポートされていません。 AKS クラスターでは、代わりにマネージド ID を使う必要があります。 システム割り当てマネージド IDユーザー割り当てマネージド ID の両方がサポートされています。 詳細については、「Azure Kubernetes Service でマネージド ID を使用する」を参照してください。
    • AKS クラスターで使用されるサービス プリンシパルをマネージド ID を使用するように変換してから拡張機能をインストールする場合、すべてのノード プールは、直接更新するのではなく、削除して再作成する必要があります。
  • AKS のローカル アカウントを無効にすることは、Azure Machine Learning ではサポートされていません。 AKS クラスターをデプロイすると、既定でローカル アカウントが有効になります。
  • AKS クラスターに API サーバーへのアクセスが有効な承認済みの IP 範囲がある場合は、AKS クラスターに対して Azure Machine Learning コントロール プレーンの IP 範囲を有効にします。 Azure Machine Learning コントロール プレーンは、ペアになっているリージョンにまたがってデプロイされます。 API サーバーにアクセスできないと、機械学習ポッドをデプロイできません。 AKS クラスターで IP 範囲を有効にする場合、ペアになっているリージョンの両方に対して IP 範囲を使用します。
  • Azure Machine Learning では、AKS クラスターのサブスクリプション間のアタッチはサポートされていません。 AKS クラスターが別のサブスクリプションにある場合は、最初に Azure-Arc に接続し、Azure Machine Learning ワークスペースと同じサブスクリプションで指定する必要があります。
  • Azure Machine Learning では、AKS のすべてのプレビュー ステージ機能のサポートが保証されていません。 たとえば、Microsoft Entra ポッド ID はサポートされていません。
  • Azure Machine Learning AKS v1 ドキュメントの手順に従って AKS を推論クラスターとして作成またはアタッチした場合は、次の手順に進む前に、以下のリンクを使って、レガシ azureml-fe 関連リソースをクリーンアップしてください。

Azure Machine Learning 拡張機能の構成設定を確認する

Azure Machine Learning CLI コマンド k8s-extension create を使用して、Azure Machine Learning 拡張機能をデプロイできます。 CLI k8s-extension create によって、--config または --config-protected パラメーターを使用して、一連の構成設定を key=value 形式で指定できます。 Azure Machine Learning 拡張機能のデプロイ中に指定される使用可能な構成設定の一覧を次に示します。

構成設定のキー名 説明 トレーニング 推論 トレーニングと推論
enableTraining True または False、既定値 False. Machine Learning モデルのトレーニングとバッチ スコアリングのサポートを含む Azure Machine Learning 拡張機能のデプロイの場合は、True に設定する必要があります 該当なし
enableInference TrueまたはFalse、既定値False. Machine Learning 推論サポートを含む Azure Machine Learning 拡張機能のデプロイの場合は、True に設定する必要があります 該当なし
allowInsecureConnections TrueまたはFalse、既定値False. 開発またはテストの目的で推論 HTTP エンドポイントを使用するには、True に設定することができます 該当なし 省略可能 オプション
inferenceRouterServiceType loadBalancernodePort または clusterIPenableInference=True の場合は必須 該当なし
internalLoadBalancerProvider 現在、この構成は Azure Kubernetes Service (AKS) クラスターにのみ適用されます。 推論ルーターで内部ロード バランサーを使用できるようにするには、azure に設定します。 該当なし 省略可能 オプション
sslSecret azureml 名前空間内の Kubernetes シークレットの名前。 この構成を使用して格納する cert.pem (PEM でエンコードされた TLS/SSL 証明書) と key.pem (PEM でエンコードされた TLS/SSL キー) は、allowInsecureConnectionsFalse に設定されているときの推論 HTTPS エンドポイントのサポートに必要です。 sslSecret のサンプル YAML 定義については、sslSecret の構成に関するページを参照してください。 この構成または sslCertPemFilesslKeyPemFile の保護された構成設定の組み合わせを使用します。 該当なし 省略可能 省略可能
sslCname TLS/SSL CNAME は推論 HTTPS エンドポイントによって使われます。 allowInsecureConnections=False の場合は必須 該当なし 省略可能 オプション
inferenceRouterHA True または False、既定値 True. 既定では、Azure Machine Learning 拡張機能は高可用性を実現するために 3 つの推論ルーター レプリカをデプロイします。これには、クラスター内に少なくとも 3 つのワーカー ノードが必要です。 クラスターのワーカー ノード数が 3 未満の場合は、False に設定されます。この場合、1 つの推論ルーター サービスのみがデプロイされます。 該当なし 省略可能 オプション
nodeSelector 既定では、デプロイされる Kubernetes リソースと機械学習ワークロードはクラスターの 1 つ以上のノードにランダムにデプロイされ、DaemonSet リソースは "すべての" ノードにデプロイされます。 拡張機能のデプロイとトレーニング/推論ワークロードを、ラベル key1=value1key2=value2 が付いた特定のノードに制限する場合は、それぞれ nodeSelector.key1=value1nodeSelector.key2=value2 を使用します。 オプション オプション オプション
installNvidiaDevicePlugin True または False、既定値 False. NVIDIA GPU ハードウェアの ML ワークロードには、NVIDIA デバイス プラグインが必要です。 既定では、Kubernetes クラスターに GPU ハードウェアがあるかどうかに関係なく、Azure Machine Learning 拡張機能のデプロイで NVIDIA デバイス プラグインがインストールされません。 ユーザーは、これをインストールするためにこの設定を True に指定できますが、前提条件を満たしていることを確認してください。 オプション オプション オプション
installPromOp True または False、既定値 True. Azure Machine Learning 拡張機能では、Prometheus を管理するために Prometheus 演算子が必要です。 既存の Prometheus 演算子を再利用するには、False にセットします。 既存の prometheus 演算子の再利用の詳細については、prometheus 演算子の再利用に関する記事を参照してください 省略可能 オプション オプション
installVolcano TrueまたはFalse、既定値True. ジョブをスケジュールするには、Azure Machine Learning 拡張機能に volcano スケジューラが必要です。 既存の volcano スケジューラを再利用する場合は False に設定します。 既存の volcano スケジューラの再利用の詳細については、volcano スケジューラの再利用に関する記事を参照してください 省略可能 該当なし 省略可能
installDcgmExporter True または False、既定値 False. Dcgm-exporter では、Azure portal で監視できる Azure Machine Learning ワークロードの GPU メトリックを公開できます。 dcgm-exporter をインストールするには、installDcgmExporterTrue に設定します。 ただし、独自の dcgm-exporter を利用する場合は、「DCGM エクスポーター」を参照してください 省略可能 オプション オプション
構成の保護された設定キー名 説明 トレーニング 推論 トレーニングと推論
sslCertPemFilesslKeyPemFile allowInsecureConnections が False に設定されている場合に、推論 HTTPS エンドポイントのサポートを含む Azure Machine Learning 拡張機能のデプロイに必要な、(PEM でエンコードされた) TLS/SSL 証明書とキー ファイルへのパス。 パス フレーズが保護された PEM ファイルはサポートされていません 該当なし 省略可能 省略可能

構成設定表からわかるように、さまざまな構成設定の組み合わせにより、さまざまな ML ワークロード シナリオに対して Azure Machine Learning 拡張機能をデプロイできます。

  • トレーニング ジョブとバッチ推論ワークロードの場合は、enableTraining=True を指定します
  • 推論ワークロードのみの場合は、enableInference=True を指定します
  • すべての種類の ML ワークロードに対して、enableTraining=TrueenableInference=True の両方を指定します

リアルタイム推論ワークロード用に Azure Machine Learning 拡張機能をデプロイする予定で、enableInference=True を指定する必要がある場合は、リアルタイム推論ワークロードに関連する次の構成設定に注意してください。

  • リアルタイム推論のサポート用に azureml-fe ルーター サービスが必要であり、azureml-fe に対して inferenceRouterServiceType の構成設定を指定する必要があります。 次に示す inferenceRouterServiceType のいずれかを使って azureml-fe はデプロイできます。
    • LoadBalancer. クラウド プロバイダーのロード バランサーを使って azureml-fe を外部に公開します。 この値を指定するには、クラスターがロード バランサーのプロビジョニングをサポートしていることを確認します。 ほとんどのオンプレミス Kubernetes クラスターは、外部ロード バランサーをサポートできないことに注意してください。
    • NodePort」と入力します。 各ノードの IP 上の静的ポートで azureml-fe を公開します。 クラスターの外部から <NodeIP>:<NodePort> を要求することで、azureml-fe に接続できるようになります。 NodePort を使って、azureml-fe に対して独自の負荷分散ソリューションと TLS/SSL 終了を設定することもできます。
    • ClusterIP」と入力します。 クラスター内部 IP で azureml-fe を公開し、クラスター内部からのみ azureml-fe に到達できるようにします。 クラスター外部から送信される推論要求を azureml-fe で処理できるようにするには、独自の負荷分散ソリューションと azureml-fe の TLS/SSL 終了を設定する必要があります。
  • azureml-fe ルーティング サービスの高可用性を確保するために、Azure Machine Learning 拡張機能のデプロイによって、3 ノード以上のクラスターに対して azureml-fe のレプリカが既定で 3 つ作成されます。 クラスターが 3 ノード未満の場合は、inferenceRouterHA=False を設定します。
  • HTTPS を使ってモデル エンドポイントへのアクセスを制限し、クライアントが送信するデータをセキュリティで保護することも検討する必要があります。 この目的のために、sslSecret 構成設定、または sslKeyPemFilesslCertPemFile 構成保護設定の組み合わせのいずれかを指定する必要があります。
  • 既定では、Azure Machine Learning 拡張機能のデプロイで、HTTPS サポート用の構成設定が必要です。 開発またはテスト目的の場合、HTTP のサポートは、便宜的に構成設定 allowInsecureConnections=True を使って提供されます。

Azure Machine Learning 拡張機能のデプロイ - CLI の例と Azure portal

CLI を使用して Azure Machine Learning 拡張機能をデプロイするには、必須パラメーターの値を渡す az k8s-extension create コマンドを使用します。

参照用に、4 つの一般的な拡張機能のデプロイ シナリオを示します。 運用環境での使用に合わせて拡張機能をデプロイするには、構成設定の完全な一覧をよくお読みください。

  • Azure 内の AKS クラスターを使用して、すべての種類の ML ワークロードを実行するための簡単に概念実証を行う、つまり、トレーニング ジョブを実行するか、モデルをオンラインまたはバッチ エンドポイントとしてデプロイする

    Azure Machine Learning 拡張機能を AKS クラスターにデプロイする場合は、--cluster-type パラメーターに managedClusters の値を必ず指定してください。 次の Azure CLI コマンドを実行して、Azure Machine Learning 拡張機能をデプロイします。

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=LoadBalancer allowInsecureConnections=True InferenceRouterHA=False --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Azure 外部の Arc Kubernetes クラスターを使用して、簡単に概念実証を行い、トレーニング ジョブのみを実行する

    Azure Machine Learning 拡張機能を Arc Kubernetes クラスターにデプロイする場合は、--cluster-type パラメーターに connectedClusters の値を指定する必要があります。 次の Azure CLI コマンドを実行して、Azure Machine Learning 拡張機能をデプロイします。

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • 運用のトレーニングと推論ワークロードのために Azure で AKS クラスターを有効にする Azure Machine Learning 拡張機能を AKS にデプロイする場合は、--cluster-type パラメーターに managedClusters の値を必ず指定してください。 クラスターに 3 つを超えるノードがあり、推論ワークロードのサポートに Azure パブリック ロード バランサーと HTTPS を使っているとします。 次の Azure CLI コマンドを実行して、Azure Machine Learning 拡張機能をデプロイします。

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=LoadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • NVIDIA GPU を使用して、運用のトレーニングと推論ワークロードのために任意の場所で Arc Kubernetes クラスターを有効にする

    Azure Machine Learning 拡張機能を Arc Kubernetes クラスターにデプロイする場合は、--cluster-type パラメーターに connectedClusters の値を必ず指定してください。 クラスターに 3 つを超えるノードがあり、推論ワークロードのサポートに NodePort サービスの種類と HTTPS を使っている場合、次の Azure CLI コマンドを実行して Azure Machine Learning 拡張機能をデプロイします。

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=NodePort sslCname=<ssl cname> installNvidiaDevicePlugin=True installDcgmExporter=True --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    

Azure Machine Learning 拡張機能のデプロイを確認する

  1. 次の CLI コマンドを実行して、Azure Machine Learning 拡張機能の詳細を確認します。

    az k8s-extension show --name <extension-name> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group>
    
  2. 応答で、"name" と "provisioningState": "Succeeded" を探します。 最初の数分間は "provisioningState": "Pending" が表示されることがあることに注意してください。

  3. provisioningState が Succeeded と表示されたら、kubeconfig ファイルが目的のクラスターを指している状態で、お使いのマシン上で次のコマンドを実行して、"azureml" 名前空間の下のすべてのポッドの状態が 'Running' になっていることを確認します。

     kubectl get pods -n azureml
    

Azure Machine Learning 拡張機能のコンポーネントを確認する

Azure Machine Learning 拡張機能のデプロイが完了したら、kubectl get deployments -n azureml を使用して、クラスターで作成されたリソースの一覧を表示できます。 これは通常、指定された構成設定に従って、次のリソースのサブセットで構成されます。

リソース名 リソースの種類 トレーニング 推論 トレーニングと推論 説明 クラウドとの通信
relayserver Kubernetes deployment リレー サーバーは、Arc Kubernetes クラスターに対してのみ作成され、AKS クラスターでは作成されません。 リレー サーバーは、Azure Relay と連携してクラウド サービスと通信します。 クラウド サービスからジョブ作成、モデル デプロイの要求を受け取り、ジョブの状態をクラウド サービスと同期します。
gateway Kubernetes deployment ゲートウェイは、データの通信と送受信を行うために使用されます。 ノードとクラスターのリソース情報をクラウド サービスに送信します。
aml-operator Kubernetes deployment 該当なし トレーニングジョブのライフサイクルを管理します。 Azure Container Registry の認証と認可のために、クラウド トークン サービスとトークン交換を行います。
metrics-controller-manager Kubernetes deployment Prometheus の構成を管理する 該当なし
{EXTENSION-NAME}-kube-state-metrics Kubernetes deployment クラスター関連のメトリックを Prometheus にエクスポートします。 該当なし
{EXTENSION-NAME}-prometheus-operator Kubernetes deployment オプション オプション オプション Prometheus および関連する監視コンポーネントの Kubernetes ネイティブデプロイと管理を提供します。 該当なし
amlarc-identity-controller Kubernetes deployment 該当なし マネージド ID を介して、Azure BLOB または Azure Container Registry トークンの要求と更新を行います。 推論またはモデル デプロイに使う Azure Container Registry および Azure BLOB の認証と認可のために、クラウド トークン サービスとトークン交換を行います。
amlarc-identity-proxy Kubernetes deployment 該当なし マネージド ID を介して、Azure BLOB または Azure Container Registry トークンの要求と更新を行います。 推論またはモデル デプロイに使う Azure Container Registry および Azure BLOB の認証と認可のために、クラウド トークン サービスとトークン交換を行います。
azureml-fe-v2 Kubernetes deployment 該当なし 受信した推論要求を、デプロイされたサービスにルーティングするフロントエンドコンポーネント。 サービス ログを Azure BLOB に送信します。
inference-operator-controller-manager Kubernetes deployment 該当なし 推論エンドポイントのライフサイクルを管理します。 該当なし
volcano-admission Kubernetes deployment オプション 該当なし 省略可能 Volcano admission Webhook。 該当なし
volcano-controllers Kubernetes deployment オプション 該当なし 省略可能 Azure Machine Learning トレーニング ジョブ ポッドのライフサイクルを管理します。 該当なし
volcano-scheduler Kubernetes deployment オプション 該当なし 省略可能 クラスター内ジョブのスケジュール設定を行うために使用されます。 該当なし
fluent-bit Kubernetes daemonset コンポーネントのシステム ログを収集します。 コンポーネントのシステム ログをクラウドにアップロードします。
{EXTENSION-NAME}-dcgm-exporter Kubernetes daemonset 省略可能 オプション オプション dcgm-exporter は Prometheus の GPU メトリックを公開します。 該当なし
nvidia-device-plugin-daemonset Kubernetes daemonset 省略可能 オプション オプション nvidia-device-plugin-daemonset は、クラスターの各ノードで GPU を公開します 該当なし
prometheus-prom-prometheus Kubernetes statefulset ジョブ メトリックを収集してクラウドに送信します。 CPU、GPU、メモリ使用率などのジョブ メトリックをクラウドに送信します。

重要

  • Azure Relay リソースは、Arc クラスター リソースと同じリソース グループの下にあります。 これは Kubernetes クラスターと通信するために使われ、変更するとアタッチされたコンピューティング先が破損します。
  • 既定では、Kubernetes デプロイ リソースはクラスター上の 1 つ以上のノードにランダムにデプロイされ、daemonset リソースは "すべて" のノードにデプロイされます。 拡張機能のデプロイを特定のノードに制限する場合は、構成設定表に説明するように nodeSelector 構成設定を使います。

注意

  • {EXTENSION-NAME}:az k8s-extension create --name CLI コマンドで指定する拡張機能名です。

Azure Machine Learning 拡張機能を管理する

Azure Machine Learning 拡張機能を更新、一覧表示、表示、削除します。

次の手順