Delen via


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- wordt 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:

Belangrijk

Items in dit artikel die zijn gemarkeerd als 'preview', zijn momenteel beschikbaar als openbare preview. De preview-versie wordt aangeboden zonder Service Level Agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Vereisten

Beperkingen

  • Maak niet meerdere, gelijktijdige bijlagen naar dezelfde rekenkracht vanuit uw werkruimte. Als u bijvoorbeeld één Azure Kubernetes Service-cluster koppelt aan een werkruimte met twee verschillende namen. Elke nieuwe bijlage breekt de vorige bestaande bijlagen op.

    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 gewoon 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 machine learning-ontwikkeling 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 Datawetenschap virtuele 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.

    Azure Machine Learning vereist ook dat de virtuele machine een openbaar IP-adres heeft.

  2. Koppelen: Als u een bestaande virtuele machine als rekendoel wilt koppelen, 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, de naam van de resourcegroep en de naam van de VM 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. Elke nieuwe bijlage breekt de vorige bestaande bijlagen op.

  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 VIRTUELE machine uit uw werkruimte wilt verwijderen (loskoppelen), gebruikt u de methode RemoteCompute.detach().

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

Apache Spark-pools

Met de integratie van Azure Synapse Analytics 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, dat 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 als rekendoel wilt koppelen, moet u de resource-id, gebruikersnaam en wachtwoord opgeven voor het HDInsight-cluster. 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 aan uw werkruimte koppelen met behulp van Azure Machine Learning-studio.

    Waarschuwing

    Maak niet meerdere, gelijktijdige bijlagen naar hetzelfde HDInsight vanuit uw werkruimte. Elke nieuwe bijlage breekt de vorige bestaande bijlagen op.

  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 het 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 in de cloud uit te voeren. 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-rekennaam: 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 aan dezelfde Azure Batch vanuit uw werkruimte. Elke nieuwe bijlage breekt de vorige bestaande bijlagen op.

Azure Databricks

Azure Databricks is een op Apache Spark gebaseerde omgeving in de Azure-cloud. Het kan worden gebruikt als een 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. Zie het document Een Spark-taak uitvoeren in Azure Databricks om een werkruimteresource te maken.

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

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

  • Databricks-berekeningsnaam: de naam die u wilt toewijzen aan deze rekenresource.
  • Naam databricks-werkruimte: de naam van de Azure Databricks-werkruimte.
  • Databricks-toegangstoken: het toegangstoken dat wordt gebruikt om te verifiëren 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 voorbeeldnotitieblok op GitHub voor een gedetailleerder voorbeeld.

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen met dezelfde Azure Databricks vanuit uw werkruimte. Elke nieuwe bijlage breekt de vorige bestaande bijlagen op.

Azure Data Lake Analytics

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

Een Azure Data Lake Analytics-account maken voordat u deze gebruikt. Zie het document Aan de slag met Azure Data Lake Analytics om deze resource te maken.

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

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

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 voorbeeldnotitieblok op GitHub voor een gedetailleerder voorbeeld.

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen naar dezelfde ADLA vanuit uw werkruimte. Elke nieuwe bijlage breekt de vorige bestaande bijlagen op.

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 moet werken zich in een niet-standaardarchief bevinden, kunt u een DataTransferStep gegevens kopiëren voordat u gaat trainen.

Azure Container Instance

Azure Container Instances (ACI) worden dynamisch 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. Als u een Azure Kubernetes Service-cluster wilt verwijderen, raadpleegt u De Azure CLI gebruiken met AKS. Als u een Kubernetes-cluster met Azure Arc wilt verwijderen, raadpleegt u de quickstart van Azure Arc.

Notebook-voorbeelden

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