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 verklaren de belangrijkste onderdelen van de configuratie en het verzenden van een trainingsscript. Gebruik vervolgens een van de voorbeeldnotebooks om de volledige end-to-end-werkvoorbeelden te vinden.

Bij het trainen is het gebruikelijk om op uw lokale computer te beginnen en later uit te schalen naar een cluster in de cloud. 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 in 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 verzenden van een trainingstaak als onderdeel van een experiment.

U dient uw trainingsexperiment in 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 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 dat moet worden uitgevoerd
  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.

VAN TOEPASSING OP: Python SDK azureml v1

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 Machine Learning 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.
  • Als u een rekendoel wilt maken en koppelen voor training op Kubernetes-cluster met Azure Arc, raadpleegt u Machine Learning configureren 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 kosten voor het voorbereiden van taken worden verminderd. Zie Azure Machine Learning Gecureerde 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:

VAN TOEPASSING OP: Python SDK azureml v1

from azureml.core import Workspace, Environment

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

Zie Softwareomgevingen maken en gebruiken in Azure Machine Learning voor meer informatie en informatie over omgevingen.

Lokaal rekendoel

Als uw rekendoel uw lokale computer is, bent u verantwoordelijk voor het controleren of alle benodigde pakketten beschikbaar zijn in de Python-omgeving waar 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).

VAN TOEPASSING OP: Python SDK azureml v1

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 omgeving (myenvzie Een omgeving maken), maakt u een scripttaakconfiguratie waarmee uw trainingsscript (train.py) in uw project_folder directory wordt uitgevoerd:my_compute_target

VAN TOEPASSING OP: Python SDK azureml v1

from azureml.core import ScriptRunConfig

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

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

Als u opdrachtregelargumenten hebt die u aan uw trainingsscript wilt doorgeven, 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

VAN TOEPASSING OP: Python SDK azureml v1

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. Het 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 genegeerd bestand (.gitignore of .amlignore) in de map. Voeg de bestanden en mappen toe die u wilt uitsluiten van dit bestand. Zie de syntaxis en patronen voor .gitignoremeer 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 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./logs, respectievelijk), 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 de logboeken ook herstellen vanuit een van uw vorige taken.

Als u bijvoorbeeld een bestand wilt downloaden dat naar de uitvoermap naar uw lokale computer wordt geschreven 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.

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

Probleemoplossing

  • AttributeError: 'RoundTripLoader' object 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 belangrijke wijziging introduceert in azureml-core. Als u deze fout wilt oplossen, verwijdert u de installatie ruamel-yaml door pip uninstall ruamel-yaml een andere versie van ruamel-yaml; de ondersteunde versies zijn v0.15.35 naar 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.

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

    1. Start een opdrachtshell, activeer conda-omgeving waar azureml-core is geïnstalleerd.
    2. Voer pip freeze 2.0.0.0 in en zoek dezePyJWT, indien gevonden.<
    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'

    if. U verzendt een door de gebruiker gemaakte omgeving met uw taak. Overweeg 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): If. Tijdens het verzenden van experimenten in Azure Machine Learning verwacht het trainingsscript dat er een pakket wordt geïnstalleerd, maar het wordt niet toegevoegd. Nadat u de pakketnaam hebt opgegeven, installeert Azure Machine Learning het pakket in de omgeving die wordt gebruikt voor uw trainingstaak.

    if. u estimators gebruikt om experimenten in te dienen. U kunt een pakketnaam opgeven via pip_packages of conda_packages parameter in de estimator op basis van de bron van waaruit u het pakket wilt installeren. U kunt ook een yml-bestand opgeven met al uw afhankelijkheden met behulp van conda_dependencies_fileof een lijst weergeven van al uw pip-vereisten in een TXT-bestand met behulp van pip_requirements_file de parameter. Als u uw eigen Azure Machine Learning Environment-object hebt dat u wilt overschrijven van de standaardinstallatiekopieën die door de estimator worden gebruikt, kunt u die omgeving opgeven via de environment parameter van de estimatorconstructor.

    Docker-installatiekopieën van Azure Machine Learning en hun inhoud zijn te zien in Azure Machine Learning-containers. Frameworkspecifieke afhankelijkheden worden vermeld in de respectieve frameworkdocumentatie:

    Notitie

    Als u denkt dat een bepaald pakket gebruikelijk genoeg is om te worden toegevoegd aan door Azure Machine Learning onderhouden installatiekopieën en omgevingen, moet u een GitHub-probleem in Azure Machine Learning-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 een kenmerkfout. Vanuit de SDK kunt u het run.get_details() foutbericht bekijken. Hiermee worden ook alle logboekbestanden weergegeven die voor uw taak zijn gegenereerd. Bekijk uw trainingsscript en los de fout op voordat u de 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 Archiefexperiment. 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 Werkruimtegegevens voor Machine Learning Service exporteren of verwijderen voor meer informatie over het verwijderen van werkruimteassets.

  • Het metrische document is te groot: Azure Machine Learning heeft interne limieten voor de grootte van metrische objecten die tegelijk 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:])
    

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

  • Het duurt lang voordat het rekendoel wordt gestart: 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