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

Azure Kubernetes Service (AKS)またはAzure Arc対応の Kubernetes クラスターでトレーニング ジョブまたは推論ワークロードを実行できるようにするには、最初に Azure Machine Learning 拡張機能をデプロイします。 Azure Machine Learning 拡張機能は、AKS 用の標準クラスター拡張機能および Azure Arc 対応 Kubernetes 用のクラスター拡張機能です。 Azure CLI k8s-extensionを使用して、そのライフサイクルを管理できます。

この記事では、以下について説明します。

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

前提条件

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

制限事項

  • Azure Machine Learning では、AKS でのサービス プリンシパルの使用サポートされていません。 AKS クラスターでは、代わりにマネージド ID を使う必要があります。 システム割り当てマネージド IDユーザー割り当てマネージド ID の両方がサポートされています。 詳細については、「Azure Kubernetes Service でマネージド ID を使用する」を参照してください。
    • AKS クラスターをサービス プリンシパルの使用からマネージド ID の使用に変換する場合は、拡張機能をインストールする前にすべてのノード プールを削除して再作成する必要があります。 ノード プールを直接更新することはできません。
  • Azure Machine Learning では、AKS のローカル アカウントの無効化はサポートされていません。 AKS クラスターをデプロイすると、ローカル アカウントが既定で有効になります。
  • AKS クラスターで、API サーバーにアクセスするために Authorized 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 (非推奨) はサポートされていません。 代わりに Microsoft Entra ワークロード ID を使用してください。
  • Azure Machine Learning AKS v1 ドキュメントの手順に従って AKS を推論クラスターとして作成またはアタッチする場合は、次のリンクを使用して、次の手順に進む前に、レガシ azureml-fe 関連リソース をクリーンアップします。
  • Azure Machine Learning拡張機能は、ARM64 アーキテクチャでは現在サポートされていません。 拡張機能のx86_64 (amd64) アーキテクチャでノード プールを使用します。 AKS ノード プールでは、amd64 VM SKU と ARM64 VM SKU を混在させることはできないため、サポートされているアーキテクチャのノード プール VM SKU を選択し、同じノード プール内でアーキテクチャを混在させないでください。 クラスターにノード プールが混在している場合は、 nodeSelector を使用して拡張機能とワークロードを、サポートされているアーキテクチャを持つノードにターゲットを設定します。

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

Azure CLI コマンド az k8s-extension create を使用して、Azure Machine Learning拡張機能をデプロイします。 az k8s-extension create コマンドは、key=value または --config パラメーターを使用して、構成設定をスペース区切りの--config-protectedペアとして受け入れます。 次の表に、展開時に指定できる構成設定を示します。

構成設定のキー名 説明 トレーニング 推論 トレーニングと推論
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 または clusterIP の場合はenableInference=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 Exporter」を参照してください 省略可能 省略可能 省略可能
構成の保護された設定キー名 説明 トレーニング 推論 トレーニングと推論
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 ルーター サービスが必要であり、inferenceRouterServiceType に対して azureml-fe の構成設定を指定する必要があります。 ルーターは、 azureml-fe-v2 Kubernetes デプロイとしてデプロイされます。拡張機能 コンポーネントの一覧に示されています。 次に示す azureml-fe のいずれかを使用して inferenceRouterServiceType をデプロイできます。
    • loadBalancer」と入力します。 クラウド プロバイダーのロード バランサーを使って azureml-fe を外部に公開します。 この値を指定するには、クラスターがロード バランサーのプロビジョニングをサポートしていることを確認します。 ほとんどのオンプレミス Kubernetes クラスターは、外部ロード バランサーをサポートできないことに注意してください。
    • nodePort」と入力します。 各ノードの IP 上の静的ポートで azureml-fe を公開します。 azureml-feを要求することで、クラスターの外部から<NodeIP>:<NodePort>に連絡できます。 nodePort を使って、azureml-fe に対して独自の負荷分散ソリューションと TLS/SSL 終了を設定することもできます。 独自のイングレスを設定する方法の詳細については、「 HTTP または HTTPS 経由を参照してください。
    • clusterIP」と入力します。 クラスター内部 IP で azureml-fe を公開し、クラスター内部からのみ azureml-fe に到達できるようにします。 クラスター外部から送信される推論要求を azureml-fe で処理できるようにするには、独自の負荷分散ソリューションと azureml-fe の TLS/SSL 終了を設定する必要があります。 独自のイングレスを設定する方法の詳細については、「 HTTP または HTTPS 経由を参照してください。
  • 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 つの一般的な拡張機能の展開シナリオについて説明します。 運用環境での使用に合わせて拡張機能を展開するには、 構成設定の完全な一覧をよくお読みください。

  • トレーニング ジョブの実行やモデルのオンライン/バッチ エンドポイントとしてのデプロイなど、あらゆる種類の ML ワークロードを実行するための概念実証をすばやく行うために、Azureで AKS クラスターを使用します

    AKS クラスター Azure Machine Learning拡張機能のデプロイの場合は、managedClusters パラメーターに --cluster-type 値を指定します。 次の 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 の外部で Azure Arc 対応 Kubernetes クラスターを使用して、トレーニング ジョブのみを実行する簡単な概念実証を行います

    Azure Arc 対応 Kubernetes クラスター上で Azure Machine Learning 拡張機能をデプロイする場合は、connectedClusters パラメーターに --cluster-type の値を指定します。 次の 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
    
  • AKS クラスターを運用トレーニングおよび推論ワークロードのAzureで有効にする AKS でのAzure Machine Learning拡張機能のデプロイの場合は、managedClusters パラメーターに --cluster-type 値を指定します。 ここでは、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 を使用して運用環境のトレーニングと推論のワークロードのために、 Azure Arc 対応 Kubernetes クラスターをどこでも有効にする

    Azure Arc 対応 Kubernetes クラスター上で Azure Machine Learning 拡張機能をデプロイする場合は、connectedClusters パラメーターに --cluster-type の値を指定します。 ここでは、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 拡張機能の詳細を確認します。

    AKS

    az k8s-extension show --name <extension-name> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <resource-group>
    

    Azure Arc 対応 Kubernetes

    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 に [成功] と表示された場合は、クラスターを指す kubeconfig ファイルを使用してマシンで次のコマンドを実行し、 azureml 名前空間のすべてのポッドが Running 状態であることを確認します。

     kubectl get pods -n azureml
    

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

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

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

重要

  • Azure Relay リソースは、Arc クラスター リソースと同じリソース グループ内にあります。 Kubernetes クラスターとの通信に使用されます。 これを変更すると、接続されているコンピュート ターゲットが使えなくなります。
  • 既定では、デプロイ リソースはクラスターの 1 つ以上のノードにランダムにデプロイされ、デーモンセット リソースはすべてのノードにデプロイされます。 拡張機能の展開を特定のノードに制限するには、構成nodeSelectorで説明されている構成設定を使用します。

Note

  • {EXTENSION-NAME}:az k8s-extension create --name CLI コマンドを使用して指定する拡張名です。

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

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

次のステップ