Share via


Trainingstaken configureren en verzenden

VAN TOEPASSING OP:Python SDK azureml v1

In dit artikel leert u hoe u Azure Machine Learning-taken configureert en verzendt om uw modellen te trainen. Codefragmenten leggen de belangrijkste onderdelen van de configuratie en verzending van een trainingsscript uit. Gebruik vervolgens een van de voorbeeldnotitieblokken om de volledige end-to-end werkvoorbeelden te vinden.

Tijdens het trainen is het gebruikelijk om op uw lokale computer te beginnen en later uit te schalen naar een cloudcluster. Met Azure Machine Learning kunt u uw script uitvoeren op verschillende rekendoelen zonder dat u uw trainingsscript hoeft te wijzigen.

U hoeft alleen de omgeving te definiëren voor elk rekendoel binnen een scripttaakconfiguratie. Wanneer u vervolgens uw trainingsexperiment wilt uitvoeren op een ander rekendoel, geeft u de taakconfiguratie voor die berekening op.

Vereisten

Wat is een scriptuitvoeringsconfiguratie?

Een ScriptRunConfig wordt gebruikt om de informatie te configureren die nodig is voor het indienen van een trainingstaak als onderdeel van een experiment.

U verzendt uw trainingsexperiment met een ScriptRunConfig-object. Dit object bevat het volgende:

  • source_directory: de bronmap met uw trainingsscript
  • script: het trainingsscript dat moet worden uitgevoerd
  • compute_target: het rekendoel waarop moet worden uitgevoerd
  • omgeving: de omgeving die moet worden gebruikt bij het uitvoeren van het script
  • en enkele extra configureerbare opties (zie de referentiedocumentatie voor meer informatie)

Uw model trainen

Het codepatroon voor het verzenden van een trainingstaak is hetzelfde voor alle typen rekendoelen:

  1. Een experiment maken om uit te voeren
  2. Een omgeving maken waarin het script wordt uitgevoerd
  3. Een ScriptRunConfig maken, waarmee het rekendoel en de omgeving worden opgegeven
  4. De taak verzenden
  5. Wacht tot de taak is voltooid

U kunt ook het volgende doen:

Een experiment maken

Maak een experiment in uw werkruimte. Een experiment is een lichtgewicht container die helpt bij het organiseren van taakinzendingen en het bijhouden van code.

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Een rekendoel selecteren

Selecteer het rekendoel waarop uw trainingsscript wordt uitgevoerd. Als er geen rekendoel is opgegeven in ScriptRunConfig, of als compute_target='local', voert Azure Machine Learning uw script lokaal uit.

In de voorbeeldcode in dit artikel wordt ervan uitgegaan dat u al een rekendoel my_compute_target hebt gemaakt uit de sectie Vereisten.

Notitie

Azure Databricks wordt niet ondersteund als rekendoel voor modeltraining. U kunt Azure Databricks gebruiken voor gegevensvoorbereidings- en implementatietaken.

Notitie

Zie Machine Learning met Azure Arc configureren als u een rekendoel wilt maken en koppelen voor training op een Kubernetes-cluster met Azure Arc

Een omgeving maken

Azure Machine Learning-omgevingen zijn een inkapseling van de omgeving waarin uw machine learning-training plaatsvindt. Ze geven de Python-pakketten, Docker-installatiekopieën, omgevingsvariabelen en software-instellingen op rond uw trainings- en scorescripts. Ze geven ook runtimes op (Python, Spark of Docker).

U kunt uw eigen omgeving definiëren of een gecureerde Azure Machine Learning-omgeving gebruiken. Gecureerde omgevingen zijn vooraf gedefinieerde omgevingen die standaard beschikbaar zijn in uw werkruimte. Deze omgevingen worden ondersteund door Docker-installatiekopieën in de cache, waardoor de taakvoorbereidingskosten worden verlaagd. Zie Gecureerde Azure Machine Learning-omgevingen voor de volledige lijst met beschikbare gecureerde omgevingen.

Voor een extern rekendoel kunt u een van deze populaire gecureerde omgevingen gebruiken om te beginnen met:

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Zie Create & use software environments in Azure Machine Learning (Softwareomgevingen maken in Azure Machine Learning) voor meer informatie en details over omgevingen.

Lokaal rekendoel

Als uw rekendoel uw lokale computer is, bent u er verantwoordelijk voor dat alle benodigde pakketten beschikbaar zijn in de Python-omgeving waarin het script wordt uitgevoerd. Gebruik python.user_managed_dependencies om uw huidige Python-omgeving te gebruiken (of de Python op het pad dat u opgeeft).

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

De scripttaakconfiguratie maken

