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 に接続する」にある手順に従います。
- クラスターが Azure Red Hat OpenShift (ARO) サービス クラスターまたは OpenShift Container Platform (OCP) クラスターの場合は、「Kubernetes クラスターの構成に関するリファレンス」の記事に記載されている他の前提条件の手順を満たす必要があります。
- 運用環境では、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 ノード プールでは、amd64VM 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 |
loadBalancer、nodePort または clusterIP
の場合はenableInference=True。 |
該当なし | ✓ | ✓ |
internalLoadBalancerProvider |
現在、この構成は Azure Kubernetes Service (AKS) クラスターにのみ適用されます。 推論ルーターで内部ロード バランサーを使用できるようにするには、azure に設定します。 |
該当なし | 省略可能 | 省略可能 |
sslSecret |
azureml 名前空間内の Kubernetes シークレットの名前。 この構成を使用して格納する cert.pem (PEM でエンコードされた TLS/SSL 証明書) と key.pem (PEM でエンコードされた TLS/SSL キー) は、allowInsecureConnections が False に設定されているときの推論 HTTPS エンドポイントのサポートに必要です。
sslSecret のサンプル YAML 定義については、sslSecret の構成に関するページを参照してください。 この構成または sslCertPemFile と sslKeyPemFile の保護された構成設定の組み合わせを使用します。 |
該当なし | 省略可能 | 省略可能 |
sslCname |
TLS/SSL CNAME は推論 HTTPS エンドポイントによって使われます。
の場合はallowInsecureConnections=False |
該当なし | 省略可能 | 省略可能 |
inferenceRouterHA |
True または False、既定値 True。 既定では、Azure Machine Learning 拡張機能によって、高可用性のために 3 つの推論ルーター レプリカがデプロイされます。これには、クラスター内に少なくとも 3 つのワーカー ノードが必要です。 クラスターのワーカー ノード数が 3 未満の場合は、False に設定されます。この場合、1 つの推論ルーター サービスのみがデプロイされます。 |
該当なし | 省略可能 | 省略可能 |
nodeSelector |
既定では、デプロイされる Kubernetes リソースと機械学習ワークロードはクラスターの 1 つ以上のノードにランダムにデプロイされ、DaemonSet リソースは "すべての" ノードにデプロイされます。 拡張機能のデプロイとトレーニング/推論ワークロードを、ラベル key1=value1 と key2=value2 が付いた特定のノードに制限する場合は、それぞれ nodeSelector.key1=value1、nodeSelector.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 をインストールするには、installDcgmExporter を True に設定します。 ただし、独自の dcgm-exporter を利用する場合は、「DCGM Exporter」を参照してください |
省略可能 | 省略可能 | 省略可能 |
| 構成の保護された設定キー名 | 説明 | トレーニング | 推論 | トレーニングと推論 |
|---|---|---|---|---|
sslCertPemFile、sslKeyPemFile |
allowInsecureConnections が False に設定されている場合に、推論 HTTPS エンドポイントのサポートを含む Azure Machine Learning 拡張機能のデプロイに必要な、(PEM でエンコードされた) TLS/SSL 証明書とキー ファイルへのパス。
注: パス フレーズが保護された PEM ファイルはサポートされていません |
該当なし | 省略可能 | 省略可能 |
構成設定表からわかるように、さまざまな構成設定の組み合わせにより、多様な ML ワークロード シナリオに対して Azure Machine Learning 拡張機能をデプロイできます。
- トレーニング ジョブとバッチ推論ワークロードの場合は、
enableTraining=Trueを指定します - 推論ワークロードのみの場合は、
enableInference=Trueを指定します - すべての種類の ML ワークロードに対して、
enableTraining=TrueとenableInference=Trueの両方を指定します
リアルタイム推論ワークロード用に Azure Machine Learning 拡張機能をデプロイする予定で、enableInference=True を指定する必要がある場合は、リアルタイム推論ワークロードに関連する次の構成設定に注意してください。
- リアルタイム推論のサポート用に
azureml-feルーター サービスが必要であり、inferenceRouterServiceTypeに対してazureml-feの構成設定を指定する必要があります。 ルーターは、azureml-fe-v2Kubernetes デプロイとしてデプロイされます。拡張機能 コンポーネントの一覧に示されています。 次に示す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指定するか、sslKeyPemFileとsslCertPemFile構成で保護された設定の組み合わせを指定する必要があります。 - 既定では、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 clusterAzure の外部で 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 clusterAKS クラスターを運用トレーニングおよび推論ワークロードの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 clusterNVIDIA 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 拡張機能のデプロイを確認する
該当する 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>応答から
"name"と"provisioningState": "Succeeded"を見つけます。 最初の数分間、"provisioningState": "Pending"が表示されることがあります。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、メモリ使用率などのジョブ メトリックをクラウドに送信します。 |
重要
Note
-
{EXTENSION-NAME}:
az k8s-extension create --nameCLI コマンドを使用して指定する拡張名です。
Azure Machine Learning 拡張機能を管理する
Azure Machine Learning拡張機能を更新、一覧表示、表示、削除します。
- Azure Arc接続されていない AKS クラスターについては、「クラスター拡張機能のデプロイと管理」を参照>。
- Azure Arc対応 Kubernetes については、「 Azure Arc対応 Kubernetes クラスター拡張機能のデプロイと管理」を参照>。