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 ワークスペースの管理に関するページを参照してください。

  • Machine Learning サービス向けの Azure CLI 拡張機能 (v2)Azure Machine Learning Python SDK、または Azure Machine Learning Visual Studio Code 拡張機能

  • Python SDK を使用する場合、ワークスペースを使用して開発環境を設定します。 環境の設定後、Python スクリプトでワークスペースにアタッチします。

    適用対象: Python SDK azure-ai-ml v2 (現行)

    このコードを実行して、Azure ML ワークスペースに接続します。

    次のコードで、サブスクリプション ID、リソース グループ名、ワークスペース名を置き換えてください。 これらの値を見つけるには:

    1. Azure Machine Learning Studio にサインインします。
    2. 使用するワークスペースを開きます。
    3. 右上隅の Azure Machine Learning スタジオ ツール バーで、ワークスペース名を選びます。
    4. ワークスペース、リソース グループ、サブスクリプション ID の値をコードにコピーします。
    5. スタジオ内でノートブックを使っている場合は、1 つの値をコピーし、領域を閉じて貼り付けてから、次の値に戻る必要があります。
    # 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 で永続的な 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-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()

マネージド 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

これらのリソースは、コンピューティング クラスターと通信し、スケーリングなどの操作を実行するために使用されます。 これらのリソースからリソース ロックを解除すると、コンピューティング クラスターで自動スケールが許可されるようになります。

リソースのロックの詳細については、「リソースのロックによる予期せぬ変更の防止」を参照してください。

次のステップ

コンピューティング クラスターを使用して以下を行います。