Trainingsuitvoering configureren en verzenden

In dit artikel leert u hoe u de uitvoeringen kunt configureren en Azure Machine Learning om uw modellen te trainen. Codefragmenten geven uitleg over de belangrijkste onderdelen van de configuratie en het indienen van een trainingsscript. Gebruik vervolgens een van de voorbeeldnote notebooks om de volledige end-to-end werkende voorbeelden te vinden.

Tijdens de training 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 moet wijzigen.

Het enige wat u hoeft te doen, is de omgeving definiëren voor elk rekendoel binnen een scriptuit voerconfiguratie. Als u vervolgens uw trainingsexperiment wilt uitvoeren op een ander rekendoel, geeft u de uitvoeringsconfiguratie voor die berekening op.

Vereisten

Wat is een configuratie voor het uitvoeren van scripts?

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

U dient uw trainingsexperiment in met een ScriptRunConfig-object. Dit object bevat de:

  • source_directory: de bronmap met uw trainingsscript
  • script: het trainingsscript dat moet worden uitgevoerd
  • compute_target: het rekendoel om op uit te voeren
  • environment: 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 trainingsuitje 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 run verzenden
  5. Wacht tot de run is voltooid

U kunt ook het volgende doen:

Een experiment maken

Maak een experiment in uw werkruimte. Een expent is een lichtgewicht container die helpt bij het organiseren van inzendingen 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 , wordt compute_target='local' uw script lokaal ML azure-ML uitgevoerd.

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

Notitie

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

Notitie

