Modellen trainen met de Azure Machine Learning Python SDK (v1)

VAN TOEPASSING OP:Python SDK azureml v1

Meer informatie over het koppelen van Azure-rekenresources aan uw Azure Machine Learning-werkruimte met SDK v1. Vervolgens kunt u deze resources gebruiken als trainings- en deductie-rekendoelen in uw machine learning-taken.

In dit artikel leert u hoe u uw werkruimte instelt voor het gebruik van deze rekenresources:

  • Uw lokale computer
  • Externe virtuele machines
  • Apache Spark-pools (mogelijk gemaakt door Azure Synapse Analytics)
  • Azure HDInsight
  • Azure Batch
  • Azure Databricks - alleen gebruikt als trainingsrekendoel in machine learning-pijplijnen
  • Azure Data Lake Analytics
  • Azure Container Instance
  • Azure Machine Learning Kubernetes

Als u rekendoelen wilt gebruiken die worden beheerd door Azure Machine Learning, raadpleegt u:

Vereisten

Beperkingen

  • Maak niet meerdere, gelijktijdige bijlagen met dezelfde berekening vanuit uw werkruimte. Als u bijvoorbeeld één Azure Kubernetes Service cluster aan een werkruimte koppelt met behulp van twee verschillende namen. Met elke nieuwe bijlage worden de vorige bestaande bijlagen verbroken.

    Als u een rekendoel opnieuw wilt koppelen, bijvoorbeeld om tls of een andere clusterconfiguratie-instelling te wijzigen, moet u eerst de bestaande bijlage verwijderen.

Wat is een rekendoel?

Met Azure Machine Learning kunt u uw model trainen op verschillende resources of omgevingen, gezamenlijk rekendoelen genoemd. Een rekendoel kan een lokale machine of een cloudresource zijn, zoals een Azure Machine Learning Compute, Azure HDInsight of een externe virtuele machine. U gebruikt ook rekendoelen voor modelimplementatie, zoals beschreven in 'Waar en hoe u uw modellen implementeert'.

Lokale computer

Wanneer u uw lokale computer gebruikt voor training, hoeft u geen rekendoel te maken. Verzend de trainingsuitvoering vanaf uw lokale computer.

Wanneer u uw lokale computer gebruikt voor deductie, moet Docker zijn geïnstalleerd. Als u de implementatie wilt uitvoeren, gebruikt u LocalWebservice.deploy_configuration() om de poort te definiëren die door de webservice wordt gebruikt. Gebruik vervolgens het normale implementatieproces zoals beschreven in Modellen implementeren met Azure Machine Learning.

Externe virtuele machines

Azure Machine Learning biedt ook ondersteuning voor het koppelen van een virtuele Azure-machine. De VM moet een Azure-Data Science Virtual Machine (DSVM) zijn. De VM biedt een samengestelde keuze aan hulpprogramma's en frameworks voor het ontwikkelen van machine learning in de volledige levenscyclus. Zie Een ontwikkelomgeving configureren voor meer informatie over het gebruik van de DSVM met Azure Machine Learning.

Tip

In plaats van een externe VM raden we u aan het Azure Machine Learning-rekenproces te gebruiken. Het is een volledig beheerde, cloudgebaseerde rekenoplossing die specifiek is voor Azure Machine Learning. Zie Azure Machine Learning-rekenproces maken en beheren voor meer informatie.

  1. Maken: Azure Machine Learning kan geen externe VM voor u maken. In plaats daarvan moet u de virtuele machine maken en deze vervolgens koppelen aan uw Azure Machine Learning-werkruimte. Zie De Data Science Virtual Machine inrichten voor Linux (Ubuntu) voor meer informatie over het maken van een DSVM.

    Waarschuwing

    Azure Machine Learning ondersteunt alleen virtuele machines waarop Ubuntu wordt uitgevoerd. Wanneer u een VIRTUELE machine maakt of een bestaande VM kiest, moet u een VM selecteren die gebruikmaakt van Ubuntu.

    Voor Azure Machine Learning moet de virtuele machine ook een openbaar IP-adres hebben.

  2. Koppelen: Als u een bestaande virtuele machine wilt koppelen als rekendoel, moet u de resource-id, gebruikersnaam en wachtwoord voor de virtuele machine opgeven. De resource-id van de VIRTUELE machine kan worden samengesteld met behulp van de abonnements-id, resourcegroepnaam en VM-naam met behulp van de volgende tekenreeksindeling: /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)
    

    U kunt de DSVM ook aan uw werkruimte koppelen met behulp van Azure Machine Learning-studio.

    Waarschuwing

    Maak niet meerdere, gelijktijdige bijlagen met dezelfde DSVM vanuit uw werkruimte. Met elke nieuwe bijlage worden de vorige bestaande bijlagen verbroken.

  3. Configureren: Maak een uitvoeringsconfiguratie voor het DSVM-rekendoel. Docker en conda worden gebruikt voor het maken en configureren van de trainingsomgeving op de 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) 
    

