Konfigurace a odeslání trénovacích úloh
PLATÍ PRO:Sada Python SDK azureml v1
V tomto článku se dozvíte, jak nakonfigurovat a odeslat úlohy Služby Azure Machine Learning pro trénování modelů. Fragmenty kódu vysvětlují klíčové části konfigurace a odeslání trénovacího skriptu. Pak pomocí jednoho z ukázkových poznámkových bloků vyhledejte kompletní pracovní příklady.
Při trénování je běžné spouštět na místním počítači a později škálovat na cloudový cluster. Se službou Azure Machine Learning můžete skript spouštět na různých cílových výpočetních objektech, aniž byste museli měnit trénovací skript.
Jediné, co musíte udělat, je definovat prostředí pro každý cílový výpočetní objekt v rámci konfigurace úlohy skriptu. Pokud pak chcete spustit trénovací experiment na jiném cílovém výpočetním objektu, zadejte konfiguraci úlohy pro tento výpočetní výkon.
Požadavky
- Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete. Vyzkoušejte bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes
- Sada Azure Machine Learning SDK pro Python (>= 1.13.0)
- Pracovní prostor služby Azure Machine Learning
ws
- Cílový výpočetní objekt .
my_compute_target
Vytvoření cílového výpočetního objektu
Co je konfigurace spuštění skriptu?
ScriptRunConfig slouží ke konfiguraci informací potřebných k odeslání trénovací úlohy v rámci experimentu.
Trénovací experiment odešlete s objektem ScriptRunConfig. Tento objekt zahrnuje:
- source_directory: Zdrojový adresář, který obsahuje trénovací skript.
- script: Trénovací skript, který se má spustit
- compute_target: Cílový výpočetní objekt, na který se má spustit
- environment: Prostředí, které se má použít při spouštění skriptu
- a některé další konfigurovatelné možnosti (další informace najdete v referenční dokumentaci )
Trénování modelu
Vzor kódu pro odeslání trénovací úlohy je stejný pro všechny typy cílových výpočetních objektů:
- Vytvoření experimentu ke spuštění
- Vytvoření prostředí, ve kterém se skript spustí
- Vytvoření skriptu ScriptRunConfig, který určuje cílový výpočetní objekt a prostředí.
- Odeslání úlohy
- Čekání na dokončení úlohy
Nebo můžete:
- Odešlete spuštění HyperDrivu pro ladění hyperparametrů.
- Odešlete experiment prostřednictvím rozšíření VS Code.
Vytvoření experimentu
Vytvořte v pracovním prostoru experiment . Experiment je odlehčený kontejner, který pomáhá organizovat odesílání úloh a sledovat kód.
from azureml.core import Experiment
experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)
Výběr cílového výpočetního objektu
Vyberte cílový výpočetní objekt, na kterém se bude trénovací skript spouštět. Pokud v skriptu ScriptRunConfig není zadaný žádný cílový výpočetní objekt nebo pokud compute_target='local'
, Azure Machine Learning spustí váš skript místně.
Ukázkový kód v tomto článku předpokládá, že jste již vytvořili cílový výpočetní objekt my_compute_target
z části Požadavky.
Poznámka
Azure Databricks se nepodporuje jako cílový výpočetní objekt pro trénování modelu. Azure Databricks můžete použít pro úlohy přípravy a nasazení dat.
Poznámka
Informace o vytvoření a připojení cílového výpočetního objektu pro trénování v clusteru Kubernetes s podporou Azure Arc najdete v tématu Konfigurace služby Machine Learning s podporou služby Azure Arc.
Vytvoření prostředí
Prostředí Azure Machine Learning jsou zapouzdřením prostředí, ve kterém probíhá trénování strojového učení. Určují balíčky Pythonu, image Dockeru, proměnné prostředí a nastavení softwaru pro trénovací a bodovací skripty. Určují také moduly runtime (Python, Spark nebo Docker).
Můžete buď definovat vlastní prostředí, nebo použít kurátorované prostředí služby Azure Machine Learning. Kurátorovaná prostředí jsou předdefinovaná prostředí, která jsou ve vašem pracovním prostoru k dispozici ve výchozím nastavení. Tato prostředí jsou podporovaná imagemi Dockeru uloženými v mezipaměti, což snižuje náklady na přípravu úlohy. Úplný seznam dostupných kurátorovaných prostředí najdete v tématu Kurátorovaná prostředí služby Azure Machine Learning .
Pro vzdálený cílový výpočetní objekt můžete začít pomocí některého z těchto oblíbených kurátorovaných prostředí:
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
Další informace a podrobnosti o prostředích najdete v tématu Vytvoření & použití softwarových prostředí ve službě Azure Machine Learning.
Cíl místních výpočetních prostředků
Pokud je vaším cílovým výpočetním objektem místní počítač, zodpovídáte za to, že v prostředí Pythonu, ve kterém se skript spouští, jsou k dispozici všechny potřebné balíčky. Slouží python.user_managed_dependencies
k použití aktuálního prostředí Pythonu (nebo Pythonu v zadané cestě).
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'
Vytvoření konfigurace úlohy skriptu
Teď, když máte cílový výpočetní objekt (my_compute_target
viz Požadavky a prostředí (myenv
viz Vytvoření prostředí), vytvořte konfiguraci úlohy skriptu, která spustí trénovací skript (train.py
) umístěnou ve vašem project_folder
adresáři:
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
Pokud nezadáte prostředí, vytvoří se výchozí prostředí pro vás.
Pokud máte argumenty příkazového řádku, které chcete předat vašemu trénovacímu skriptu, můžete je zadat prostřednictvím parametru arguments
konstruktoru ScriptRunConfig, například arguments=['--arg1', arg1_val, '--arg2', arg2_val]
.
Pokud chcete přepsat výchozí maximální čas povolený pro úlohu, můžete to udělat pomocí parametru max_run_duration_seconds
. Systém se pokusí automaticky zrušit úlohu, pokud trvá déle než tato hodnota.
Určení konfigurace distribuované úlohy
Pokud chcete spustit distribuovanou trénovací úlohu, zadejte parametru konfiguraci specifickou pro distribuovanou distributed_job_config
úlohu. Mezi podporované typy konfigurace patří MpiConfiguration, TensorflowConfiguration a PyTorchConfiguration.
Další informace a příklady spouštění distribuovaných úloh Horovod, TensorFlow a PyTorch najdete tady:
Odeslání experimentu
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Důležité
Když odešlete trénovací úlohu, vytvoří se snímek adresáře, který obsahuje vaše trénovací skripty, a odešle se do cílového výpočetního objektu. Uloží se také jako součást experimentu ve vašem pracovním prostoru. Pokud změníte soubory a úlohu znovu odešlete, nahrají se jenom změněné soubory.
Pokud chcete zabránit zahrnutí nepotřebných souborů do snímku, proveďte v adresáři ignorování souboru (.gitignore
nebo .amlignore
). Do tohoto souboru přidejte soubory a adresáře, které se mají vyloučit. Další informace o syntaxi, která se má použít v tomto souboru, najdete v části syntaxe a vzory pro .gitignore
. Soubor .amlignore
používá stejnou syntaxi. Pokud existují oba soubory, použije se .amlignore
soubor a .gitignore
soubor se nepouží.
Další informace o snímcích najdete v tématu Snímky.
Důležité
Speciální složky Azure Machine Learning se dvěma složkami, výstupy a protokoly, zachytá zvláštní zacházení. Když během trénování zapíšete soubory do složek s názvem outputs (výstupy ) a protokoly , které jsou relativní ke kořenovému adresáři (./outputs
a ./logs
), soubory se automaticky nahrají do vaší historie úloh, abyste k nim měli po dokončení úlohy přístup.
Pokud chcete během trénování vytvářet artefakty (například soubory modelu, kontrolní body, datové soubory nebo vykreslené obrázky), zapište je do ./outputs
složky.
Podobně můžete do ./logs
složky zapsat všechny protokoly z trénovací úlohy. Pokud chcete využít integraci TensorBoardu služby Azure Machine Learning, nezapomeňte do této složky zapsat protokoly TensorBoardu. Zatímco vaše úloha probíhá, budete moct spustit TensorBoard a streamovat tyto protokoly. Později budete také moct obnovit protokoly z kterékoli z předchozích úloh.
Pokud chcete například stáhnout soubor zapsaný do složky outputs do místního počítače po vzdálené trénovací úloze: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
Sledování a integrace Gitu
Když spustíte trénovací úlohu, ve které je zdrojovým adresářem místní úložiště Git, uloží se informace o úložišti do historie úlohy. Další informace najdete v tématu Integrace Gitu pro Azure Machine Learning.
Příklady poznámkových bloků
Příklady konfigurace úloh pro různé scénáře trénování najdete v těchto poznámkových blocích:
- Trénování na různých cílových výpočetních objektech
- Trénování s využitím architektur ML
- tutorials/img-classification-part1-training.ipynb
Postupujte podle pokynů v článku věnovaném využití poznámkových bloků Jupyter k prozkoumání této služby a zjistěte, jak provozovat poznámkové bloky.
Řešení potíží
AttributeError: Objekt RoundTripLoader nemá žádný atribut comment_handling: Tato chyba pochází z nové verze (v0.17.5)
ruamel-yaml
závislosti ,azureml-core
která zavádí zásadní změnu .azureml-core
Pokud chcete tuto chybu vyřešit, odinstalujteruamel-yaml
ji spuštěnímpip uninstall ruamel-yaml
a instalací jiné verzeruamel-yaml
nástroje . Podporované verze jsou v0.15.35 až v0.17.4 (včetně). Můžete to provést spuštěním příkazupip install "ruamel-yaml>=0.15.35,<0.17.5"
.Úloha selže s
jwt.exceptions.DecodeError
přesnou chybovou zprávou:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode()
.Zvažte upgrade na nejnovější verzi azureml-core:
pip install -U azureml-core
.Pokud k tomuto problému dochází u místních úloh, zkontrolujte verzi PyJWT nainstalovanou ve vašem prostředí, ve kterém spouštíte úlohy. Podporované verze PyJWT jsou < 2.0.0. Odinstalujte PyJWT z prostředí, pokud je >verze = 2.0.0. Kontrolu verze PyJWT, její odinstalaci a instalaci správné verze můžete provést následovně:
- Spusťte příkazové prostředí a aktivujte prostředí Conda, ve kterém je nainstalovaný azureml-core.
- Zadejte a vyhledejte
pip freeze
PyJWT
. Pokud se najde, uvedená verze by měla být < 2.0.0. - Pokud uvedená verze není podporovanou verzí,
pip uninstall PyJWT
v příkazovém prostředí zadejte y pro potvrzení. - Dá se nainstalovat pomocí
pip install 'PyJWT<2.0.0'
.
Pokud se svojí úlohou odesíláte prostředí vytvořené uživatelem, zvažte použití nejnovější verze azureml-core v daném prostředí. Verze >= 1.18.0 azureml-core už připnuté PyJWT < 2.0.0. Pokud v prostředí, které odešlete, potřebujete použít verzi azureml-core < 1.18.0, nezapomeňte v závislostech pip zadat PyJWT < 2.0.0.
ModuleErrors (bez pojmenovaného modulu): Pokud při odesílání experimentů ve službě Azure Machine Learning narazíte na chyby ModuleErrors, trénovací skript očekává instalaci balíčku, ale nepřidá se. Jakmile zadáte název balíčku, Azure Machine Learning ho nainstaluje do prostředí použitého pro trénovací úlohu.
Pokud k odesílání experimentů používáte estimátory, můžete zadat název balíčku prostřednictvím
pip_packages
neboconda_packages
parametr v estimátoru na základě zdroje, ze kterého chcete balíček nainstalovat. Můžete také určit soubor yml se všemi závislostmi pomocí neboconda_dependencies_file
vypsat všechny požadavky pip v souboru txt pomocípip_requirements_file
parametru. Pokud máte vlastní objekt prostředí Azure Machine Learning, který chcete přepsat výchozí image používanou nástrojem pro posouzení, můžete toto prostředí určit prostřednictvím parametruenvironment
konstruktoru estimatoru.Spravované image Dockeru a jejich obsah ve službě Azure Machine Learning je možné zobrazit v kontejnerech Azure Machine Learning. Závislosti specifické pro architekturu jsou uvedené v příslušné dokumentaci k architektuře:
Poznámka
Pokud se domníváte, že je určitý balíček dostatečně běžný, aby se přidal do spravovaných imagí a prostředí služby Azure Machine Learning, vyvolejte problém na GitHubu v kontejnerech služby Azure Machine Learning.
NameError (název není definovaný), AttributeError (Objekt nemá žádný atribut): Tato výjimka by měla pocházet z trénovacích skriptů. Další informace o konkrétním nedefinovaném názvu nebo chybě atributu najdete v souborech protokolu z Azure Portal. V sadě SDK můžete k zobrazení chybové zprávy použít příkaz
run.get_details()
. Zobrazí se také seznam všech souborů protokolu vygenerovaných pro vaši úlohu. Před opětovným odesláním úlohy si nezapomeňte prohlédnout trénovací skript a opravit chybu.Odstranění úlohy nebo experimentu: Experimenty je možné archivovat pomocí metody Experiment.archive nebo pomocí tlačítka Archivovat experiment v studio Azure Machine Learning klientovi v zobrazení karty Experiment. Tato akce skryje experiment v dotazech a zobrazeních seznamu, ale neodstraní ho.
Trvalé odstranění jednotlivých experimentů nebo úloh se v současné době nepodporuje. Další informace o odstraňování prostředků pracovního prostoru najdete v tématu Export nebo odstranění dat pracovního prostoru služby Machine Learning Service.
Dokument metriky je příliš velký: Azure Machine Learning má interní omezení velikosti objektů metrik, které je možné protokolovat z trénovací úlohy najednou. Pokud při protokolování metriky hodnot seznamu dojde k chybě Dokument metriky je příliš velký, zkuste seznam rozdělit na menší části, například:
run.log_list("my metric name", my_metric[:N]) run.log_list("my metric name", my_metric[N:])
Azure Machine Learning interně zřetězí bloky se stejným názvem metriky do souvislého seznamu.
Spuštění cílového výpočetního objektu trvá dlouho: Image Dockeru pro cílové výpočetní objekty se načítají z Azure Container Registry (ACR). Azure Machine Learning ve výchozím nastavení vytvoří službu ACR, která používá úroveň služby Basic . Změna ACR pro váš pracovní prostor na úroveň Standard nebo Premium může zkrátit dobu potřebnou k vytváření a načítání imagí. Další informace najdete v článku Úrovně služby Azure Container Registry.
Další kroky
- Kurz: Trénování a nasazení modelu používá k trénování modelu spravovaný cílový výpočetní objekt.
- Podívejte se, jak trénovat modely s konkrétními architekturami ML, jako jsou Scikit-learn, TensorFlow a PyTorch.
- Naučte se efektivně ladit hyperparametry , abyste mohli vytvářet lepší modely.
- Jakmile máte vytrénovaný model, zjistěte, jak a kde modely nasadit.
- Projděte si referenční informace k sadě SDK třídy ScriptRunConfig .
- Použití služby Azure Machine Learning s virtuálními sítěmi Azure