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
- Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag
- Azure Machine Learning SDK för Python (v1) (>= 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 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:
- Skapa ett experiment som ska köras
- Skapa en miljö där skriptet körs
- Skapa en ScriptRunConfig som anger beräkningsmål och miljö
- Skicka jobbet
- Vänta tills jobbet är klart
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. 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ö (myenv
se 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:
- Utbildning om 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
ruamel-yaml
, ettazureml-core
beroende, som introducerar en icke-bakåtkompatibel ändring tillazureml-core
. För att åtgärda det här felet avinstallerarruamel-yaml
du genom att körapip uninstall ruamel-yaml
och installera en annan version avruamel-yaml
. De versioner som stöds är v0.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"
.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:
- Starta ett kommandogränssnitt och aktivera conda-miljön där azureml-core är installerat.
- Ange
pip freeze
och letaPyJWT
efter , om det hittas bör den version som anges vara < 2.0.0 - 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. - 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
ellerconda_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 avconda_dependencies_file
eller lista alla dina pip-krav i en txt-fil med hjälp avpip_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 parameternenvironment
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 Portal 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
- Självstudie: Träna och distribuera en modell använder ett hanterat beräkningsmål för att träna en modell.
- Se hur du tränar modeller med specifika ML-ramverk, till exempel Scikit-learn, TensorFlow och PyTorch.
- Lär dig hur du effektivt justerar hyperparametrar för att skapa bättre modeller.
- När du har en tränad modell får du lära dig hur och var du distribuerar modeller.
- Visa SDK-referensen för klassen ScriptRunConfig.
- Använda Azure Machine Learning med Azure Virtual Networks