Konfigurace a odesílání trénovacích spuštění
V tomto článku se dozvíte, jak nakonfigurovat a odeslat Azure Machine Learning spuštění 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 příkladů poznámkových bloků vyhledejte kompletní pracovní příklady.
Při trénování je běžné začít na místním počítači a později škálovat na cloudový cluster. Díky Azure Machine Learning můžete svůj skript spouštět na různých cílových výpočetních cílech, 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 spuštění skriptu. Pokud pak chcete spustit trénovací experiment na jiném cílovém výpočetním prostředí, zadejte konfiguraci spuštění 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 si bezplatnou nebo placenou verzi služby Azure Machine Learning dnes
- Sada Azure Machine Learning SDK pro Python (>= 1.13.0)
- Pracovní Azure Machine Learning aplikace
ws - Cílový výpočetní objekt
my_compute_target. Vytvoření cílového výpočetního prostředí
Co je konfigurace spuštění skriptu?
ScriptRunConfig slouží ke konfiguraci informací nezbytných k odeslání trénovacího běhu v rámci experimentu.
Trénovací experiment odešlete s objektem ScriptRunConfig. Tento objekt obsahuje:
- source_directory: Zdrojový adresář, který obsahuje váš 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 spuš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í spuštění trénování 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í scriptRunConfig, který určuje cílový výpočetní objekt a prostředí
- Odeslání spuštění
- Počkejte na dokončení spuštění.
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. Experiemnt je odlehčené kontejnery, které pomáhají organizovat odesílání spuštění 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 prostředí
Vyberte cílový výpočetní objekt, na kterém se bude spouštět trénovací skript. Pokud v souboru ScriptRunConfig není zadaný žádný cílový výpočetní objekt nebo pokud compute_target='local' , Azure ML spustí váš skript místně.
Příklad kódu v tomto článku předpokládá, že jste již vytvořili cílový výpočetní objekt z části my_compute_target Požadavky.
Poznámka
Azure Databricks se nepodporuje jako cílový výpočetní objekt pro trénování modelu. Můžete použít nástroj Azure Databricks pro úlohy přípravy a nasazení dat.
Poznámka
Pokud chcete vytvořit a připojit výpočetní cíl pro školení v clusteru Kubernetes s podporou ARC Azure, přečtěte si téma konfigurace Machine Learning s podporou ARC Azure .
Vytvoření prostředí
Azure Machine Learning prostředí 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 prostředí Azure ML kurátorované prostředí. Kurátorovaná prostředí jsou předdefinovaná prostředí, která jsou ve výchozím nastavení k dispozici ve vašem pracovním prostoru. Tato prostředí využívají image Dockeru uložené v mezipaměti, čímž se snižují náklady na přípravu spuštění. Úplný Azure Machine Learning dostupných kurátorovaných prostředí najdete v článku o kurátorovaných prostředích.
U vzdáleného cílového výpočetního prostředí můžete začít s jedním 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žívání softwarových prostředí v Azure Machine Learning.
Místní cílový výpočetní objekt
Pokud je cílovým výpočetním objektem místní počítač , zodpovídáte za to, že všechny potřebné balíčky jsou k dispozici v prostředí Pythonu, ve kterém se skript spouští. Slouží python.user_managed_dependencies k použití aktuálního prostředí Pythonu (nebo Pythonu na cestě, kterou zadáte).
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 spuštění skriptu
Teď, když máte cílový výpočetní objekt ( , viz Požadavky a prostředí ( , viz Vytvoření prostředí), vytvořte konfiguraci spuštění skriptu, která spustí trénovací skript ( ) umístěný my_compute_target ve vašem myenv train.py 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 pro vás výchozí prostředí.
Pokud máte argumenty příkazového řádku, které chcete předat do trénovacího skriptu, můžete je zadat pomocí parametru konstruktoru arguments ScriptRunConfig, například arguments=['--arg1', arg1_val, '--arg2', arg2_val] .
Pokud chcete přepsat výchozí maximální dobu povolenou pro spuštění, můžete to provést prostřednictvím max_run_duration_seconds parametru . Systém se pokusí automaticky zrušit spuštění, pokud trvá déle, než je tato hodnota.
Určení konfigurace distribuované úlohy
Pokud chcete spustit distribuovanou trénovací úlohu, zadejte do parametru konfiguraci specifickou pro distribuovanou distributed_job_config úlohu. Mezi podporované typy konfigurace patří MpiConfiguration, TensorflowConfigurationa PyTorchConfiguration.
Další informace a příklady spouštění distribuovaných úloh Horovod, TensorFlow a PyTorch najdete v těchto tématu:
Odeslání experimentu
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Důležité
Po odeslání trénovacího běhu se vytvoří snímek adresáře, který obsahuje vaše trénovací skripty, a odešle se do cílového výpočetního prostředí. Uloží se také jako součást experimentu ve vašem pracovním prostoru. Pokud změníte soubory a znovu odešlete spuštění, nahrají se pouze změněné soubory.
Chcete-li zabránit zahrnutí zbytečných souborů do snímku, vytvořte v adresáři ignorovat soubor ( .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, naleznete v tématu syntax a vzory pro .gitignore . .amlignoreSoubor používá stejnou syntaxi. Pokud oba soubory existují, .amlignore soubor se používá a .gitignore soubor se nepoužívá.
Další informace o snímcích najdete v tématu Snímky.
Důležité
Speciální složky Dvě složky, výstupy a protokoly, mají zvláštní zacházení podle Azure Machine Learning. Když během trénování zapisujete soubory do složek s názvem outputs a protokoly, které jsou relativní vzhledem ke kořenovému adresáři (a ), soubory se automaticky nahrají do historie spuštění, abyste k nim měli přístup po dokončení ./outputs ./logs spuštění.
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 složky zapsat jakékoli protokoly z tréninkového ./logs spuštění. Pokud chcete Azure Machine Learning integrace TensorBoardu, nezapomeňte do této složky zapsat protokoly TensorBoardu. Zatímco vaše spuštění probíhá, budete moct spustit TensorBoard a streamovat tyto protokoly. Později budete také moct obnovit protokoly z předchozích spuštění.
Příklad stažení souboru zapsaného do složky outputs do místního počítače po vzdáleném spuštění trénování: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
Sledování a integrace Gitu
Když spustíte trénovací běh, ve kterém je zdrojový adresář místním úložištěm Git, informace o úložišti se uloží do historie spuštění. Další informace najdete v tématu Integrace Gitu pro Azure Machine Learning.
Příklady poznámkových bloků
Příklady konfigurace spuštění 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 cílech
- Trénování s ML rozhraními
- 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) závislosti, která zavádí rozbíjení
ruamel-yamlazureml-coreazureml-corezměn. Pokud chcete tuto chybu vyřešit, proveďte odinstalaci spuštěním a instalací jiné verze nástroje . Podporované verzeruamel-yamlpip uninstall ruamel-yamljsouruamel-yamlv0.15.35 až v0.17.4 (včetně). Můžete to provést spuštěnímpip install "ruamel-yaml>=0.15.35,<0.17.5".Spuštění selže
jwt.exceptions.DecodeErrors přesně 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 spuštění, zkontrolujte verzi PyJWT nainstalovanou ve vašem prostředí, ve kterém spouštíte spuštění. Podporované verze PyJWT jsou < 2.0.0. Odinstalujte PyJWT z prostředí, pokud je >= 2.0.0. Můžete zkontrolovat verzi PyJWT, odinstalovat a nainstalovat správnou verzi následujícím způsobem:
- Spusťte příkazové prostředí a aktivujte prostředí Conda, ve kterém je nainstalovaný azureml-core.
- Zadejte a vyhledejte , pokud ho najdete, uvedená verze by měla
pip freezePyJWTbýt < 2.0.0. - Pokud uvedená verze není podporovaná, v příkazovém prostředí zadejte pro potvrzení
pip uninstall PyJWTy. - Dá se nainstalovat pomocí
pip install 'PyJWT<2.0.0'.
Pokud při spuštění odesíláte prostředí vytvořené uživatelem, zvažte použití nejnovější verze azureml-core v tomto prostředí. Verze >= 1.18.0 azureml-core už připnou PyJWT < 2.0.0. Pokud v prostředí, které odešlete, potřebujete použít verzi azureml-core < 1.18.0, nezapomeňte ve svých závislostech pip zadat PyJWT < 2.0.0.
ModuleErrors (bez pojmenovaného modulu): Pokud při odesílání experimentů v Azure ML dochází k chybě ModuleErrors, trénovací skript očekává instalaci balíčku, ale nepřidá se. Po poskytnutí názvu balíčku Azure ML nainstaluje balíček do prostředí použitého pro trénovací běh.
Pokud k odesílání experimentů používáte estimátory, můžete v estimátoru zadat název balíčku prostřednictvím parametru nebo podle zdroje, ze kterého chcete
pip_packagesconda_packagesbalíček nainstalovat. Můžete také zadat soubor yml se všemi závislostmi pomocí nebo pomocí parametru vyjádřete všechny požadavkyconda_dependencies_filepip v souborupip_requirements_filetxt. Pokud máte vlastní objekt azure ML Environment, který chcete přepsat výchozí image použít estimátorem, můžete toto prostředí zadat pomocí parametruenvironmentkonstruktoru estimátoru.Azure ML udržovaných imagí Dockeru a jejich obsah je možné zobrazit v kontejnerech AzureML. Závislosti specifické pro rozhraní jsou uvedené v dokumentaci k příslušnému rozhraní:
Poznámka
Pokud se myslíte, že je konkrétní balíček dostatečně běžný pro přidání do azure ML udržovaných imagí a prostředí, GitHub problém s kontejnery AzureML.
NameError (název není definovaný), AttributeError (objekt nemá žádný atribut): Tato výjimka by měla pocvičovat z vašich trénovací skripty. Můžete se podívat na soubory protokolu z Azure Portal a získat další informace o konkrétním názvu, který není definovaný, nebo o chybě atributu. V sadě SDK se můžete
run.get_details()podívat na chybovou zprávu. Zobrazí se také seznam všech souborů protokolu vygenerované pro vaše spuštění. Než znovu spustíte spuštění, nezapomeňte se podívat na svůj trénovací skript a opravit chybu.Spuštění nebo odstranění experimentu: Experimenty je možné archivovat pomocí metody Experiment.archive nebo ze zobrazení karty Experiment v klientovi Azure Machine Learning Studio pomocí tlačítka Archivovat experiment. Tato akce skryje experiment před dotazy a zobrazeními seznamu, ale neodstraní ho.
Trvalé odstranění jednotlivých experimentů nebo spuštění 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 Machine Learning služby.
Dokument metriky je příliš velký: Azure Machine Learning má interní omezení velikosti objektů metrik, které je možné protokolovat najednou při trénování. 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 ML 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čítá z Azure Container Registry (ACR). Ve výchozím nastavení Azure Machine Learning službu ACR, která používá úroveň služby Basic. Změna služby ACR pro váš pracovní prostor na úroveň Standard nebo Premium může zkrátit čas, který je potřeba k sestavení a načtení imagí. Další informace najdete v tématu Azure Container Registry úrovních služby.
Další kroky
- Kurz: Trénovat model používá spravovaný cílový výpočetní objekt k trénovat model.
- Podívejte se, jak trénovat modely s ML architektur, jako jsou Scikit-learn, TensorFlowa PyTorch.
- Zjistěte, jak efektivně ladit hyperparametry a vytvářet lepší modely.
- Jakmile budete mít vytrénovaný model, zjistěte, jak a kde nasadit modely.
- Prohlédněte si referenční informace k sadě SDK třídy ScriptRunConfig.
- Použití Azure Machine Learning se službou Azure Virtual Networks