コンピューティング クラスターを作成して使用する

完了

実験と開発の後には、コードを運用環境に対応させる必要があります。 運用環境でコードを実行する場合は、ノートブックではなくスクリプトを使うことをお勧めします。 スクリプトを実行するときは、スケーラブルなコンピューティング先を使う必要があります。

Azure Machine Learning 内でのスクリプトの実行には、コンピューティング クラスターが最適です。 Azure コマンド ライン インターフェイス (CLI) または Python ソフトウェア開発キット (SDK) を使用して、Azure Machine Learning スタジオでコンピューティング クラスターを作成できます。

Python SDK を使用してコンピューティング クラスターを作成する

Python SDK を使ってコンピューティング クラスターを作成するには、次のコードを使用します。

from azure.ai.ml.entities import AmlCompute

cluster_basic = AmlCompute(
    name="cpu-cluster",
    type="amlcompute",
    size="STANDARD_DS3_v2",
    location="westus",
    min_instances=0,
    max_instances=2,
    idle_time_before_scale_down=120,
    tier="low_priority",
)
ml_client.begin_create_or_update(cluster_basic).result()

AmlCompute クラスで想定されるパラメーターを理解するには、リファレンス ドキュメントを参照してください。

コンピューティング クラスターを作成する場合は、次の 3 つの主なパラメーターを考慮する必要があります。

  • size: コンピューティング クラスター内で各ノードの "仮想マシンの種類" を指定します。 Azure の仮想マシンのサイズに基づきます。 サイズの横で、CPU と GPU のどちらを使用するかを指定することもできます。
  • max_instances: コンピューティング クラスターでスケールアウトできる "ノードの最大数" を指定します。 コンピューティング クラスターで処理できる並列ワークロードの数は、クラスターでスケーリングできるノードの数に類似しています。
  • tier:使用する仮想マシンを "低優先度" にするか、"専用" にするかを指定します。 低優先度に設定すると、コストを削減できますが、可用性は保証されません。

コンピューティング クラスターを使用する

コンピューティング クラスターを使用できるシナリオは主に 3 つあります。

  • デザイナーでビルドしたパイプライン ジョブを実行する。
  • 自動化された機械学習ジョブを実行する。
  • スクリプトをジョブとして実行する。

これらの各シナリオでは、ジョブが送信されるとコンピューティング クラスターが自動的にスケールアップし、ジョブが完了すると自動的にシャットダウンするため、コンピューティング クラスターが理想的です。

コンピューティング クラスターを使うと、複数のモデルを並列でトレーニングすることもできます。これは、自動機械学習を使う場合の一般的な方法です。

デザイナー パイプライン ジョブと自動機械学習ジョブは、Azure Machine Learning スタジオを使用して実行できます。 スタジオを通じてジョブを送信する場合、作成したコンピューティング クラスターに、コンピューティング先を設定できます。

コード優先の方法を使用する場合は、Python SDK を使用してコンピューティング クラスターにコンピューティング先を設定できます。

たとえば、コマンド ジョブとしてスクリプトを実行する場合は、次のコードを使用することで、コンピューティング先をコンピューティング クラスターに設定することができます。

from azure.ai.ml import command

# configure job
job = command(
    code="./src",
    command="python diabetes-training.py",
    environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest",
    compute="cpu-cluster",
    display_name="train-with-cluster",
    experiment_name="diabetes-training"
    )

# submit job
returned_job = ml_client.create_or_update(job)
aml_url = returned_job.studio_url
print("Monitor your job at", aml_url)

コンピューティング クラスターを使うジョブを送信すると、そのコンピューティング クラスターは 1 つ以上のノードにスケールアウトされます。 サイズ変更には数分かかります。必要なノードがプロビジョニングされるとジョブの実行が開始されます。 ジョブの状態が "準備中" の場合は、コンピューティング クラスターの準備が行われている最中です。 状態が "実行中" の場合は、コンピューティング クラスターの準備が整い、ジョブが実行されています。