Azure Machine Learning コンピューティング クラスターを作成する
適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)
この記事では、Azure Machine Learning ワークスペースでコンピューティング クラスターを作成および管理する方法について説明します。
Azure Machine Learning コンピューティング クラスターを使用して、クラウド内の CPU または GPU コンピューティング ノードのクラスター全体にトレーニングまたはバッチ推論のプロセスを分散させることができます。 GPU を含む仮想マシンのサイズの詳細については、「GPU 最適化済み仮想マシンのサイズ」を参照してください。
具体的には、次の方法を学習します。
- コンピューティング クラスターを作成します。
- 低優先度の VM でコンピューティング クラスターのコストを削減する。
- クラスターのマネージド ID を設定する。
Note
コンピューティング クラスターを作成する代わりに、サーバーレス コンピューティングを使って、コンピューティングのライフサイクル管理を Azure Machine Learning にオフロードします。
前提条件
- Azure Machine Learning ワークスペース。 詳細については、Azure Machine Learning ワークスペースの管理に関するページを参照してください。
コンピューティング クラスターを作成する任意の方法に基づいて、前提条件の残りの部分に適したタブを選択します。
- Python SDK
- Azure CLI
-
[ スタジオ](#tab/azure-studio)
コンピューティング インスタンスでコードを実行していない場合は、Azure Machine Learning Python SDK をインストールします。 この SDK は、コンピューティング インスタンスに既にインストールされています。
Python スクリプトのワークスペースにアタッチします。
このコードを実行して Azure Machine Learning ワークスペースに接続します。
次のコードで、サブスクリプション ID、リソース グループ名、ワークスペース名を置き換えます。 これらの値を見つけるには:
- Azure Machine Learning Studio にサインインします。
- 使用するワークスペースを開きます。
- 右上の Azure Machine Learning スタジオ ツール バーで、ワークスペース名を選びます。
- ワークスペース、リソース グループ、サブスクリプション ID の値をコードにコピーします。
適用対象: Python SDK azure-ai-ml v2 (現行)
# Enter details of your AML workspace subscription_id = "<SUBSCRIPTION_ID>" resource_group = "<RESOURCE_GROUP>" workspace = "<AML_WORKSPACE_NAME>"
# get a handle to the workspace from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient( DefaultAzureCredential(), subscription_id, resource_group, workspace )
ml_client
は、他のリソースやジョブの管理に使うワークスペースに対するハンドラーです。
コンピューティング クラスターとは
Azure Machine Learning コンピューティング クラスターは、シングルノードまたはマルチノードのコンピューティングを簡単に作成できるマネージド コンピューティング インフラストラクチャです。 コンピューティング クラスターは、ワークスペース内の他のユーザーと共有できるリソースです。 コンピューティングはジョブが送信されると自動的にスケールアップされ、Azure 仮想ネットワークに配置できます。 コンピューティング クラスターでは、仮想ネットワークでもパブリック IP なしのデプロイはサポートされません。 コンピューティングはコンテナー化環境で実行され、モデルの依存関係が Docker コンテナーにパッケージ化されます。
コンピューティング クラスターを使用することで、企業で SSH ポートを開かなくても、マネージド仮想ネットワークまたは Azure Virtual Network でジョブを安全に実行できます。 ジョブはコンテナー化された環境で実行され、モデルの依存関係が Docker コンテナーにパッケージ化されます。
制限事項
コンピューティング クラスターは、ワークスペースとは別のリージョンに作成できます。 この機能はコンピューティング クラスターでのみ利用できます。コンピューティング インスタンスでは利用できません。
警告
ワークスペースやデータストアと異なるリージョンでコンピューティング クラスターを使用すると、ネットワークの待機時間とデータ転送コストが増大する可能性があります。 待機時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
Azure Machine Learning コンピューティングには、割り当て可能なコア数などの既定の制限があります。 詳細については、「Azure リソースのクォータの管理と要求」を参照してください。
Azure を使用すると、リソースに "ロック" を設定して、削除できないようにしたり、読み取り専用にしたりすることができます。 ワークスペースが含まれているリソース グループにリソース ロックを適用しないでください。 ワークスペースが含まれているリソース グループにロックを適用すると、Azure Machine Learning コンピューティング クラスターのスケーリング操作ができません。 リソースのロックの詳細については、「リソースのロックによる予期せぬ変更の防止」を参照してください。
作成
推定所要時間: 約 5 分です。
Note
サーバーレス コンピューティングを使う場合、コンピューティング クラスターを作成する必要はありません。
Azure Machine Learning コンピューティングは、複数回の実行で再利用できます。 コンピューティングは、ワークスペース内の他のユーザーと共有することができ、複数回の実行の間で保持されます。この場合、送信された実行の回数およびクラスター上で設定された max_nodes
に基づいてノードは自動的にスケールアップまたはスケールダウンされます。 min_nodes
設定では、使用可能な最小ノード数が制御されます。
コンピューティング クラスターの作成に適用されるリージョンあたりの専用コア数は、VM ファミリ クォータ別およびリージョン合計クォータ別に、Azure Machine Learning トレーニングのコンピューティング インスタンスのクォータと統合され、共有されます。
重要
ジョブが実行されていない場合の課金を回避するには、最小ノード数を 0 に設定します。 この設定により、 Azure Machine Learning では使用されていないノードの割り当てが解除されます。 0 より大きい値を指定すると、ノードが使用されていない場合でも、指定した数のノードが実行され続けます。
コンピューティングは、使用されていないときは、0 ノードまで自動的にスケールダウンされます。 必要に応じて、ジョブ実行専用の VM が作成されます。
次の例を使用して、コンピューティング クラスターを作成します。
- Python SDK
- Azure CLI
-
[ スタジオ](#tab/azure-studio)
Python で永続的な Azure Machine Learning コンピューティング リソースを作成するには、size
および max_instances
プロパティを指定します。 その後、Azure Machine Learning では他のプロパティに対してスマート既定値が使用されます。
- サイズ: Azure Machine Learning コンピューティングによって作成されたノードの VM ファミリ。
- max_instances: Azure Machine Learning コンピューティングでジョブを実行中に自動スケールアップする最大ノード数。
適用対象: Python SDK azure-ai-ml v2 (現行)
from azure.ai.ml.entities import AmlCompute
cluster_basic = AmlCompute(
name="basic-example",
type="amlcompute",
size="STANDARD_DS3_v2",
location="westus",
min_instances=0,
max_instances=2,
idle_time_before_scale_down=120,
)
ml_client.begin_create_or_update(cluster_basic).result()
Azure Machine Learning コンピューティングを作成するときに、いくつかの詳細プロパティも設定できます。 これらのプロパティを使用すると、永続的なクラスターを固定サイズで、またはサブスクリプションの既存の Azure 仮想ネットワーク内に作成できます。 詳しくは、「AmlCompute クラス」をご覧ください。
警告
ワークスペースやデータストアと異なるリージョンで location
パラメーターを設定すると、ネットワークの待機時間とデータ転送コストが増大する可能性があります。 待機時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
優先度の低い仮想マシンにより、コンピューティング クラスターのコストを削減する
優先順位の低い VM を使用し、一部または全部のワークロードを実行することもできます。 これらの VM では、可用性が保証されず、使用中に割り込まれる可能性があります。 割り込まれたジョブを再開する必要があります。
Azure Low Priority Virtual Machines を使用すると、大幅にコストを削減して Azure の未使用容量を利用できます。 Azure が容量を戻す必要がある任意の時点で、Azure インフラストラクチャは Azure Low Priority Virtual Machines を削除します。 したがって、Azure Low Priority Virtual Machines は、中断を処理できるワークロードに最適です。 利用可能な容量は、サイズ、リージョン、時刻などによって異なります。 Azure Low Priority Virtual Machines をデプロイする場合、使用可能な容量がある場合、Azure は VM を割り当てますが、これらの VM に対する SLA はありません。 Azure Low Priority Virtual Machines では、高可用性の保証は提供されません。 Azure が容量を戻す必要がある任意の時点で、Azure インフラストラクチャは Azure Low Priority Virtual Machines を削除します。
優先順位の低い VM を指定するには、次のいずれかの方法を使用します。
- Python SDK
- Azure CLI
-
[ スタジオ](#tab/azure-studio)
適用対象: Python SDK azure-ai-ml v2 (現行)
from azure.ai.ml.entities import AmlCompute
cluster_low_pri = AmlCompute(
name="low-pri-example",
size="STANDARD_DS3_v2",
min_instances=0,
max_instances=2,
idle_time_before_scale_down=120,
tier="low_priority",
)
ml_client.begin_create_or_update(cluster_low_pri).result()
削除
コンピューティング クラスターが使用されていない場合、ノードはゼロにスケール ダウンされますが、プロビジョニングされていないノードはクォータの使用量に影響します。 コンピューティング クラスターを削除すると、ワークスペースからコンピューティング先が削除され、クォータが解放されます。
- Python SDK
- Azure CLI
-
[ スタジオ](#tab/azure-studio)
適用対象: Python SDK azure-ai-ml v2 (現行)
これにより、この記事の前半で create_basic
オブジェクトから作成された基本的なコンピューティング クラスターが削除されます。
from azure.ai.ml.entities import AmlCompute
ml_client.compute.begin_delete(cluster_basic.name).wait()
マネージド ID を設定する
コンピューティング クラスターでマネージド ID を構成する方法については、「Azure Machine Learning と他のサービス間の認証の設定」を参照してください。
トラブルシューティング
GA リリースの前に Azure portal から Azure Machine Learning ワークスペースを作成したユーザーが、そのワークスペースに AmlCompute を作成できないことがあります。 サービスにサポート リクエストを送るか、ポータルまたは SDK を使って新しいワークスペースを作成することで、すぐにブロックを解除することができます。
重要
コンピューティング インスタンスやコンピューティング クラスターがこれらのシリーズのいずれかをベースにしている場合は、別の VM サイズで再作成してください。
これらのシリーズは、2023 年 8 月 31 日に廃止されました:
これらのシリーズは、2024 年 8 月 31 日に廃止されました:
サイズ変更時の停止
ノードの状態に応じてサイズ変更 (0 -> 0) を実行しているときに Azure Machine Learning のコンピューティング クラスターが停止したと表示される場合、Azure リソースのロックが原因である可能性があります。
Azure では、リソースに "ロック" を設定して、削除できないようにしたり、読み取り専用にしたりすることができます。 リソースをロックすると、予期しない結果になる可能性があります。 一部の操作はリソースを変更するように見えなくても、ロックによってブロックされているアクションが実際には必要です。
Azure Machine Learning では、ワークスペースのリソース グループに削除ロックを適用すると、Azure ML コンピューティング クラスターのスケーリング操作ができなくなります。 この問題を回避するには、リソース グループからロックを解除し、グループ内の個々の項目に適用することをお勧めします。
重要
次のリソースにロックを適用しないでください。
リソース名 | リソースの種類 |
---|---|
<GUID>-azurebatch-cloudservicenetworksecurityggroup |
ネットワーク セキュリティ グループ |
<GUID>-azurebatch-cloudservicepublicip |
パブリック IP アドレス |
<GUID>-azurebatch-cloudserviceloadbalancer |
Load Balancer |
これらのリソースは、コンピューティング クラスターと通信し、スケーリングなどの操作を実行するために使用されます。 これらのリソースからリソース ロックを解除すると、コンピューティング クラスターで自動スケールが許可されるようになります。
リソースのロックの詳細については、「リソースのロックによる予期せぬ変更の防止」を参照してください。
次のステップ
コンピューティング クラスターを使用して以下を行います。