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

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:

  1. Skapa ett experiment att köra
  2. Skapa en miljö där skriptet ska köras
  3. Skapa en ScriptRunConfig som anger beräkningsmålet och -miljön
  4. Skicka körningen
  5. Vänta tills körningen har slutförts

Eller så kan du:

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:

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-yaml i azureml-core azureml-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 är ruamel-yaml pip uninstall ruamel-yaml ruamel-yaml v0.15.35 till v0.17.4 (inklusive). Du kan göra detta genom att köra pip install "ruamel-yaml>=0.15.35,<0.17.5" .

  • Körningen jwt.exceptions.DecodeError misslyckas 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:

    1. Starta ett kommandogränssnitt, aktivera conda-miljön där azureml-core är installerat.
    2. Ange pip freeze och sök efter , om den finns ska den version som anges vara < PyJWT 2.0.0
    3. Om den angivna versionen inte stöds anger du y för bekräftelse pip uninstall PyJWT i kommandogränssnittet.
    4. 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_packages conda_packages installera paketet från. Du kan också ange en yml-fil med alla dina beroenden med hjälp av eller lista alla dina pip-krav i conda_dependencies_file en txt-fil med pip_requirements_file parametern . 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ör environment berä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