Azure Machine Learning Python SDK (v1) を使用したモデルのトレーニング
適用対象: Python SDK azureml v1
SDK v1 を使用して Azure Machine Learning ワークスペースに Azure のコンピューティング リソースをアタッチする方法について説明します。 その後、機械学習タスクで、これらのリソースをトレーニングおよび推論のコンピューティング先として使用できます。
この記事では、以下のコンピューティング リソースを使用するためにワークスペースを設定する方法について説明します。
- ユーザーのローカル コンピューター
- リモート仮想マシン
- Apache Spark プール (Azure Synapse Analytics によって機能する)
- Azure HDInsight
- Azure Batch
- Azure Databricks - 機械学習パイプラインでのみトレーニングのコンピューティング先として使用されます
- Azure Data Lake Analytics
- Azure Container Instances
- Azure Machine Learning Kubernetes
Azure Machine Learning によって管理されるコンピューティング先を使用するには、以下を参照してください。
- Azure Machine Learning コンピューティング インスタンス
- Azure Machine Learning コンピューティング クラスター
- Azure Kubernetes Service クラスター
重要
この記事で "プレビュー" と付記されている項目は、現在、パブリック プレビュー段階です。 プレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
前提条件
Azure Machine Learning ワークスペース。 詳細については、ワークスペース リソースの作成に関するページを参照してください。
Machine Learning サービス向けの Azure CLI 拡張機能、Azure Machine Learning Python SDK、または Azure Machine Learning Visual Studio Code 拡張機能。
制限事項
ワークスペースから同じコンピューティングに対して複数のアタッチメントを同時に作成することは避けてください。 たとえば、2 つの異なる名前を使用して 1 つの Azure Kubernetes Service クラスターをワークスペースにアタッチすることが該当します。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。
TLS またはその他のクラスター構成設定を変更するためなど、コンピューティング先を再アタッチする場合は、まず、既存のアタッチメントを削除する必要があります。
コンピューティング先とは
Azure Machine Learning では、さまざまなリソースまたは環境でご利用のモデルをトレーニングでき、それらを総称してコンピューティング先と呼びます。 コンピューティング先は、ローカル マシンでも、Azure Machine Learning コンピューティング、Azure HDInsight、リモート仮想マシンなどのクラウド リソースでもかまいません。 コンピューティング先は、モデル デプロイの場所と方法に関するページで説明されているように、モデル デプロイにも使用します。
ローカル コンピューター
トレーニングのためにローカル コンピューターを使用する場合は、コンピューティング先を作成する必要はありません。 ローカル コンピューターからトレーニング実行を送信するだけで十分です。
ローカル コンピューターを推論に使用する場合は、Docker がインストールされている必要があります。 デプロイを実行するには、LocalWebservice.deploy_configuration() を使用して、Web サービスが使用するポートを定義します。 次に、「Azure Machine Learning を使用してモデルをデプロイする」の説明に従って通常のデプロイ プロセスを使用します。
リモート仮想マシン
Azure Machine Learning では、Azure 仮想マシンのアタッチもサポートされています。 VM は、Azure Data Science Virtual Machine (DSVM) である必要があります。 その VM では、完全なライフサイクルの機械学習開発用に精選されたツールとフレームワークが提供されます。 Azure Machine Learning での DSVM の使用方法について詳しくは、開発環境の構成に関する記事をご覧ください。
ヒント
リモート VM ではなく、Azure Machine Learning コンピューティング インスタンスを使用することをお勧めします。 これは、Azure Machine Learning に固有のフル マネージドのクラウドベース コンピューティング ソリューションです。 詳細については、「Azure Machine Learning コンピューティング インスタンスの作成と管理」を参照してください。
作成する: Azure Machine Learning によって、リモート VM を作成することはできません。 代わりに、ユーザーが VM を作成してから、Azure Machine Learning ワークスペースにアタッチする必要があります。 DSVM の作成については、Linux (Ubuntu) データ サイエンス仮想マシンのプロビジョニングに関する記事を参照してください。
警告
Azure Machine Learning では、Ubuntu を実行する仮想マシンのみがサポートされます。 VM を作成するとき、または既存の VM を選択するときは、Ubuntu を使用する VM を選択する必要があります。
さらに Azure Machine Learning では、仮想マシンにパブリック IP アドレスが必要です。
アタッチ: Azure Machine Learning スタジオを使用して、DSVM をワークスペースにアタッチします。
警告
ワークスペースから同じ DSVM に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。
構成する:DSVM コンピューティング先用の実行構成を作成します。 Docker と conda は、DSVM でトレーニング環境を作成および構成するために使用されます。
from azureml.core import ScriptRunConfig from azureml.core.environment import Environment from azureml.core.conda_dependencies import CondaDependencies # Create environment myenv = Environment(name="myenv") # Specify the conda dependencies myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn']) # If no base image is explicitly specified the default CPU image "azureml.core.runconfig.DEFAULT_CPU_IMAGE" will be used # To use GPU in DSVM, you should specify the default GPU base Docker image or another GPU-enabled image: # myenv.docker.enabled = True # myenv.docker.base_image = azureml.core.runconfig.DEFAULT_GPU_IMAGE # Configure the run configuration with the Linux DSVM as the compute target and the environment defined above src = ScriptRunConfig(source_directory=".", script="train.py", compute_target=compute, environment=myenv)
ヒント
ワークスペースから VM を削除 (デタッチ) する場合は、RemoteCompute.detach() メソッドを使用します。
Azure Machine Learning によって VM が削除されることはありません。 Azure portal、CLI、または Azure VM 用の SDK を使用して、VM を手動で削除する必要があります。
Apache Spark プール
Azure Synapse Analytics と Azure Machine Learning の統合 (プレビュー) によって、Azure Synapse によってサポートされる Apache Spark プールをアタッチし、インタラクティブなデータ探索とデータ準備を行うことができます。 この統合を使用して、データ ラングリングの専用コンピューティングを大規模にすることができます。 詳細については、「Apache Spark pools powered by Azure Synapse Analytics をアタッチする方法」を参照してください。
Azure HDInsight
Azure HDInsight は、ビッグ データ分析のための一般的なプラットフォームです。 そのプラットフォームでは、モデルのトレーニングに使用できる Apache Spark が提供されます。
作成する: Azure Machine Learning によって HDInsight クラスターを作成することはできません。 代わりに、ユーザーがクラスターを作成してから、Azure Machine Learning ワークスペースにアタッチする必要があります。 詳細については、HDInsight での Spark クラスターの作成に関する記事を参照してください。
警告
Azure Machine Learning では、HDInsight クラスターにパブリック IP アドレスが必要です。
クラスターを作成するとき、SSH ユーザー名とパスワードを指定する必要があります。 コンピューティング先として HDInsight を使用するときに必要になるので、これらの値をメモしておいてください。
クラスターが作成された後、ホスト名 <clustername>-ssh.azurehdinsight.net でそれに接続します。<clustername> は、ユーザーがクラスターに指定した名前です。
アタッチ: Azure Machine Learning スタジオを使用して、HDInsight クラスターをワークスペースにアタッチします。
警告
ワークスペースから同じ HDInsight に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。
構成する:HDI コンピューティング先用の実行構成を作成します。
from azureml.core.runconfig import RunConfiguration from azureml.core.conda_dependencies import CondaDependencies # use pyspark framework run_hdi = RunConfiguration(framework="pyspark") # Set compute target to the HDI cluster run_hdi.target = hdi_compute.name # specify CondaDependencies object to ask system installing numpy cd = CondaDependencies() cd.add_conda_package('numpy') run_hdi.environment.python.conda_dependencies = cd
ヒント
ワークスペースから HDInsight クラスターを削除 (デタッチ) する場合は、HDInsightCompute.detach() メソッドを使用します。
Azure Machine Learning によって、HDInsight クラスターは削除されません。 Azure portal、CLI、または Azure HDInsight 用の SDK を使用して、手動で削除する必要があります。
Azure Batch
Azure Batch は、大規模な並列コンピューティングやハイパフォーマンス コンピューティング (HPC) のアプリケーションをクラウドで効率的に実行するために使用されます。 AzureBatchStep を Azure Machine Learning Pipeline で使用して、マシンの Azure Batch プールにジョブを送信できます。
コンピューティング ターゲットとして Azure Batch に接続するには、Azure Machine Learning SDK を使用し、次の情報を提供する必要があります。
- Azure Batch のコンピューティング名:ワークスペース内のコンピューティングに使用されるフレンドリ名
- Azure Batch アカウント名:Azure Batch アカウントの名前
- リソース グループ:Azure Batch アカウントを含むリソース グループ。
次のコードは、コンピューティング ターゲットとして Azure Batch に接続する方法を示しています。
from azureml.core.compute import ComputeTarget, BatchCompute
from azureml.exceptions import ComputeTargetException
# Name to associate with new compute in workspace
batch_compute_name = 'mybatchcompute'
# Batch account details needed to attach as compute to workspace
batch_account_name = "<batch_account_name>" # Name of the Batch account
# Name of the resource group which contains this account
batch_resource_group = "<batch_resource_group>"
try:
# check if the compute is already attached
batch_compute = BatchCompute(ws, batch_compute_name)
except ComputeTargetException:
print('Attaching Batch compute...')
provisioning_config = BatchCompute.attach_configuration(
resource_group=batch_resource_group, account_name=batch_account_name)
batch_compute = ComputeTarget.attach(
ws, batch_compute_name, provisioning_config)
batch_compute.wait_for_completion()
print("Provisioning state:{}".format(batch_compute.provisioning_state))
print("Provisioning errors:{}".format(batch_compute.provisioning_errors))
print("Using Batch compute:{}".format(batch_compute.cluster_resource_id))
警告
ワークスペースから同じ Azure Batch に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。
Azure Databricks
Azure Databricks は、Azure クラウド内の Apache Spark ベースの環境です。 これは、Azure Machine Learning パイプラインでコンピューティング先として使用できます。
重要
Azure Machine Learning によって Azure Databricks コンピューティング先を作成することはできません。 代わりに、ユーザーが Azure Databricks ワークスペースを作成してから、Azure Machine Learning ワークスペースにアタッチする必要があります。 ワークスペース リソースを作成するには、Azure Databricks での Spark ジョブの実行に関するドキュメントを参照してください。
別の Azure サブスクリプションから Azure Databricks ワークスペースをアタッチするには、Azure Databricks ワークスペースで自分 (Microsoft Entra アカウント) に共同作成者ロールが付与されている必要があります。 Azure portal でご自身のアクセス権を確認してください。
コンピューティング先として Azure Databricks をアタッチするには、次の情報を指定します。
- Databricks コンピューティング名:このコンピューティング リソースに割り当てる名前。
- Databricks ワークスペース名:Azure Databricks ワークスペースの名前。
- Databricks アクセス トークン:Azure Databricks に対する認証に使用するアクセス トークン。 アクセス トークンを生成するには、認証に関するドキュメントを参照してください。
次のコードでは、Azure Machine Learning SDK を使用してコンピューティング先として Azure Databricks をアタッチする方法を示します。
import os
from azureml.core.compute import ComputeTarget, DatabricksCompute
from azureml.exceptions import ComputeTargetException
databricks_compute_name = os.environ.get(
"AML_DATABRICKS_COMPUTE_NAME", "<databricks_compute_name>")
databricks_workspace_name = os.environ.get(
"AML_DATABRICKS_WORKSPACE", "<databricks_workspace_name>")
databricks_resource_group = os.environ.get(
"AML_DATABRICKS_RESOURCE_GROUP", "<databricks_resource_group>")
databricks_access_token = os.environ.get(
"AML_DATABRICKS_ACCESS_TOKEN", "<databricks_access_token>")
try:
databricks_compute = ComputeTarget(
workspace=ws, name=databricks_compute_name)
print('Compute target already exists')
except ComputeTargetException:
print('compute not found')
print('databricks_compute_name {}'.format(databricks_compute_name))
print('databricks_workspace_name {}'.format(databricks_workspace_name))
print('databricks_access_token {}'.format(databricks_access_token))
# Create attach config
attach_config = DatabricksCompute.attach_configuration(resource_group=databricks_resource_group,
workspace_name=databricks_workspace_name,
access_token=databricks_access_token)
databricks_compute = ComputeTarget.attach(
ws,
databricks_compute_name,
attach_config
)
databricks_compute.wait_for_completion(True)
詳細な例については、GitHub のサンプル ノートブックを参照してください。
警告
ワークスペースから同じ Azure Databricks に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。
Azure Data Lake Analytics
Azure Data Lake Analytics は、Azure クラウド内のビッグ データ分析プラットフォームです。 これは、Azure Machine Learning パイプラインでコンピューティング先として使用できます。
使用する前に、Azure Data Lake Analytics アカウントを作成します。 このリソースを作成するには、「Azure Data Lake Analytics の使用を開始する」を参照してください。
コンピューティング ターゲットとして Data Lake Analytics に接続するには、Azure Machine Learning SDK を使用し、次の情報を提供する必要があります。
- コンピューティング名:このコンピューティング リソースに割り当てる名前。
- リソース グループ:Data Lake Analytics アカウントを含むリソース グループ。
- アカウント名:Data Lake Analytics アカウント名です。
次のコードは、コンピューティング ターゲットとして Data Lake Analytics に接続する方法を示しています。
import os
from azureml.core.compute import ComputeTarget, AdlaCompute
from azureml.exceptions import ComputeTargetException
adla_compute_name = os.environ.get(
"AML_ADLA_COMPUTE_NAME", "<adla_compute_name>")
adla_resource_group = os.environ.get(
"AML_ADLA_RESOURCE_GROUP", "<adla_resource_group>")
adla_account_name = os.environ.get(
"AML_ADLA_ACCOUNT_NAME", "<adla_account_name>")
try:
adla_compute = ComputeTarget(workspace=ws, name=adla_compute_name)
print('Compute target already exists')
except ComputeTargetException:
print('compute not found')
print('adla_compute_name {}'.format(adla_compute_name))
print('adla_resource_id {}'.format(adla_resource_group))
print('adla_account_name {}'.format(adla_account_name))
# create attach config
attach_config = AdlaCompute.attach_configuration(resource_group=adla_resource_group,
account_name=adla_account_name)
# Attach ADLA
adla_compute = ComputeTarget.attach(
ws,
adla_compute_name,
attach_config
)
adla_compute.wait_for_completion(True)
詳細な例については、GitHub のサンプル ノートブックを参照してください。
警告
ワークスペースから同じ ADLA に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。
ヒント
Azure Machine Learning パイプラインは、Data Lake Analytics アカウントの既定のデータ ストアに格納されたデータのみ使用できます。 使用する必要があるデータが既定以外のストアにある場合は、DataTransferStep
を使用して、トレーニングの前にデータをコピーできます。
Azure Container Instances
Azure Container Instances (ACI) は、モデルのデプロイ時に動的に作成されます。 他の方法では、ACI を作成したり、ワークスペースにアタッチしたりすることはできません。 詳細については、Azure Container Instances へのモデルのデプロイに関するページを参照してください。
Kubernetes
Azure Machine Learning には、トレーニングと推論用に独自の Kubernetes クラスターを接続するためのオプションが用意されています。 「Azure Machine Learning のための Kubernetes クラスターを構成する」を参照してください。
ワークスペースから Kubernetes クラスターをデタッチするには、次の方法を使用します。
compute_target.detach()
警告
クラスターをデタッチしても、クラスターは削除されません。 Azure Kubernetes Service クラスターを削除するには、AKS での Azure CLI の使用に関するセクションを参照してください。 Azure Arc 対応 Kubernetes クラスターを削除するには、Azure Arc のクイックスタートに関するページを参照してください。
ノートブックの例
さまざまなコンピューティング先を使用したトレーニングの例については、以下のノートブックをご覧ください。
ノートブックの実行方法については、Jupyter Notebook を使用してこのサービスを探索する方法に関するページを参照してください。
次のステップ
- コンピューティング リソースを使用して、トレーニング実行を構成して送信します。
- チュートリアル: モデルのトレーニングとデプロイに関する記事では、マネージド コンピューティング先を使用してモデルをトレーニングします。
- より優れたモデルを構築するために、ハイパーパラメーターを効率的に調整する方法を学習します。
- モデルのトレーニングが済んだら、モデルをデプロイする方法と場所を確認します。
- Azure Machine Learning と Azure Virtual Network を使用する