CLI v1 を使用して Azure Machine Learning コンピューティング クラスターを作成する
適用対象:Azure CLI ml 拡張機能 v1
Python SDK azureml v1
Azure Machine Learning ワークスペースでコンピューティング クラスターを作成および管理する方法について説明します。
Azure Machine Learning コンピューティング クラスターを使用して、クラウド内の CPU または GPU コンピューティング ノードのクラスター全体にトレーニングまたはバッチ推論のプロセスを分散させることができます。 GPU を含む仮想マシンのサイズの詳細については、「GPU 最適化済み仮想マシンのサイズ」を参照してください。
この記事では、次のことについて説明します:
- コンピューティング クラスターを作成する
- コンピューティング クラスターのコストを削減する
- クラスターのマネージド ID を設定する
前提条件
Azure Machine Learning ワークスペース。 詳細については、Azure Machine Learning ワークスペースの作成に関するページをご覧ください。
Machine Learning サービス向けの Azure CLI 拡張機能 (v1)、Azure Machine Learning Python SDK、または Azure Machine Learning Visual Studio Code 拡張機能。
重要
この記事の Azure CLI コマンドの一部では、Azure Machine Learning 用に
azure-cli-ml
、つまり v1 の拡張機能を使用しています。 v1 拡張機能のサポートは、2025 年 9 月 30 日に終了します。 その日付まで、v1 拡張機能をインストールして使用できます。2025 年 9 月 30 日より前に、
ml
(v2) 拡張機能に移行することをお勧めします。 v2 拡張機能の詳細については、Azure ML CLI 拡張機能と Python SDK v2 に関するページを参照してください。Python SDK を使用する場合、ワークスペースを使用して開発環境を設定します。 環境の設定後、Python スクリプトでワークスペースにアタッチします。
適用対象:
Python SDK azureml v1
from azureml.core import Workspace ws = Workspace.from_config()
コンピューティング クラスターとは
Azure Machine Learning コンピューティング クラスターは、シングルノードまたはマルチノードのコンピューティングを簡単に作成できるマネージド コンピューティング インフラストラクチャです。 コンピューティング クラスターは、ワークスペース内の他のユーザーと共有できるリソースです。 コンピューティングはジョブが送信されると自動的にスケールアップされ、Azure 仮想ネットワークに配置できます。 コンピューティング クラスターでは、仮想ネットワークでもパブリック IP なしのデプロイはサポートされません。 コンピューティングはコンテナー化環境で実行され、モデルの依存関係が Docker コンテナーにパッケージ化されます。
コンピューティング クラスターを使用することで、企業で SSH ポートを開かなくても、仮想ネットワーク環境でジョブを安全に実行できます。 ジョブはコンテナー化された環境で実行され、モデルの依存関係が Docker コンテナーにパッケージ化されます。
制限事項
コンピューティング クラスターは、ワークスペースとは別のリージョンおよび VNet に作成できます。 ただし、この機能は SDK v2、CLI v2、または Studio を使用する場合にのみ利用できます。 詳しくは、v2 バージョンのセキュリティで保護されたトレーニング環境をご覧ください。
現在、ARM テンプレート を使用したクラスターの作成 (更新ではなく) のみがサポートされています。 コンピューティングを更新する場合は、現時点では SDK、Azure CLI、または UX を使用することをお勧めします。
Azure Machine Learning コンピューティングには、割り当て可能なコア数などの既定の制限があります。 詳細については、「Azure リソースのクォータの管理と要求」を参照してください。
Azure では、リソースに "ロック" を設定して、削除できないようにしたり、読み取り専用にしたりすることができます。 ワークスペースが含まれているリソース グループにリソース ロックを適用しないでください。 ワークスペースが含まれているリソース グループにロックを適用すると、Azure Machine Learning コンピューティング クラスターのスケーリング操作ができなくなります。 リソースのロックの詳細については、「リソースのロックによる予期せぬ変更の防止」を参照してください。
ヒント
必要なコア数に十分に対応するクォータを備えている限り、クラスターは一般に、最大で 100 ノードまでスケールアップすることができます。 既定では、たとえば、MPI ジョブをサポートするために、クラスターは、そのノード間でノード間通信を有効にした状態でセットアップされます。 ただし、サポート チケットを作成し、ご利用のサブスクリプション、ワークスペース、またはノード間通信を無効にする特定のクラスターをリストに登録することを要求するだけで、ご利用のクラスターを数千のノードにスケーリングすることができます。
作成
推定所要時間: 約 5 分です。
Azure Machine Learning コンピューティングは、複数回の実行で再利用できます。 コンピューティングは、ワークスペース内の他のユーザーと共有することができ、複数回の実行の間で保持されます。この場合、送信された実行の回数およびクラスター上で設定された max_nodes に基づいてノードは自動的にスケールアップまたはスケールダウンされます。 min_nodes 設定では、使用可能な最小ノード数が制御されます。
コンピューティング クラスターの作成に適用されるリージョンあたりの専用コア数は、VM ファミリ クォータ別およびリージョン合計クォータ別に、Azure Machine Learning トレーニングのコンピューティング インスタンスのクォータと統合され、共有されます。
重要
ジョブが実行されていない場合の課金を回避するには、最小ノード数を 0 に設定します。 この設定により、 Azure Machine Learning では使用されていないノードの割り当てが解除されます。 0 より大きい値を指定すると、ノードが使用されていない場合でも、指定した数のノードが実行され続けます。
コンピューティングは、使用されていないときは、0 ノードまで自動的にスケールダウンされます。 必要に応じて、ジョブ実行専用の VM が作成されます。
Python で永続的な Azure Machine Learning コンピューティング リソースを作成するには、vm_size および max_nodes プロパティを指定します。 その後、Azure Machine Learning では他のプロパティに対してスマート既定値が使用されます。
- vm_size:Azure Machine Learning コンピューティングによって作成されるノードの VM ファミリ。
- max_nodes:Azure Machine Learning コンピューティングでジョブを実行中に自動スケールアップする最大ノード数。
適用対象: Python SDK azureml v1
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"
# Verify that cluster does not exist already
try:
cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
print('Found existing cluster, use it.')
except ComputeTargetException:
# To use a different region for the compute, add a location='<region>' parameter
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
max_nodes=4)
cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
cpu_cluster.wait_for_completion(show_output=True)
Azure Machine Learning コンピューティングを作成するときに、いくつかの詳細プロパティも設定できます。 これらのプロパティを使用すると、永続的なクラスターを固定サイズで、またはサブスクリプションの既存の Azure 仮想ネットワーク内に作成できます。 詳しくは、「AmlCompute クラス」をご覧ください。
警告
ワークスペースやデータストアと異なるリージョンで location
パラメーターを設定すると、ネットワークの待機時間とデータ転送コストが増大する可能性があります。 待機時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
コンピューティング クラスターのコストを削減する
優先順位の低い VM を使用して、一部または全部のワークロードを実行することもできます。 これらの VM では、可用性が保証されず、使用中に割り込まれる可能性があります。 割り込まれたジョブを再開する必要があります。
適用対象: Python SDK azureml v1
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
vm_priority='lowpriority',
max_nodes=4)
マネージド ID を設定する
また、Azure Machine Learning コンピューティング クラスターによって、マネージド ID がサポートされ、コードに資格情報を含めることなく、Azure リソースへのアクセスが認証されます。 マネージド ID には、次の 2 種類があります。
- システム割り当てマネージド ID は、Azure Machine Learning のコンピューティング クラスターとコンピューティング インスタンスで直接有効になります。 システム割り当て ID のライフ サイクルは、コンピューティング クラスターまたはインスタンスに直接関連付けられます。 コンピューティング クラスターまたはインスタンスが削除された場合、Azure は Microsoft Entra ID の資格情報および ID を自動的にクリーンアップします。
- ユーザー割り当てマネージド ID は、Azure マネージド ID サービスを介して提供されるスタンドアロンの Azure リソースです。 ユーザー割り当てマネージド ID を複数のリソースに割り当てることができ、任意の有効期間を設定できます。 このマネージド ID は、事前に作成してから、必要なパラメーターとして identity_id として渡す必要があります。
適用対象: Python SDK azureml v1
プロビジョニング構成でマネージド ID を構成します。
ws
という名前のワークスペースで作成された、システム割り当てマネージド ID# configure cluster with a system-assigned managed identity compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2', max_nodes=5, identity_type="SystemAssigned", ) cpu_cluster_name = "cpu-cluster" cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
ws
という名前のワークスペースで作成された、ユーザー割り当てマネージド ID# configure cluster with a user-assigned managed identity compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2', max_nodes=5, identity_type="UserAssigned", identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>']) cpu_cluster_name = "cpu-cluster" cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
cpu_cluster
という名前の既存のコンピューティング クラスターにマネージド ID を追加しますシステム割り当てマネージド ID:
# add a system-assigned managed identity cpu_cluster.add_identity(identity_type="SystemAssigned")
ユーザー割り当てマネージド ID:
# add a user-assigned managed identity cpu_cluster.add_identity(identity_type="UserAssigned", identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
Note
Azure Machine Learning コンピューティング クラスターは、システムによって割り当てられた 1 つの ID またはユーザーによって割り当てられた複数の ID のみをサポートします。両方同時にはサポートしません。
マネージド ID の使用
既定のマネージド ID は、システムによって割り当てられたマネージド ID、またはユーザーが割り当てた最初のマネージドID です。
実行中、ID は次の 2 つの方法で利用されます。
ユーザーのストレージ マウント、コンテナー レジストリ、データストアを設定するために、システムによって ID が使用されます。
- この場合、システムは既定のマネージド ID を使用します。
送信済み実行のコード内からリソースにアクセスするために、ユーザーによって ID が利用されます。
- この場合、資格情報の取得に使用するマネージド ID に対応する client_id を指定します。
- または、DEFAULT_IDENTITY_CLIENT_ID 環境変数を使用して、ユーザーが割り当てた ID のクライアント ID を取得します。
たとえば、既定のマネージド ID を使用してデータストアのトークンを取得するには、次のようにします。
client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID') credential = ManagedIdentityCredential(client_id=client_id) token = credential.get_token('https://storage.azure.com/')
トラブルシューティング
GA リリースの前に Azure portal から Azure Machine Learning ワークスペースを作成したユーザーが、そのワークスペースに AmlCompute を作成できないことがあります。 サービスにサポート リクエストを送るか、ポータルまたは SDK を使って新しいワークスペースを作成することで、すぐにブロックを解除することができます。
サイズ変更時の停止
ノードの状態に応じてサイズ変更 (0 -> 0) を実行しているときに Azure Machine Learning のコンピューティング クラスターが停止したように見える場合は、Azure リソースのロックが原因である可能性があります。
Azure では、リソースに "ロック" を設定して、削除できないようにしたり、読み取り専用にしたりすることができます。 リソースをロックすると、予期しない結果になる可能性があります。 一部の操作はリソースを変更するように見えなくても、ロックによってブロックされているアクションが実際には必要です。
Azure Machine Learning では、ワークスペースのリソース グループに削除ロックを適用すると、Azure ML コンピューティング クラスターのスケーリング操作ができなくなります。 この問題を回避するには、リソース グループからロックを解除し、グループ内の個々の項目に適用することをお勧めします。
重要
次のリソースにロックを適用しないでください。
リソース名 | リソースの種類 |
---|---|
<GUID>-azurebatch-cloudservicenetworksecurityggroup |
ネットワーク セキュリティ グループ |
<GUID>-azurebatch-cloudservicepublicip |
パブリック IP アドレス |
<GUID>-azurebatch-cloudserviceloadbalancer |
Load Balancer |
これらのリソースは、コンピューティング クラスターと通信し、スケーリングなどの操作を実行するために使用されます。 これらのリソースからリソース ロックを解除すると、コンピューティング クラスターで自動スケールが許可されるようになります。
リソースのロックの詳細については、「リソースのロックによる予期せぬ変更の防止」を参照してください。
次のステップ
コンピューティング クラスターを使用して以下を行います。