Azure Machine Learning コンピューティング クラスターを作成する
[アーティクル] 2024/09/03
15 人の共同作成者
フィードバック
この記事の内容
前提条件
コンピューティング クラスターとは
制限事項
作成
削除
マネージド ID を設定する
トラブルシューティング
次のステップ
さらに 4 個を表示
適用対象: 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 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 CLI extension for Machine Learning service (v2) をインストールします。 この拡張機能は、コンピューティング インスタンスに既にインストールされています。
既定のワークスペースとリソース グループを認証して設定します。 ターミナルを開いたまま、この記事の残りのコマンドを実行します。
コンピューティング インスタンスを使用している場合:
az login --identity
# next line needed only if you have multiple subscriptions:
az account set --subscription "<SUBSCRIPTION-NAME>" # replace with your subscription name
az configure --defaults group=$CI_RESOURCE_GROUP workspace=$CI_WORKSPACE
コマンドをローカルで実行している場合は、--identity
を省略して認証の指示に従います。 $CI_RESOURCE_GROUP
と $CI_WORKSPACE
を独自の値で置き換えます。
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
パラメーターを設定すると、ネットワークの待機時間とデータ転送コストが増大する可能性があります。 待機時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
適用対象: Azure CLI ml 拡張機能 v2 (現行)
az ml compute create -f create-cluster.yml
ファイル create-cluster.yml は次のとおりです。
$schema: https://azuremlschemas.azureedge.net/latest/amlCompute.schema.json
name: location-example
type: amlcompute
size: STANDARD_DS3_v2
min_instances: 0
max_instances: 2
idle_time_before_scale_down: 120
location: westus
警告
ワークスペースやデータストアと異なるリージョンでコンピューティング クラスターを使用すると、ネットワークの待機時間とデータ転送コストが増大する可能性があります。 待ち時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
トレーニング、バッチ推論、強化学習のワークロードのためのシングル ノードまたはマルチ ノードのコンピューティング クラスターを作成します。
Azure Machine Learning Studio に移動します。
[管理] の下にある、 [コンピューティング] を選択します。
コンピューティング インスタンスをまだお持ちでない場合は、ページの中央にある [新規] を選択します。
コンピューティング リソースの一覧が表示されたら、一覧の上にある [+新規] を選択します。
上部のタブで、[コンピューティング クラスター] を選択します。
次のようにフォームに入力します。
フィールド
説明
場所
コンピューティング クラスターが作成される Azure リージョンです。 既定では、ワークスペースと同じ場所になります。 既定のリージョンに十分なクォータがない場合は、別のリージョンに切り替えて、その他のオプションを検討します。 ワークスペースやデータストアと異なるリージョンを使用すると、ネットワークの待ち時間とデータ転送コストが増大する可能性があります。 待ち時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
仮想マシンのタイプ
CPU または GPU を選択します。 このタイプは作成後に変更することはできません。
仮想マシンの優先度
[専用] または [低優先度] を選択します。 低優先度の仮想マシンは低コストですが、コンピューティング ノードが保証されません。 ジョブに対して割り込みが発生する場合があります。
仮想マシンのサイズ
サポートされる仮想マシンのサイズがお客様のリージョンで制限されている可能性があります。 利用可能な製品のリスト に関するページを確認してください
[次へ] を選択して [詳細設定] に進み、以下に従ってフォームに入力します。
フィールド
説明
コンピューティング名
* 名前は必須であり、3 文字から 24 文字の長さにする必要があります。 * 有効な文字は、大文字、小文字、数字、- 文字です。 * 名前の先頭は文字にする必要があります。 * 名前は、Azure リージョン内のすべての既存のコンピューティングで一意である必要があります 選択した名前が一意でない場合、アラートが表示されます。 名前に - 文字が使用されている場合、その後に少なくとも 1 文字を続ける必要があります。
最小ノード数
プロビジョニングするノードの最小数。 専用のノード数を指定する場合は、その数をここで設定します。 最小値を 0 に設定することにより、コストを節約できます。この場合、クラスターがアイドル状態であれば、ノードに対する課金は発生しません。
ノードの最大数
プロビジョニングするノードの最大数。 コンピューティングは、ジョブが送信されるときにこのノードの最大数まで自動的にスケーリングされます。
スケール ダウンする前のアイドル時間 (秒)
クラスターのノード数を最小限までスケールダウンする前のアイドル時間。
Enable SSH access (SSH アクセスを有効にする)
コンピューティング インスタンスに SSH アクセスを有効にする 場合と同じ手順を使用します。
詳細設定
省略可能。 ネットワーク設定を構成します。 * Azure Virtual Network の場合、[リソース グループ] 、[仮想ネットワーク] 、[サブネット] を指定し、そのネットワーク内にコンピューティング インスタンスを作成します。 詳細については、ネットワークの要件 に関するページを参照してください。 * Azure Machine Learning マネージド ネットワーク の場合、コンピューティング クラスターはマネージド ネットワーク内に自動的に配置されます。 詳細については、マネージド ネットワークを使用したマネージド コンピューティング に関するページを参照してください。 * パブリック IP なしでは、ネットワーク内にいるときに、コンピューティング クラスターにパブリック IP アドレスがあるかどうかが設定されます。 * マネージド ID を割り当てて、リソースへのアクセスを許可します。
[作成] を選択します
Enable SSH access (SSH アクセスを有効にする)
SSH アクセスは既定では無効になっています。 SSH アクセスは、作成後に変更することはできません。 VS Code Remote を使用して対話形式でデバッグする場合は、アクセスを有効にする必要があります。
[Next: Advanced Settings](次へ: 詳細設定) を選択したら、次のようにします。
[Enable SSH access](SSH アクセスを有効にする) をオンにします。
[SSH public key source]\(SSH 公開キーのソース\) で、ドロップダウンから次のいずれかのオプションを選択します。
[新しいキーの組を生成] の場合:
[Key pair name](キーの組の名前) にキーの名前を入力します。
[作成] を選択します
[Download private key and create compute](秘密キーをダウンロードしてコンピューティングを作成する) を選択します。 キーは通常、 [ダウンロード] フォルダーにダウンロードされます。
[Use existing public key stored in Azure](Azure に保存されている既存の公開キーを使用する) を選択した場合には、 [Stored key](保存されているキー) でキーを探して選択します。
[既存の公開キーを使用] を選択した場合には、("ssh-rsa" から始まる) 1 行の形式か、複数行の PEM 形式で RSA 公開キーを入力します。 SSH キーは、Linux と OS X では ssh-keygen を、Windows では PuTTYGen を使用して生成できます。
SSH アクセスが有効なコンピューティングを作成したら、次の手順に従ってアクセスします。
ワークスペース リソースでコンピューティングを探します。
左側にある [コンピューティング] を選択します。
上部のタブを使用して、 [コンピューティング インスタンス] または [コンピューティング クラスター] を選択し、マシンを探します。
リソース一覧で、コンピューティング名を選択します。
接続文字列を探します。
接続文字列をコピーします。
Windows の場合は、PowerShell またはコマンド プロンプトを開きます。
キーが格納されているディレクトリまたはフォルダーに移動します
秘密キーの場所を特定し、格納場所をポイントできるよう、接続文字列に -i フラグを追加します。
ssh -i <keyname.pem> azureuser@... (rest of connection string)
Linux ユーザーの場合は、Azure 内の Linux VM 用の SSH キーの組を作成して使用する 方法に関する記事の手順に従ってください
SCP の場合は次を使用します。
scp -i key.pem -P {port} {fileToCopyFromLocal } azureuser@yourComputeInstancePublicIP:~/{destination}
優先度の低い仮想マシンにより、コンピューティング クラスターのコストを削減する
優先順位の低い 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()
適用対象: Azure CLI ml 拡張機能 v2 (現行)
vm-priority
を設定します。
az ml compute create -f create-cluster.yml
ファイル create-cluster.yml は次のとおりです。
$schema: https://azuremlschemas.azureedge.net/latest/amlCompute.schema.json
name: low-pri-example
type: amlcompute
size: STANDARD_DS3_v2
min_instances: 0
max_instances: 2
idle_time_before_scale_down: 120
tier: low_priority
Note
サーバーレス コンピューティング を使用する場合、コンピューティング クラスターを作成する必要はありません。 優先順位の低いサーバーレス コンピューティングを指定するには、キューの設定 で job_tier
を Spot
に設定します。
VM を作成するときに、スタジオで [低優先度] を選択します。
コンピューティング クラスターが使用されていない場合、ノードはゼロにスケール ダウンされますが、プロビジョニングされていないノードはクォータの使用量に影響します。 コンピューティング クラスターを削除すると、ワークスペースからコンピューティング先が削除され、クォータが解放されます。
適用対象 : Python SDK azure-ai-ml v2 (現行)
これにより、この記事の前半で create_basic
オブジェクトから作成された基本的なコンピューティング クラスターが削除されます。
from azure.ai.ml.entities import AmlCompute
ml_client.compute.begin_delete(cluster_basic.name).wait()
Azure Machine Learning Studio に移動します。
左側のメニューの [管理] で、[コンピューティング] を選択します。
[コンピューティング] ページの上部にある [コンピューティング クラスター] を選択します。
削除するクラスターを選択します。
ページの上部で、[削除] を選択します。
コンピューティング クラスターでマネージド 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
これらのリソースは、コンピューティング クラスターと通信し、スケーリングなどの操作を実行するために使用されます。 これらのリソースからリソース ロックを解除すると、コンピューティング クラスターで自動スケールが許可されるようになります。
リソースのロックの詳細については、「リソースのロックによる予期せぬ変更の防止 」を参照してください。
コンピューティング クラスターを使用して以下を行います。