Zie Configure Azure Arc-enabled Azure Arc (Een rekendoel maken en koppelen voor training op een Kubernetes-cluster met Azure Arc-Machine Learning

Een omgeving maken

Azure Machine Learning omgevingen zijn een inkapsing van de omgeving waarin uw machine learning training wordt gevolgd. Ze geven de Python-pakketten, Docker-afbeelding, 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 door Azure ML gecureerde omgeving gebruiken. Gecureerde omgevingen zijn vooraf gedefinieerde omgevingen die standaard beschikbaar zijn in uw werkruimte. Deze omgevingen vallen onder in de cache opgeslagen Docker-installatiekopieën, wat de kosten voor de uitvoeringsvoorbereiding vermindert. 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:

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 voor meer informatie over omgevingen.

Lokaal rekendoel

Als uw rekendoel uw lokale computer is, bent u verantwoordelijk voor het zorgen 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 configuratie voor het uitvoeren van het script maken

Nu u een rekendoel hebt ( , zie Vereisten en omgeving ( , zie Een omgeving maken ), maakt u een scriptrunconfiguratie waarin uw trainingsscript ( ) wordt uitgevoerd my_compute_target in uw myenv train.py project_folder map:

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 parameter van de arguments ScriptRunConfig-constructor, bijvoorbeeld arguments=['--arg1', arg1_val, '--arg2', arg2_val] .

Als u de standaard maximale tijd die is toegestaan voor de run wilt overschrijven, kunt u dit doen via de max_run_duration_seconds parameter . Het systeem probeert de run automatisch te annuleren als het langer duurt dan deze waarde.

Een gedistribueerde taakconfiguratie opgeven

Als u een gedistribueerde trainings job wilt uitvoeren, geeft u de gedistribueerde taakspecifieke configuratie op voor de distributed_job_config parameter . Ondersteunde configuratietypen zijn MpiConfiguration, TensorflowConfigurationen 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 trainingsrun indient, wordt er 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 run opnieuw indient, worden alleen de gewijzigde bestanden geüpload.

Als u wilt voor komen dat er onnodige bestanden in de moment opname worden opgenomen, moet u een bestand ( .gitignore of .amlignore ) in de map negeren. Voeg de bestanden en mappen toe die u wilt uitsluiten van dit bestand. Zie syntaxis en patronen voor voor meer informatie over de syntaxis die in dit bestand moet worden gebruikt .gitignore . Het .amlignore bestand gebruikt dezelfde syntaxis. Als beide bestanden bestaan, .amlignore wordt het bestand gebruikt en .gitignore wordt het bestand ongebruikt.

Zie Momentopnamen voor meer informatie over momentopnamen.

Belangrijk

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

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

Op dezelfde manier kunt u logboeken van uw trainingsrun naar de map ./logs schrijven. Als u Azure Machine Learning tensorBoard-integratie van Azure Machine Learning, moet u uw TensorBoard-logboeken naar deze map schrijven. Terwijl de uitvoering wordt uitgevoerd, kunt u TensorBoard starten en deze logboeken streamen. Later kunt u ook de logboeken herstellen vanuit een van de vorige runs.

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

Git-tracering en -integratie

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

Notebookvoorbeelden

Zie deze notebooks voor voorbeelden van het configureren van runs 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 , een afhankelijkheid, die een wijziging introduceert die fouten veroorzaakt ruamel-yaml azureml-core in azureml-core . Als u deze fout wilt oplossen, verwijdert u de installatie door een andere versie van uit te voer en te installeren. De ondersteunde versies zijn ruamel-yaml pip uninstall ruamel-yaml ruamel-yaml v0.15.35 tot en met v0.17.4 (inclusief). U kunt dit doen door uit te pip install "ruamel-yaml>=0.15.35,<0.17.5" gaan.

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

    U kunt upgraden naar de nieuwste versie van azureml-core: pip install -U azureml-core .

    Als u met dit probleem te maken hebt bij lokale uitvoeringen, controleert u de versie van PyJWT die is geïnstalleerd in uw omgeving waar u de uitvoeringen start. De ondersteunde versies van PyJWT zijn < 2.0.0. Verwijder PyJWT uit de omgeving als de versie >= 2.0.0. U kunt als volgt de versie van PyJWT controleren, de juiste versie verwijderen en installeren:

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

    Als u een door de gebruiker gemaakte omgeving indient bij uw uitvoering, kunt u overwegen de nieuwste versie van azureml-core in die omgeving te gebruiken. Versies >= 1.18.0 van azureml-core maken PyJWT al vast < 2.0.0. Als u een versie van azureml-core < 1.18.0 moet 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 tegen komt tijdens het verzenden van experimenten in Azure ML, verwacht het trainingsscript dat er een pakket wordt geïnstalleerd, maar dat pakket niet wordt toegevoegd. Nadat u de pakketnaam hebt ML installeert Azure ML in de omgeving die wordt gebruikt voor de trainingsrun.

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

    Azure ML docker-afbeeldingen en de inhoud ervan zijn te zien in AzureML Containers. Frameworkspecifieke afhankelijkheden worden vermeld in de respectieve frameworkdocumentatie:

    Notitie

    Als u denkt dat een bepaald pakket algemeen genoeg is om te worden toegevoegd aan Azure ML onderhouden afbeeldingen en omgevingen, moet u een probleem GitHub in AzureML Containers.

  • NameError (naam niet gedefinieerd), AttributeError (object heeft geen kenmerk) : deze uitzondering moet afkomstig zijn van uw trainingsscripts. U kunt de logboekbestanden van de Azure Portal voor meer informatie over de specifieke naam die niet is gedefinieerd of een kenmerkfout. Vanuit de SDK kunt u gebruiken om run.get_details() het foutbericht te bekijken. Hiermee worden ook alle logboekbestanden weergegeven die voor uw run zijn gegenereerd. Bekijk het trainingsscript en los de fout op voordat u de run opnieuw inzendt.

  • Uitvoeren of experiment verwijderen: experimenten kunnen worden gearchiveerd met behulp van de methode Experiment.archive of via de knop Archive experiment op het tabblad Experiment in Azure Machine Learning Studio-client. Met deze actie verbergt u het experiment in lijstquery's en weergaven, maar wordt het niet verwijderd.

    Het definitief verwijderen van afzonderlijke experimenten of uitvoeringen wordt momenteel niet ondersteund. Zie Uw werkruimtegegevens exporteren of verwijderen Machine Learning service voor meer informatie over het verwijderen van werkruimte-assets.

  • Document met metrische gegevens is te groot: Azure Machine Learning interne limieten heeft voor de grootte van metrische objecten die in één keer kunnen worden vastgelegd tijdens een trainingsrun. 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-afbeeldingen voor rekendoelen worden vanuit Azure Container Registry (ACR) geladen. Standaard maakt Azure Machine Learning een ACR die gebruikmaakt van de basic-servicelaag. Het wijzigen van de ACR voor uw werkruimte in de Standard- of Premium-laag kan de tijd verminderen die nodig is om afbeeldingen te bouwen en te laden. Zie servicelagen Azure Container Registry meer informatie.

Volgende stappen