Konfigurace a odeslání trénovacích úloh
PLATÍ PRO: Python SDK azureml v1
V tomto článku se dozvíte, jak nakonfigurovat a odeslat úlohy 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í kompletní funkční 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. Pomocí služby Azure Machine Learning můžete skript spustit na různých výpočetních cílech, aniž byste museli změnit trénovací skript.
Stačí definovat prostředí pro každý cílový výpočetní objekt v rámci konfigurace úlohy skriptu. Potom, když chcete spustit trénovací experiment na jiném cílovém výpočetním objektu, zadejte konfiguraci úlohy pro tento výpočetní objekt.
Požadavky
- Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes
- Sada Azure Machine Learning SDK pro Python (v1) (>= 1.13.0)
- Pracovní prostor Služby Azure Machine Learning
ws
- Cílový
my_compute_target
výpočetní objekt . 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.
Svůj trénovací experiment odešlete pomocí objektu ScriptRunConfig. Tento objekt zahrnuje:
- source_directory: Zdrojový adresář, který obsahuje trénovací skript
- script: Trénovací skript ke spuštění
- compute_target: Cílový výpočetní objekt, na který se má spustit
- prostředí: Prostředí, které se má použít při spuštění skriptu
- a další konfigurovatelné možnosti (další informace najdete v referenční dokumentaci )
Trénování vašeho modelu
Vzor kódu pro odeslání trénovací úlohy je stejný pro všechny typy výpočetních cílů:
- Vytvoření experimentu ke spuštění
- Vytvoření prostředí, ve kterém se skript spouští
- Vytvoření 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 lehký kontejner, který pomáhá organizovat odesílání úloh a sledovat kód.
PLATÍ PRO: Python SDK azureml v1
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 není v souboru ScriptRunConfig zadán žá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 k úlohám přípravy a nasazení dat.
- Pokud chcete vytvořit a připojit cílový výpočetní objekt pro trénování v clusteru Kubernetes s podporou Azure Arc, přečtěte si téma Konfigurace strojového učení s podporou Azure Arc.
Vytvořit 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í. Kolem trénovacích a bodovacích skriptů určují balíčky Pythonu, image Dockeru, proměnné prostředí a nastavení softwaru. Zadávají také moduly runtime (Python, Spark nebo Docker).
Můžete buď definovat vlastní prostředí, nebo použít kurátorované prostředí Azure Machine Learning. Kurátorovaná prostředí jsou předdefinovaná prostředí, která jsou ve výchozím nastavení dostupná ve vašem pracovním prostoru. Tato prostředí jsou podporována imagemi Dockeru uloženými v mezipaměti, což snižuje náklady na přípravu úloh. Ú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 jedním z těchto oblíbených kurátorovaných prostředí:
PLATÍ PRO: Python SDK azureml v1
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 Vytváření a používání softwarových prostředí ve službě Azure Machine Learning.
Místní cílový výpočetní objekt
Pokud je vaším cílovým výpočetním prostředím místní počítač, zodpovídáte za zajištění dostupnosti všech potřebných balíčků v prostředí Pythonu, kde se skript spouští. Slouží python.user_managed_dependencies
k použití aktuálního prostředí Pythonu (nebo Pythonu na zadané cestě).
PLATÍ PRO: 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'
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á spouští trénovací skript (train.py
) umístěný v project_folder
adresáři:
PLATÍ PRO: 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)
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 trénovacímu skriptu, můžete je zadat pomocí arguments
parametru konstruktoru ScriptRunConfig, arguments=['--arg1', arg1_val, '--arg2', arg2_val]
například .
Pokud chcete přepsat výchozí maximální povolenou dobu pro úlohu, můžete to provést prostřednictvím parametru max_run_duration_seconds
. Systém se pokusí úlohu automaticky zrušit, pokud trvá déle, než je tato hodnota.
Zadání 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, TensorflowConfiguration a PyTorchConfiguration.
Další informace a příklady spouštění distribuovaných úloh Horovod, TensorFlow a PyTorch najdete tady:
Odeslání experimentu
PLATÍ PRO: Python SDK azureml v1
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 odešlete úlohu znovu, nahrají se jenom změněné soubory.
Chcete-li zabránit zahrnutí nepotřebných souborů do snímku, proveďte v adresáři ignorovaný soubor (.gitignore
nebo .amlignore
). Do tohoto souboru přidejte soubory a adresáře, které se mají vyloučit. Další informace o syntaxi pro použití v tomto souboru naleznete v syntaxi a vzory pro .gitignore
. Soubor .amlignore
používá stejnou syntaxi. Pokud existují oba soubory, .amlignore
použije se soubor 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, přijímají zvláštní zacházení se službou Azure Machine Learning. Když během trénování zapíšete soubory do složek pojmenovaných výstupů a protokolů , které jsou relativní k kořenovému adresáři (./outputs
a ./logs
v uvedeném pořadí), soubory se automaticky nahrají do historie úloh, abyste k nim měli přístup po dokončení úlohy.
Pokud chcete vytvořit artefakty během trénování (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 všechny protokoly z trénovací úlohy ./logs
. Pokud chcete využít integraci TensorBoardu služby Azure Machine Learning, ujistěte se, že do této složky napíšete protokoly TensorBoardu. Během probíhající úlohy budete moct spustit TensorBoard a streamovat tyto protokoly. Později budete moct také obnovit protokoly z některé z předchozích úloh.
Pokud chcete například stáhnout soubor zapsaný do výstupní složky do místního počítače po vzdálené úloze 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í úlohu, ve které je zdrojovým adresářem místní úložiště Git, uloží se informace o úložišti v historii úloh. 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 výpočetních cílech
- 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í problému
AttributeError: Objekt RoundTripLoader nemá žádný atribut comment_handling: Tato chyba pochází z nové verze (v0.17.5)
ruamel-yaml
,azureml-core
závislost, která představuje zásadní změnuazureml-core
. Pokud chcete tuto chybu opravit, odinstalujteruamel-yaml
spuštěnímpip uninstall ruamel-yaml
a instalací jiné verzeruamel-yaml
. Podporované verze jsou verze v0.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"
příkazu .Úloha selže s
jwt.exceptions.DecodeError
: Přesná chybová zpráva: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
.Když. Dochází k tomuto problému pro místní úlohy, zkontrolujte verzi PyJWT nainstalovanou ve vašem prostředí, kde . spouštíte úlohy. Podporované verze PyJWT jsou < 2.0.0. Odinstalujte PyJWT z prostředí, pokud je >verze = 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
pip freeze
PyJWT
, pokud se najde, měla by < být uvedená verze 2.0.0. - Pokud uvedená verze není podporovaná,
pip uninstall PyJWT
zadejte v příkazovém prostředí a zadejte y pro potvrzení. - Dá se nainstalovat pomocí
pip install 'PyJWT<2.0.0'
.
Když. odesíláte prostředí vytvořené uživatelem s vaší úlohou, zvažte použití nejnovější verze azureml-core v daném prostředí. Verze >= 1.18.0 azureml-core již pin PyJWT < 2.0.0. Pokud potřebujete v prostředí, které odešlete, použít verzi azureml-core < 1.18.0, nezapomeňte ve závislostech pip zadat PyJWT < 2.0.0.
ModuleErrors (žádný modul s názvem): Pokud . Při odesílání experimentů ve službě Azure Machine Learning dochází k chybě ModuleErrors, trénovací skript očekává instalaci balíčku, ale nepřidá se. Jakmile zadáte název balíčku, Azure Machine Learning nainstaluje balíček do prostředí použitého pro vaši trénovací úlohu.
Když. K odesílání experimentů používáte estimátory. V nástroji pro odhadce můžete zadat název
pip_packages
balíčku neboconda_packages
parametr podle toho, ze kterého zdroje chcete balíček nainstalovat. Můžete také zadat soubor yml se všemi závislostmi pomocíconda_dependencies_file
nebo 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 odhadcem, můžete toto prostředí určit pomocíenvironment
parametru konstruktoru estimátoru.Azure Machine Learning udržuje image Dockeru a jejich obsah je možné vidět v kontejnerech Azure Machine Learning. Závislosti specifické pro architekturu jsou uvedeny v příslušné dokumentaci k rozhraní:
Poznámka:
Pokud si myslíte, že konkrétní balíček je dostatečně běžný, abyste ho mohli přidat do spravovaných imagí a prostředí služby Azure Machine Learning, vytvořte problém s GitHubem v kontejnerech 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ů. Pokud chcete získat další informace o konkrétním názvu, který není definovaný nebo chyba atributu, můžete se podívat na soubory protokolu z webu Azure Portal. V sadě SDK se můžete
run.get_details()
podívat na chybovou zprávu. Zobrazí se také seznam všech souborů protokolu vygenerovaných pro vaši úlohu. Než úlohu znovu odešlete, nezapomeňte se podívat na trénovací skript a chybu opravit.Úloha nebo odstranění experimentu: Experimenty je možné archivovat pomocí metody Experiment.archive nebo ze zobrazení karty Experiment v studio Azure Machine Learning klientovi pomocí tlačítka Archivovat experiment. Tato akce skryje experiment ze seznamu dotazů a zobrazení, 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 najednou z trénovací úlohy. 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í ze služby 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á spravovaný cílový výpočetní objekt k trénování modelu.
- Podívejte se, jak trénovat modely s konkrétními architekturami ML, jako jsou Scikit-learn, TensorFlow a PyTorch.
- Zjistěte, jak efektivně ladit hyperparametry pro vytváření lepších modelů.
- Jakmile máte natrénovaný model, zjistěte , jak a kde nasazovat modely.
- Prohlédně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