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 uit en het indienen van een trainingsscript. Gebruik vervolgens een van de voorbeeldnotitieblokken om de volledige end-to-end-werkvoorbeelden te vinden.

Bij het trainen is het gebruikelijk om te beginnen op uw lokale computer 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 maar 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 die uw trainingsscript bevat
  • 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 aanvullende 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

Of u kunt 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'Azure ML uw script lokaal uitvoert.

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

Notitie

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

Notitie

Als u een rekendoel wilt maken en koppelen voor training op kubernetes-cluster met Azure Arc, raadpleegt u Machine Learning met Azure Arc configureren

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 (Python, Spark of Docker) op.

U kunt uw eigen omgeving definiëren of een gecureerde Azure ML-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 kosten voor taakvoorbereiding worden verminderd. 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 Softwareomgevingen & maken in Azure Machine Learning voor meer informatie en informatie over omgevingen.

Lokaal rekendoel

Als uw rekendoel uw lokale computer is, bent u verantwoordelijk om ervoor te zorgen dat alle benodigde pakketten beschikbaar zijn in de Python-omgeving waarin het script wordt uitgevoerd. Gebruik python.user_managed_dependencies deze 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 configuratie van de scripttaak maken

Nu u een rekendoel hebt (zie Vereisten en omgevingen (myenvmy_compute_targetzie Een omgeving maken), maakt u een scripttaakconfiguratie die uw trainingsscript uitvoert (train.py) dat zich in uw project_folder directory bevindt:

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 ScriptRunConfig-constructor, 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 het langer duurt dan deze waarde.

Een configuratie van een gedistribueerde taak 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 overbodige bestanden worden opgenomen in de momentopname, maakt u een negeerbestand (.gitignore of .amlignore) in de map. Voeg de bestanden en mappen toe die u wilt uitsluiten van dit bestand. Zie syntaxis en patronen voor meer informatie over de syntaxis die .gitignorein dit bestand moet worden gebruikt. Het .amlignore bestand gebruikt dezelfde syntaxis. Als beide bestanden bestaan, wordt het .amlignore bestand gebruikt en wordt het .gitignore bestand niet gebruikt.

Zie Momentopnamen voor meer informatie over momentopnamen.

Belangrijk

Speciale mappen Twee mappen, uitvoer en logboeken, ontvangen een speciale behandeling door Azure Machine Learning. Wanneer u tijdens de training bestanden schrijft naar mappen met de naam uitvoer en logboeken die relatief zijn ten opzichte van de hoofdmap (./outputsen ./logsrespectievelijk), 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 herstellen vanuit een van uw vorige taken.

Als u bijvoorbeeld een bestand wilt downloaden dat is geschreven naar de uitvoermap 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 waarin 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.

Notebook-voorbeelden

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: 'RoundTripLoader' object heeft geen kenmerk 'comment_handling': deze fout komt van de nieuwe versie (v0.17.5) van ruamel-yaml, een azureml-core afhankelijkheid, die een belangrijke wijziging introduceert in azureml-core. Verwijder deze fout ruamel-yaml door een andere versie van ruamel-yaml; de ondersteunde versies zijn v0.15.35 naar v0.17.4 (inclusief) uit te voeren pip uninstall ruamel-yaml en te installeren. 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 conda-omgeving waarin azureml-core is geïnstalleerd.
    2. Voer in pip freeze en zoek PyJWTnaar, indien gevonden, de vermelde versie moet 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 met uw taak indient, kunt u overwegen om de nieuwste versie van azureml-core in die omgeving te gebruiken. Versions >= 1.18.0 of azureml-core already pin PyJWT < 2.0.0. Als u een versie van azureml-core < 1.18.0 wilt gebruiken in de omgeving die u verzendt, moet u PyJWT < 2.0.0 opgeven in uw pip-afhankelijkheden.

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

    Als u Estimators gebruikt om experimenten in te dienen, kunt u een pakketnaam opgeven via pip_packages of conda_packages parameter in de estimator op basis van de bron waaruit u het pakket wilt installeren. U kunt ook een yml-bestand met al uw afhankelijkheden opgeven of conda_dependencies_fileal uw pip-vereisten in een TXT-bestand weergeven met behulp van pip_requirements_file de parameter. Als u uw eigen Azure ML Environment-object hebt dat u wilt overschrijven van de standaardafbeelding die door de estimator wordt gebruikt, kunt u die omgeving opgeven via de environment parameter van de estimatorconstructor.

    In Azure ML onderhouden Docker-installatiekopieën en de inhoud ervan kunt u zien in AzureML-containers. Frameworkspecifieke afhankelijkheden worden vermeld in de respectieve frameworkdocumentatie:

    Notitie

    Als u denkt dat een bepaald pakket gebruikelijk genoeg is om te worden toegevoegd in door Azure ML onderhouden installatiekopieën en omgevingen, kunt u een GitHub-probleem in AzureML-containers veroorzaken.

  • 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 kenmerkfout. Vanuit de SDK kunt run.get_details() u het 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.

  • Verwijderen van taken of experimenten: Experimenten kunnen worden gearchiveerd met behulp van de methode Experiment.archive of vanuit de tabbladweergave Experiment 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 Uw Machine Learning Service-werkruimtegegevens exporteren of verwijderen voor meer informatie over het verwijderen van werkruimte-assets.

  • Het metrische document is te groot: Azure Machine Learning heeft interne limieten voor de grootte van metrische objecten die in één keer kunnen worden geregistreerd vanuit een trainingstaak. 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:])
    

    Azure ML voegt de blokken met dezelfde metrische-gegevensnaam intern samen tot 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 basic-servicelaag . 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