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
- Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning
- De Azure Machine Learning SDK voor Python (v1) (>= 1.13.0)
- Een Azure Machine Learning-werkruimte,
ws
- Een rekendoel,
my_compute_target
. Een rekendoel maken
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:
- Een experiment maken dat moet worden uitgevoerd
- Een omgeving maken waarin het script wordt uitgevoerd
- Een ScriptRunConfig maken, waarmee het rekendoel en de omgeving worden opgegeven
- De taak verzenden
- Wacht tot de taak is voltooid
U kunt ook het volgende doen:
- Verzend een HyperDrive-uitvoering voor het afstemmen van hyperparameters.
- Dien een experiment in via de VS Code-extensie.
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 (myenv
zie 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 .gitignore
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
bestand niet gebruikt.
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 (./outputs
en./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:
- Training over verschillende rekendoelen
- Training met ML-frameworks
- tutorials/img-classification-part1-training.ipynb
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
, eenazureml-core
afhankelijkheid, die een belangrijke wijziging introduceert inazureml-core
. Als u deze fout wilt oplossen, verwijdert u de installatieruamel-yaml
doorpip uninstall ruamel-yaml
een andere versie vanruamel-yaml
; de ondersteunde versies zijn v0.15.35 naar v0.17.4 (inclusief). U kunt dit doen door uit te voerenpip 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:
- Start een opdrachtshell, activeer conda-omgeving waar azureml-core is geïnstalleerd.
- Voer
pip freeze
2.0.0.0 in en zoek dezePyJWT
, indien gevonden.< - Als de vermelde versie geen ondersteunde versie is,
pip uninstall PyJWT
voert u in de opdrachtshell y in voor bevestiging. - 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
ofconda_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 vanconda_dependencies_file
of een lijst weergeven van al uw pip-vereisten in een TXT-bestand met behulp vanpip_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 deenvironment
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
- Zelfstudie: Een model trainen en implementeren maakt gebruik van een beheerd rekendoel om een model te trainen.
- Bekijk hoe u modellen traint met specifieke ML-frameworks, zoals Scikit-learn, TensorFlow en PyTorch.
- Leer hoe u hyperparameters efficiënt kunt afstemmen om betere modellen te bouwen.
- Zodra u een getraind model hebt, leert u hoe en waar u modellen kunt implementeren.
- Bekijk de naslaginformatie over de ScriptRunConfig-klasse-SDK .
- Azure Machine Learning gebruiken met Azure Virtual Networks