Konfigurera och skicka träningskörningar
I den här artikeln får du lära dig hur du konfigurerar och skickar Azure Machine Learning körningar för att träna dina modeller. Kodfragment förklarar de viktigaste delarna i konfigurationen och överföringen av ett träningsskript. Använd sedan någon av exempelanteckningsböckerna för att hitta de fullständiga arbetsexempel som finns från slutet till slut.
Vid träning är det vanligt att starta på den lokala datorn och sedan skala ut till ett molnbaserat kluster. Med Azure Machine Learning kan du köra skriptet på olika beräkningsmål utan att behöva ändra träningsskriptet.
Allt du behöver göra är att definiera miljön för varje beräkningsmål i en skriptkörningskonfiguration. När du sedan vill köra träningsexperimentet på ett annat beräkningsmål anger du körningskonfigurationen för beräkningen.
Förutsättningar
- Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag
- Den Azure Machine Learning SDK för Python (>= 1.13.0)
- En Azure Machine Learning arbetsyta,
ws - Ett beräkningsmål,
my_compute_target. Skapa ett beräkningsmål
Vad är en skriptkörningskonfiguration?
En ScriptRunConfig används för att konfigurera den information som krävs för att skicka en träningskörning som en del av ett experiment.
Du skickar träningsexperimentet med ett ScriptRunConfig-objekt. Det här objektet innehåller:
- source_directory: Källkatalogen som innehåller ditt träningsskript
- script: Träningsskriptet som ska köras
- compute_target: Beräkningsmålet som ska köras på
- environment: Miljön som ska användas när skriptet körs
- och några ytterligare konfigurerbara alternativ (mer information finns i referensdokumentationen)
Träna modellen
Kodmönstret för att skicka en träningskörning är detsamma för alla typer av beräkningsmål:
- Skapa ett experiment att köra
- Skapa en miljö där skriptet ska köras
- Skapa en ScriptRunConfig som anger beräkningsmålet och -miljön
- Skicka körningen
- Vänta tills körningen har slutförts
Eller så kan du:
- Skicka en HyperDrive-körning för justering av hyperparametrar.
- Skicka ett experiment via VS Code-tillägget.
Skapa ett experiment
Skapa ett experiment på din arbetsyta. En experiemnt är en lättviktscontainer som hjälper till att organisera körningar och hålla reda på kod.
from azureml.core import Experiment
experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)
Välj ett beräkningsmål
Välj det beräkningsmål där träningsskriptet ska köras. Om inget beräkningsmål anges i ScriptRunConfig, eller om compute_target='local' , kör Azure ML köra skriptet lokalt.
Exempelkoden i den här artikeln förutsätter att du redan har skapat ett my_compute_target beräkningsmål från avsnittet "Förutsättningar".
Anteckning
Azure Databricks stöds inte som beräkningsmål för modellträning. Du kan använda Azure Databricks för förberedelse och distribution av data.
Anteckning
Information om hur du skapar och kopplar ett beräkningsmål för träning i Azure Arc-aktiverade Kubernetes-kluster finns i Konfigurera Azure Arc-aktiverade Machine Learning
Skapa en miljö
Azure Machine Learning miljöer är en inkapsling av miljön där maskininlärningsträningen sker. De anger Python-paket, Docker-avbildningar, miljövariabler och programvaruinställningar runt dina tränings- och bedömningsskript. De anger också körningar (Python, Spark eller Docker).
Du kan antingen definiera din egen miljö eller använda en Azure ML-hanterad miljö. Curated Environments är fördefinierade miljöer som är tillgängliga på din arbetsyta som standard. Dessa miljöer backas upp av cachelagrade Docker-avbildningar, vilket minskar kostnaden för körningsförberedelser. Se Azure Machine Learning för en fullständig lista över tillgängliga, curated environments (tillgängliga curated environments).
För ett fjärrbearbetningsmål kan du använda någon av dessa populära curated-miljöer till att börja med:
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
Mer information och information om miljöer finns i Skapa & använda programvarumiljöer i Azure Machine Learning.
Lokalt beräkningsmål
Om beräkningsmålet är din lokala dator ansvarar du för att se till att alla nödvändiga paket är tillgängliga i Python-miljön där skriptet körs. Använd python.user_managed_dependencies för att använda din aktuella Python-miljö (eller Python på den sökväg som du anger).
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'
Skapa skriptkörningskonfigurationen
Nu när du har ett beräkningsmål ( , se Krav och miljö ( , se Skapa en miljö ), skapa en skriptkörningskonfiguration som kör ditt träningsskript ( ) som my_compute_target finns i din myenv train.py project_folder katalog:
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
Om du inte anger någon miljö skapas en standardmiljö åt dig.
Om du har kommandoradsargument som du vill skicka till träningsskriptet kan du ange dem via parametern för arguments ScriptRunConfig-konstruktorn, t.ex. arguments=['--arg1', arg1_val, '--arg2', arg2_val] .
Om du vill åsidosätta den högsta standardtid som tillåts för körningen kan du göra det via max_run_duration_seconds parametern . Systemet försöker automatiskt avbryta körningen om det tar längre tid än det här värdet.
Ange en konfiguration för distribuerat jobb
Om du vill köra ett distribuerat träningsjobb anger du den distribuerade jobbspecifika konfigurationskonfigurationen till distributed_job_config parametern . Konfigurationstyper som stöds är MpiConfiguration, TensorflowConfigurationoch PyTorchConfiguration.
Mer information och exempel på hur du kör distribuerade Horovod-, TensorFlow- och PyTorch-jobb finns i:
Skicka experimentet
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Viktigt
När du skickar träningskörningen skapas en ögonblicksbild av katalogen som innehåller dina träningsskript och skickas till beräkningsmålet. Den lagras också som en del av experimentet på din arbetsyta. Om du ändrar filer och skickar körningen igen laddas bara de ändrade filerna upp.
Du kan förhindra att onödiga filer tas med i ögonblicks bilden genom att göra en IGNORE-fil ( .gitignore eller .amlignore ) i katalogen. Lägg till de filer och kataloger som ska undantas i den här filen. Mer information om vilken syntax som ska användas i den här filen finns i syntax och mönster för .gitignore . .amlignoreFilen använder samma syntax. Om båda filerna finns .amlignore används filen och .gitignore filen är inte används.
Mer information om ögonblicksbilder finns i Ögonblicksbilder.
Viktigt
Särskilda mappar Två mappar, utdata och loggar, behandlas särskilt av Azure Machine Learning. När du under träningen skriver filer till mappar med namnet outputs och loggar som är relativa till rotkatalogen ( respektive ), laddas filerna automatiskt upp till din körningshistorik så att du har åtkomst till dem när körningen är ./outputs ./logs klar.
Om du vill skapa artefakter under träningen (till exempel modellfiler, kontrollpunkter, datafiler eller ritade bilder) skriver du dessa till ./outputs mappen.
På samma sätt kan du skriva loggar från träningskörningen till ./logs mappen . Om du Azure Machine Learning TensorBoard-integreringen skriver du TensorBoard-loggarna till den här mappen. Medan körningen pågår kan du starta TensorBoard och strömma loggarna. Senare kommer du också att kunna återställa loggarna från någon av dina tidigare körningar.
Om du till exempel vill ladda ned en fil som skrivits till utdatamappen till den lokala datorn efter din fjärrträningskörning: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
Git-spårning och -integrering
När du startar en träningskörning där källkatalogen är en lokal Git-lagringsplats lagras information om lagringsplatsen i körningshistoriken. Mer information finns i Git-integrering för Azure Machine Learning.
Notebook-exempel
I dessa notebook-datorer finns exempel på hur du konfigurerar körningar för olika träningsscenarier:
- Träning på olika beräkningsmål
- Utbildning med ML ramverk
- tutorials/img-classification-part1-training.ipynb
Lär dig att köra notebook-filer genom att följa artikeln Använda Jupyter-notebooks till att utforska tjänsten.
Felsökning
AttributeError: 'RoundTripLoader'-objektet har inget attribut "comment_handling": Det här felet kommer från den nya versionen (v0.17.5) av , ett beroende som introducerar en större ändring
ruamel-yamliazureml-coreazureml-core. För att åtgärda det här felet avinstallerar du genom att köra och installera en annan version av . De versioner som stöds ärruamel-yamlpip uninstall ruamel-yamlruamel-yamlv0.15.35 till v0.17.4 (inklusive). Du kan göra detta genom att körapip install "ruamel-yaml>=0.15.35,<0.17.5".Körningen
jwt.exceptions.DecodeErrormisslyckas med : Exakt felmeddelande:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().Överväg att uppgradera till den senaste versionen av azureml-core:
pip install -U azureml-core.Om det här problemet uppstår för lokala körningar kontrollerar du vilken version av PyJWT som är installerad i din miljö där du startar körningar. De versioner av PyJWT som stöds < 2.0.0. Avinstallera PyJWT från miljön om versionen är >= 2.0.0. Du kan kontrollera versionen av PyJWT, avinstallera och installera rätt version på följande sätt:
- Starta ett kommandogränssnitt, aktivera conda-miljön där azureml-core är installerat.
- Ange
pip freezeoch sök efter , om den finns ska den version som anges vara <PyJWT2.0.0 - Om den angivna versionen inte stöds anger du y för bekräftelse
pip uninstall PyJWTi kommandogränssnittet. - Installera med
pip install 'PyJWT<2.0.0'
Om du skickar en användarskapad miljö med din körning bör du överväga att använda den senaste versionen av azureml-core i den miljön. Versioner >= 1.18.0 av azureml-core fäster redan PyJWT < 2.0.0. Om du behöver använda en version av azureml-core < 1.18.0 i den miljö som du skickar ska du ange PyJWT < 2.0.0 i dina pip-beroenden.
ModuleErrors (ingen modul med namnet): Om du kör på ModuleErrors när du skickar experiment i Azure ML förväntar sig träningsskriptet att ett paket ska installeras, men det läggs inte till. När du anger paketnamnet installerar Azure ML paketet i den miljö som används för din träningskörning.
Om du använder beräknare för att skicka experiment kan du ange ett paketnamn via eller parameter i beräkningsfilen baserat på vilken källa du vill
pip_packagesconda_packagesinstallera paketet från. Du kan också ange en yml-fil med alla dina beroenden med hjälp av eller lista alla dina pip-krav iconda_dependencies_fileen txt-fil medpip_requirements_fileparametern . Om du har ett eget Azure ML Environment-objekt som du vill åsidosätta standardavbildningen som används av beräkningsobjektet kan du ange den miljön via parametern förenvironmentberäkningskonstruktorn.Azure ML docker-avbildningar och deras innehåll kan ses i AzureML-containrar. Ramverksspecifika beroenden visas i respektive ramverksdokumentation:
Anteckning
Om du tror att ett visst paket är tillräckligt vanligt för att läggas till i Azure ML underhålls avbildningar och miljöer bör du skapa ett GitHub i AzureML-containrar.
NameError (inget namn har definierats), AttributeError (objektet har inget attribut): Det här undantaget bör komma från dina träningsskript. Du kan titta på loggfilerna från Azure Portal för att få mer information om det specifika namnet som inte har definierats eller attributfel. Från SDK:n kan du
run.get_details()använda för att titta på felmeddelandet. Då visas även en lista över alla loggfiler som genererats för körningen. Se till att ta en titt på träningsskriptet och åtgärda felet innan du skickar körningen igen.Borttagning av körning eller experiment: Experiment kan arkiveras med hjälp av metoden Experiment.archive eller från fliken Experiment i Azure Machine Learning Studio-klienten via knappen Arkivexperiment. Den här åtgärden döljer experimentet från listfrågor och vyer, men tar inte bort det.
Permanent borttagning av enskilda experiment eller körningar stöds för närvarande inte. Mer information om hur du tar bort arbetsytans tillgångar finns i Exportera eller ta bort Machine Learning data för arbetsytor i tjänsten.
Måttdokumentet är för stort: Azure Machine Learning har interna gränser för storleken på måttobjekt som kan loggas samtidigt från en träningskörning. Om du ser felet ”Måttdokumentet är för stort” när ett mått med listor som värdetyp kan du prova att dela upp listan i mindre segment, till exempel:
run.log_list("my metric name", my_metric[:N]) run.log_list("my metric name", my_metric[N:])Internt sammanfogar Azure ML blocken med samma måttnamn i en sammanhängande lista.
Beräkningsmålet tar lång tid att starta: Docker-avbildningarna för beräkningsmål läses in från Azure Container Registry (ACR). Som standard Azure Machine Learning en ACR som använder den grundläggande tjänstnivån. Om du ändrar ACR för din arbetsyta till standard- eller premiumnivån kan det minska den tid det tar att skapa och läsa in avbildningar. Mer information finns i Azure Container Registry tjänstnivåer.
Nästa steg
- Självstudie: Träna en modell använder ett hanterat beräkningsmål för att träna en modell.
- Se hur du tränar modeller ML specifika ramverk, till exempel Scikit-learn, TensorFlowoch PyTorch.
- Lär dig hur du effektivt finjusterar hyperparametrar för att skapa bättre modeller.
- När du har en tränad modell kan du lära dig hur och var du distribuerar modeller.
- Visa SDK-referensen för ScriptRunConfig-klassen.
- Använda Azure Machine Learning med virtuella Azure-nätverk