Tip

Als u een VM uit uw werkruimte wilt verwijderen (loskoppelen), gebruikt u de methode RemoteCompute.detach().

Azure Machine Learning verwijdert de VM niet voor u. U moet de VIRTUELE machine handmatig verwijderen met behulp van de Azure Portal, CLI of de SDK voor Azure VM.

Apache Spark-pools

Met de Azure Synapse Analytics-integratie met Azure Machine Learning (preview) kunt u een Apache Spark-pool koppelen die wordt ondersteund door Azure Synapse voor interactieve gegevensverkenning en voorbereiding. Met deze integratie kunt u een toegewezen rekenproces voor gegevens op schaal hebben. Zie Apache Spark-pools koppelen die worden mogelijk gemaakt door Azure Synapse Analytics voor meer informatie.

Azure HDInsight

Azure HDInsight is een populair platform voor big data-analyses. Het platform biedt Apache Spark, die kan worden gebruikt om uw model te trainen.

  1. Maken: Azure Machine Learning kan geen HDInsight-cluster voor u maken. In plaats daarvan moet u het cluster maken en vervolgens koppelen aan uw Azure Machine Learning-werkruimte. Zie Een Spark-cluster maken in HDInsight voor meer informatie.

    Waarschuwing

    Voor Azure Machine Learning moet het HDInsight-cluster een openbaar IP-adres hebben.

    Wanneer u het cluster maakt, moet u een SSH-gebruikersnaam en -wachtwoord opgeven. Noteer deze waarden, omdat u ze nodig hebt om HDInsight te gebruiken als rekendoel.

    Nadat het cluster is gemaakt, maakt u er verbinding mee met de hostnaamclusternaam-ssh.azurehdinsight.net<>, waarbij <clusternaam> de naam is die u hebt opgegeven voor het cluster.

  2. Koppelen: Als u een HDInsight-cluster wilt koppelen als rekendoel, moet u de resource-id, gebruikersnaam en wachtwoord voor het HDInsight-cluster opgeven. De resource-id van het HDInsight-cluster kan worden samengesteld met behulp van de abonnements-id, de naam van de resourcegroep en de naam van het HDInsight-cluster met behulp van de volgende tekenreeksindeling: /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)
    

    U kunt het HDInsight-cluster ook koppelen aan uw werkruimte met behulp van Azure Machine Learning-studio.

    Waarschuwing

    Maak niet meerdere, gelijktijdige bijlagen met hetzelfde HDInsight vanuit uw werkruimte. Met elke nieuwe bijlage worden de vorige bestaande bijlagen verbroken.

  3. Configureren: Maak een uitvoeringsconfiguratie voor het HDI-rekendoel.

    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
    

Tip

Als u een HDInsight-cluster uit de werkruimte wilt verwijderen (loskoppelen), gebruikt u de methode HDInsightCompute.detach().

Azure Machine Learning verwijdert het HDInsight-cluster niet voor u. U moet deze handmatig verwijderen met behulp van de Azure Portal, CLI of de SDK voor Azure HDInsight.

Azure Batch

Azure Batch wordt gebruikt om grootschalige parallelle en HPC-toepassingen (High Performance Computing) efficiënt uit te voeren in de cloud. AzureBatchStep kan worden gebruikt in een Azure Machine Learning-pijplijn om taken te verzenden naar een Azure Batch-pool met machines.

Als u Azure Batch als rekendoel wilt koppelen, moet u de Azure Machine Learning SDK gebruiken en de volgende informatie opgeven:

  • Azure Batch compute-naam: een beschrijvende naam die moet worden gebruikt voor de berekening in de werkruimte
  • Azure Batch accountnaam: de naam van het Azure Batch-account
  • Resourcegroep: de resourcegroep die het Azure Batch-account bevat.

De volgende code laat zien hoe u Azure Batch als rekendoel koppelt:

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))

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen met dezelfde Azure Batch vanuit uw werkruimte. Met elke nieuwe bijlage worden de vorige bestaande bijlagen verbroken.

