Share via


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 によって管理されるコンピューティング先を使用するには、以下を参照してください。

重要

この記事で "プレビュー" と付記されている項目は、現在、パブリック プレビュー段階です。 プレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

前提条件

制限事項

  • ワークスペースから同じコンピューティングに対して複数のアタッチメントを同時に作成することは避けてください。 たとえば、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 コンピューティング インスタンスの作成と管理」を参照してください。

  1. 作成する: Azure Machine Learning によって、リモート VM を作成することはできません。 代わりに、ユーザーが VM を作成してから、Azure Machine Learning ワークスペースにアタッチする必要があります。 DSVM の作成については、Linux (Ubuntu) データ サイエンス仮想マシンのプロビジョニングに関する記事を参照してください。

    警告

    Azure Machine Learning では、Ubuntu を実行する仮想マシンのみがサポートされます。 VM を作成するとき、または既存の VM を選択するときは、Ubuntu を使用する VM を選択する必要があります。

    さらに Azure Machine Learning では、仮想マシンにパブリック IP アドレスが必要です。

  2. アタッチする:コンピューティング ターゲットとして既存の仮想マシンを接続するには、仮想マシンのリソース ID、ユーザー名、およびパスワードを入力する必要があります。 VM のリソース ID は、次の文字列形式を使用して、サブスクリプション ID、リソース グループ名、VM 名から作成できます: /subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Compute/virtualMachines/<vm_name>

    from azureml.core.compute import RemoteCompute, ComputeTarget
    
    # Create the compute config 
    compute_target_name = "attach-dsvm"
    
    attach_config = RemoteCompute.attach_configuration(resource_id='<resource_id>',
                                                    ssh_port=22,
                                                    username='<username>',
                                                    password="<password>")
    
    # Attach the compute
    compute = ComputeTarget.attach(ws, compute_target_name, attach_config)
    
    compute.wait_for_completion(show_output=True)
    

    または、Azure Machine Learning Studio を使用して、DSVM をワークスペースにアタッチすることもできます。

    警告

    ワークスペースから同じ DSVM に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。

  3. 構成する: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 が提供されます。

  1. 作成する: Azure Machine Learning によって HDInsight クラスターを作成することはできません。 代わりに、ユーザーがクラスターを作成してから、Azure Machine Learning ワークスペースにアタッチする必要があります。 詳細については、HDInsight での Spark クラスターの作成に関する記事を参照してください。

    警告

    Azure Machine Learning では、HDInsight クラスターにパブリック IP アドレスが必要です。

    クラスターを作成するとき、SSH ユーザー名とパスワードを指定する必要があります。 コンピューティング先として HDInsight を使用するときに必要になるので、これらの値をメモしておいてください。

    クラスターが作成された後、ホスト名 <clustername>-ssh.azurehdinsight.net でそれに接続します。<clustername> は、ユーザーがクラスターに指定した名前です。

  2. アタッチする:コンピューティング先として HDInsight クラスターをアタッチするには、HDInsight クラスターのリソース ID、ユーザー名、およびパスワードを指定する必要があります。 HDInsight クラスターのリソース ID は、次の文字列形式を使用して、サブスクリプション ID、リソース グループ名、HDInsight クラスター名から作成できます: /subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.HDInsight/clusters/<cluster_name>

    from azureml.core.compute import ComputeTarget, HDInsightCompute
    from azureml.exceptions import ComputeTargetException
    
    try:
    # if you want to connect using SSH key instead of username/password you can provide parameters private_key_file and private_key_passphrase
    
    attach_config = HDInsightCompute.attach_configuration(resource_id='<resource_id>',
                                                          ssh_port=22, 
                                                          username='<ssh-username>', 
                                                          password='<ssh-pwd>')
    hdi_compute = ComputeTarget.attach(workspace=ws, 
                                       name='myhdi', 
                                       attach_configuration=attach_config)
    
    except ComputeTargetException as e:
    print("Caught = {}".format(e.message))
    
    hdi_compute.wait_for_completion(show_output=True)
    

    または、Azure Machine Learning Studio を使用して、HDInsight クラスターをワークスペースにアタッチすることもできます。

    警告

    ワークスペースから同じ HDInsight に対して複数のアタッチメントを同時に作成することは避けてください。 アタッチを繰り返すたびに、先行する既存のアタッチメントが切断されます。

  3. 構成する: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 を使用してこのサービスを探索する方法に関するページを参照してください。

次のステップ