Konfigurera och skicka träningsjobb

GÄLLER FÖR:Python SDK azureml v1

I den här artikeln får du lära dig hur du konfigurerar och skickar Azure Machine Learning-jobb 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 ett av exempelanteckningsböckerna för att hitta de fullständiga arbetsexemplen från slutpunkt till slutpunkt.

När du tränar är det vanligt att börja på den lokala datorn och sedan skala ut till ett molnbaserat kluster senare. 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 skriptjobbkonfiguration. När du sedan vill köra träningsexperimentet på ett annat beräkningsmål anger du jobbkonfigurationen för den 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 ett träningsjobb 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å
  • miljö: Den miljö som ska användas när skriptet körs
  • och några ytterligare konfigurerbara alternativ (se referensdokumentationen för mer information)

Träna din modell

Kodmönstret för att skicka ett träningsjobb är detsamma för alla typer av beräkningsmål:

  1. Skapa ett experiment som ska köras
  2. Skapa en miljö där skriptet körs
  3. Skapa en ScriptRunConfig som anger beräkningsmål och miljö
  4. Skicka jobbet
  5. Vänta tills jobbet är klart

Eller så kan du:

Skapa ett experiment

Skapa ett experiment på din arbetsyta. Ett experiment är en lättviktscontainer som hjälper till att organisera jobbinlämningar och hålla reda på kod.

GÄLLER FÖR:Python SDK azureml v1

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 Machine Learning skriptet lokalt.

Exempelkoden i den här artikeln förutsätter att du redan har skapat ett beräkningsmål my_compute_target från avsnittet Förutsättningar.

Kommentar

  • Azure Databricks stöds inte som beräkningsmål för modellträning. Du kan använda Azure Databricks för dataförberedelser och distributionsuppgifter.
  • 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-aktiverad 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-avbildning, miljövariabler och programvaruinställningar kring dina tränings- och bedömningsskript. De anger även körning (Python, Spark eller Docker).

Du kan antingen definiera din egen miljö eller använda en Azure Machine Learning-kuraterad miljö. Utvalda miljöer ä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 jobbförberedelse. Se Azure Machine Learning-kurerade miljöer för en fullständig lista över tillgängliga utvalda miljöer.

För ett fjärrberäkningsmål kan du använda en av dessa populära utvalda miljöer till att börja med:

GÄLLER FÖR:Python SDK azureml v1

from azureml.core import Workspace, Environment

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

Mer information om miljöer finns i Skapa och 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).

GÄLLER FÖR: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'

Skapa skriptjobbkonfigurationen

Nu när du har ett beräkningsmål (se Krav och miljö (myenvse Skapa en miljö) skapar du en skriptjobbkonfiguration som kör träningsskriptet (train.py) som finns i katalogenproject_folder:my_compute_target

GÄLLER FÖR: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)

Om du inte anger en miljö skapas en standardmiljö åt dig.

Om du har kommandoradsargument som du vill skicka till träningsskriptet kan du ange dem via parametern arguments för SkriptRunConfig-konstruktorn, arguments=['--arg1', arg1_val, '--arg2', arg2_val]till exempel .

Om du vill åsidosätta den maximala standardtid som tillåts för jobbet kan du göra det via parametern max_run_duration_seconds . Systemet försöker automatiskt avbryta jobbet om det tar längre tid än det här värdet.

Ange en konfiguration av distribuerat jobb

Om du vill köra ett distribuerat träningsjobb anger du den distribuerade jobbspecifika konfigurationen till parametern distributed_job_config . Konfigurationstyper som stöds är MpiConfiguration, TensorflowConfiguration och PyTorchConfiguration.

Mer information och exempel på hur du kör distribuerade Horovod-, TensorFlow- och PyTorch-jobb finns i:

Skicka experimentet

GÄLLER FÖR:Python SDK azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Viktigt!

När du skickar träningsjobbet 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 jobbet igen laddas bara de ändrade filerna upp.

Om du vill förhindra att onödiga filer tas med i ögonblicksbilden skapar du en ignorerande fil (.gitignore eller .amlignore) i katalogen. Lägg till de filer och kataloger som ska undantas i den här filen. Mer information om syntaxen som ska användas i den här filen finns i syntax och mönster för .gitignore. Filen .amlignore använder samma syntax. Om båda filerna finns .amlignore används filen och .gitignore filen används inte.

Mer information om ögonblicksbilder finns i Ögonblicksbilder.

Viktigt!