Azure Databricks

Azure Databricks is een apache Spark-omgeving in de Azure-cloud. Het kan worden gebruikt als rekendoel met een Azure Machine Learning-pijplijn.

Belangrijk

Azure Machine Learning kan geen Azure Databricks-rekendoel maken. In plaats daarvan moet u een Azure Databricks-werkruimte maken en deze vervolgens koppelen aan uw Azure Machine Learning-werkruimte. Als u een werkruimteresource wilt maken, raadpleegt u het document Een Spark-taak uitvoeren in Azure Databricks .

Als u een Azure Databricks-werkruimte wilt koppelen vanuit een ander Azure-abonnement, moet u (uw Azure AD account) de rol Inzender krijgen in de Azure Databricks-werkruimte. Controleer uw toegang in de Azure Portal.

Als u Azure Databricks wilt koppelen als rekendoel, geeft u de volgende informatie op:

  • Naam van Databricks-rekenproces: de naam die u wilt toewijzen aan deze rekenresource.
  • Databricks-werkruimtenaam: de naam van de Azure Databricks-werkruimte.
  • Databricks-toegangstoken: het toegangstoken dat wordt gebruikt voor verificatie bij Azure Databricks. Zie het verificatiedocument om een toegangstoken te genereren.

De volgende code laat zien hoe u Azure Databricks koppelt als rekendoel met de Azure Machine Learning SDK:

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)

Zie een voorbeeldnotebook op GitHub voor een gedetailleerder voorbeeld.

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen met dezelfde Azure Databricks vanuit uw werkruimte. Met elke nieuwe bijlage worden de vorige bestaande bijlagen verbroken.

Azure Data Lake Analytics

Azure Data Lake Analytics is een analyseplatform voor big data in de Azure-cloud. Het kan worden gebruikt als rekendoel met een Azure Machine Learning-pijplijn.

Maak een Azure Data Lake Analytics-account voordat u dit gebruikt. Als u deze resource wilt maken, raadpleegt u het document Aan de slag met Azure Data Lake Analytics.

Als u Data Lake Analytics als rekendoel wilt koppelen, moet u de Azure Machine Learning SDK gebruiken en de volgende informatie opgeven:

  • Rekennaam: de naam die u wilt toewijzen aan deze rekenresource.
  • Resourcegroep: de resourcegroep die het Data Lake Analytics-account bevat.
  • Accountnaam: de Data Lake Analytics accountnaam.

De volgende code laat zien hoe u Data Lake Analytics als rekendoel koppelt:

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)

Zie een voorbeeldnotebook op GitHub voor een gedetailleerder voorbeeld.

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen met dezelfde ADLA vanuit uw werkruimte. Met elke nieuwe bijlage worden de vorige bestaande bijlagen verbroken.

Tip

Azure Machine Learning-pijplijnen kunnen alleen werken met gegevens die zijn opgeslagen in het standaardgegevensarchief van het Data Lake Analytics-account. Als de gegevens waarmee u wilt werken zich in een niet-standaardarchief bevindt, kunt u de DataTransferStep gegevens kopiëren vóór de training.

Azure Container Instance

Azure Container Instances (ACI) dynamisch worden gemaakt wanneer u een model implementeert. U kunt ACI niet op een andere manier maken of koppelen aan uw werkruimte. Zie Een model implementeren in Azure Container Instances voor meer informatie.

Kubernetes

Azure Machine Learning biedt u de mogelijkheid om uw eigen Kubernetes-clusters te koppelen voor training en deductie. Zie Kubernetes-cluster configureren voor Azure Machine Learning.

Gebruik de volgende methode om een Kubernetes-cluster los te koppelen vanuit uw werkruimte:

compute_target.detach()

Waarschuwing

Als u een cluster loskoppelt, wordt het cluster niet verwijderd. Zie De Azure CLI gebruiken met AKS als u een Azure Kubernetes Service-cluster wilt verwijderen. Als u een Kubernetes-cluster met Azure Arc wilt verwijderen, raadpleegt u de quickstart voor Azure Arc.

Voorbeelden van notitieblokken

Bekijk deze notebooks voor voorbeelden van training met verschillende rekendoelen:

Informatie over het uitvoeren van notebooks vindt u in het artikel Use Jupyter notebooks to explore this service (Jupyter Notebooks gebruiken om deze service te verkennen).

Volgende stappen