Nu u een rekendoel hebt (my_compute_targetzie Vereisten en omgeving (myenvzie Een omgeving maken), maakt u een scripttaakconfiguratie waarmee uw trainingsscript () wordt uitgevoerd intrain.py uw project_folder directory:

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

# Set compute target
# Skip this if you are running on your local computer
script_run_config.run_config.target = my_compute_target

Als u geen omgeving opgeeft, wordt er een standaardomgeving voor u gemaakt.

Als u opdrachtregelargumenten hebt die u wilt doorgeven aan uw trainingsscript, kunt u deze opgeven via de arguments parameter van de constructor ScriptRunConfig, bijvoorbeeld arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Als u de standaard maximumtijd voor de taak wilt overschrijven, kunt u dit doen via de max_run_duration_seconds parameter . Het systeem probeert de taak automatisch te annuleren als deze langer duurt dan deze waarde.

Een gedistribueerde taakconfiguratie opgeven

Als u een gedistribueerde trainingstaak wilt uitvoeren, geeft u de gedistribueerde taakspecifieke configuratie op voor de distributed_job_config parameter . Ondersteunde configuratietypen zijn MpiConfiguration, TensorflowConfiguration en PyTorchConfiguration.

Zie voor meer informatie en voorbeelden over het uitvoeren van gedistribueerde Horovod-, TensorFlow- en PyTorch-taken:

Het experiment verzenden

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Belangrijk

Wanneer u de trainingstaak verzendt, wordt een momentopname van de map met uw trainingsscripts gemaakt en verzonden naar het rekendoel. Deze wordt ook opgeslagen als onderdeel van het experiment in uw werkruimte. Als u bestanden wijzigt en de taak opnieuw indient, worden alleen de gewijzigde bestanden geüpload.

Als u wilt voorkomen dat onnodige bestanden worden opgenomen in de momentopname, maakt u een ignore-bestand (.gitignore of .amlignore) in de map. Voeg de bestanden en mappen toe die u wilt uitsluiten van dit bestand. Zie syntaxis en patronen voor .gitignorevoor meer informatie over de syntaxis die in dit bestand moet worden gebruikt. Het .amlignore bestand gebruikt dezelfde syntaxis. Als beide bestanden bestaan, wordt het .amlignore bestand gebruikt en wordt het .gitignore niet gebruikt.

Zie Momentopnamen voor meer informatie over momentopnamen.

Belangrijk

Speciale mappen Twee mappen, uitvoer en logboeken krijgen een speciale behandeling van Azure Machine Learning. Wanneer u tijdens de training bestanden schrijft naar mappen met de naam uitvoer en logboeken die relatief zijn ten opzichte van respectievelijk de hoofdmap ( ./outputs en ./logs), worden de bestanden automatisch geüpload naar uw taakgeschiedenis, zodat u er toegang toe hebt zodra uw taak is voltooid.

Als u artefacten wilt maken tijdens de training (zoals modelbestanden, controlepunten, gegevensbestanden of getekende afbeeldingen), schrijft u deze naar de ./outputs map.

Op dezelfde manier kunt u logboeken van uw trainingstaak naar de ./logs map schrijven. Als u de TensorBoard-integratie van Azure Machine Learning wilt gebruiken, moet u uw TensorBoard-logboeken naar deze map schrijven. Terwijl uw taak wordt uitgevoerd, kunt u TensorBoard starten en deze logboeken streamen. Later kunt u ook de logboeken van een van uw vorige taken herstellen.

Als u bijvoorbeeld een bestand wilt downloaden dat naar de map outputs is geschreven naar uw lokale computer na uw externe trainingstaak: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Git-tracering en -integratie

Wanneer u een trainingstaak start waarbij de bronmap een lokale Git-opslagplaats is, wordt informatie over de opslagplaats opgeslagen in de taakgeschiedenis. Zie Git-integratie voor Azure Machine Learning voor meer informatie.

Voorbeelden van notitieblokken

Zie deze notebooks voor voorbeelden van het configureren van taken voor verschillende trainingsscenario's:

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

Problemen oplossen

  • AttributeError: het object RoundTripLoader heeft geen kenmerk 'comment_handling': deze fout is afkomstig van de nieuwe versie (v0.17.5) van ruamel-yaml, een azureml-core afhankelijkheid die een wijziging introduceert die fouten veroorzaakt in azureml-core. U kunt deze fout ruamel-yaml oplossen door een andere versie van ruamel-yamluit te voeren pip uninstall ruamel-yaml en te installeren. De ondersteunde versies zijn v0.15.35 tot v0.17.4 (inclusief). U kunt dit doen door uit te voeren pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • Taak mislukt met jwt.exceptions.DecodeError: Exact foutbericht: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Overweeg een upgrade uit te voeren naar de nieuwste versie van azureml-core: pip install -U azureml-core.

    Als u dit probleem ondervindt voor lokale taken, controleert u de versie van PyJWT die is geïnstalleerd in uw omgeving waarin u taken start. De ondersteunde versies van PyJWT zijn < 2.0.0. Verwijder PyJWT uit de omgeving als de versie = 2.0.0 is >. U kunt als volgt de versie van PyJWT controleren, en de juiste versie verwijderen en installeren:

    1. Start een opdrachtshell, activeer de Conda-omgeving waarin azureml-core is geïnstalleerd.
    2. Voer in pip freeze en zoek PyJWTnaar , als deze wordt gevonden, moet de vermelde versie 2.0.0 zijn <
    3. Als de vermelde versie geen ondersteunde versie is, pip uninstall PyJWT voert u in de opdrachtshell y in voor bevestiging.
    4. Installeren met behulp van pip install 'PyJWT<2.0.0'

    Als u een door de gebruiker gemaakte omgeving bij uw taak indient, kunt u overwegen om de nieuwste versie van azureml-core in die omgeving te gebruiken. Versies >= 1.18.0 van azureml-core maken PyJWT < 2.0.0 al vast. Als u een versie van azureml-core < 1.18.0 wilt gebruiken in de omgeving die u indient, moet u PyJWT < 2.0.0 opgeven in uw pip-afhankelijkheden.

  • ModuleErrors (geen module met de naam): Als u ModuleErrors tegenkomt tijdens het indienen van experimenten in Azure Machine Learning, verwacht het trainingsscript dat er een pakket wordt geïnstalleerd, maar wordt het niet toegevoegd. Zodra u de pakketnaam hebt opgegeven, installeert Azure Machine Learning het pakket in de omgeving die wordt gebruikt voor uw trainingstaak.

    Als u Estimators gebruikt om experimenten te verzenden, kunt u een pakketnaam of pip_packagesconda_packages parameter opgeven in de estimator op basis van de bron van waaruit u het pakket wilt installeren. U kunt ook een yml-bestand met al uw afhankelijkheden opgeven met behulp van conda_dependencies_fileof al uw PIP-vereisten weergeven in een txt-bestand met behulp van pip_requirements_file parameter. Als u uw eigen Azure Machine Learning Environment-object hebt dat u wilt overschrijven van de standaardafbeelding die wordt gebruikt door de estimator, kunt u die omgeving opgeven via de environment parameter van de estimator-constructor.

    Door Azure Machine Learning onderhouden docker-installatiekopieën en de inhoud ervan kunt u zien in Azure Machine Learning-containers. Frameworkspecifieke afhankelijkheden worden vermeld in de bijbehorende frameworkdocumentatie:

    Notitie

    Als u denkt dat een bepaald pakket vaak genoeg is om te worden toegevoegd aan door Azure Machine Learning onderhouden installatiekopieën en -omgevingen, moet u een GitHub-probleem melden in Azure Machine Learning-containers.

  • NameError (naam niet gedefinieerd), AttributeError (object heeft geen kenmerk): deze uitzondering moet afkomstig zijn van uw trainingsscripts. U kunt de logboekbestanden van Azure Portal bekijken voor meer informatie over de specifieke naam die niet is gedefinieerd of de kenmerkfout. Vanuit de SDK kunt u het run.get_details() foutbericht bekijken. Hiermee worden ook alle logboekbestanden weergegeven die voor uw taak zijn gegenereerd. Zorg ervoor dat u uw trainingsscript bekijkt en de fout oplost voordat u uw taak opnieuw indient.

  • Taak of experiment verwijderen: Experimenten kunnen worden gearchiveerd met behulp van de methode Experiment.archive of vanuit de weergave Experiment-tabblad in Azure Machine Learning-studio client via de knop 'Experiment archiveren'. Met deze actie wordt het experiment verborgen voor lijstquery's en weergaven, maar wordt het niet verwijderd.

    Permanente verwijdering van afzonderlijke experimenten of taken wordt momenteel niet ondersteund. Zie Gegevens van uw Machine Learning Service-werkruimte exporteren of verwijderen voor meer informatie over het verwijderen van werkruimte-assets.

  • Document met metrische gegevens is te groot: Azure Machine Learning heeft interne limieten voor de grootte van metrische objecten die in één keer vanuit een trainingstaak kunnen worden geregistreerd. Als er een foutbericht wordt weergegeven dat het metrische document te groot is bij het vastleggen van een metrische waarde voor een lijst, kunt u de lijst in kleinere segmenten splitsen, bijvoorbeeld:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Intern voegt Azure Machine Learning de blokken met dezelfde metrische naam samen in een aaneengesloten lijst.

  • Het duurt lang om het rekendoel te starten: de Docker-installatiekopieën voor rekendoelen worden geladen vanuit Azure Container Registry (ACR). Azure Machine Learning maakt standaard een ACR die gebruikmaakt van de servicelaag Basic . Het wijzigen van de ACR voor uw werkruimte in de Standaard- of Premium-laag kan de tijd verminderen die nodig is om afbeeldingen te bouwen en te laden. Zie Azure Container Registry-servicelagen voor meer informatie.

Volgende stappen