Specialmappar Två mappar, utdata och loggar, får särskild behandling av Azure Machine Learning. När du under träningen skriver filer till mappar med namnet outputs och loggar som är relativa till rotkatalogen (./outputs respektive ./logs) laddas filerna automatiskt upp till jobbhistoriken så att du får åtkomst till dem när jobbet är klart.

Om du vill skapa artefakter under träning (till exempel modellfiler, kontrollpunkter, datafiler eller ritade bilder) skriver du dessa till ./outputs mappen.

På samma sätt kan du skriva alla loggar från ditt träningsjobb till ./logs mappen . Om du vill använda TensorBoard-integreringen i Azure Machine Learning måste du skriva TensorBoard-loggarna till den här mappen. Medan jobbet pågår kan du starta TensorBoard och strömma loggarna. Senare kommer du också att kunna återställa loggarna från något av dina tidigare jobb.

Om du till exempel vill ladda ned en fil som skrivits till mappen outputs till din lokala dator efter fjärrträningsjobbet: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Git-spårning och integrering

När du startar ett träningsjobb där källkatalogen är en lokal Git-lagringsplats lagras information om lagringsplatsen i jobbhistoriken. Mer information finns i Git-integrering för Azure Machine Learning.

Notebook-exempel

I de här notebook-filerna finns exempel på hur du konfigurerar jobb 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 ruamel-yaml, ett azureml-core beroende, som introducerar en icke-bakåtkompatibel ändring till azureml-core. För att åtgärda det här felet avinstallerar ruamel-yaml du genom att köra pip uninstall ruamel-yaml och installera en annan version av ruamel-yaml. De versioner som stöds är 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".

  • Jobbet misslyckas med jwt.exceptions.DecodeError: 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. om du stöter på det här problemet för lokala jobb kontrollerar du vilken version av PyJWT som är installerad i din miljö där . du startar jobb. De versioner av PyJWT som stöds är < 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 och aktivera conda-miljön där azureml-core är installerat.
    2. Ange pip freeze och leta PyJWTefter , om det hittas bör den version som anges vara < 2.0.0
    3. Om den angivna versionen inte är en version som stöds går pip uninstall PyJWT du till kommandogränssnittet och anger y för bekräftelse.
    4. Installera med pip install 'PyJWT<2.0.0'

    Om. Du skickar en användarskapad miljö med ditt jobb. Överväg 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 måste du ange PyJWT < 2.0.0 i dina pip-beroenden.

  • ModuleErrors (ingen modul med namnet): Om . du stöter på ModuleErrors när du skickar experiment i Azure Machine Learning, men träningsskriptet förväntar sig att ett paket installeras men det läggs inte till. När du har angett paketnamnet installerar Azure Machine Learning paketet i den miljö som används för ditt träningsjobb.

    Om. du använder Estimators för att skicka experiment kan du ange ett paketnamn via pip_packages eller conda_packages parameter i uppskattningen baserat på vilken källa du vill installera paketet från. Du kan också ange en yml-fil med alla dina beroenden med hjälp av conda_dependencies_fileeller lista alla dina pip-krav i en txt-fil med hjälp av pip_requirements_file parametern . Om du har ett eget Azure Machine Learning Environment-objekt som du vill åsidosätta standardbilden som används av skattaren kan du ange den miljön via parametern environment för beräkningskonstruktorn.

    Azure Machine Learning underhålls docker-avbildningar och deras innehåll kan ses i Azure Machine Learning-containrar. Ramverksspecifika beroenden visas i respektive ramverksdokumentation:

    Kommentar

    Om du tror att ett visst paket är tillräckligt vanligt för att läggas till i Azure Machine Learning-underhållna avbildningar och miljöer skapar du ett GitHub-problem i Azure Machine Learning Containers.

  • NameError (namn har inte 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-portalen för att få mer information om det specifika namnet som inte har definierats eller attributfelet. Från SDK kan du använda run.get_details() för att titta på felmeddelandet. Då visas även alla loggfiler som genererats för jobbet. Se till att ta en titt på träningsskriptet och åtgärda felet innan du lägger till jobbet igen.

  • Jobb- eller experimentborttagning: Experiment kan arkiveras med hjälp av metoden Experiment.archive eller från flikvyn Experiment i Azure Machine Learning-studio-klienten via knappen Arkivera experiment. 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 jobb stöds för närvarande inte. Mer information om hur du tar bort arbetsytetillgångar finns i Exportera eller ta bort arbetsytedata för Machine Learning-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 ett träningsjobb. 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 Machine Learning 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 skapar 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 tidsåtgången för att skapa och läsa in avbildningar. Mer information finns i Azure Container Registry-tjänstnivåer (ACR).

Nästa steg