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

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ů:

  1. Vytvoření experimentu ke spuštění
  2. Vytvoření prostředí, ve kterém se skript spustí
  3. Vytvoření skriptu ScriptRunConfig, který určuje cílový výpočetní objekt a prostředí.
  4. Odeslání úlohy
  5. Čekání na dokončení úlohy

Nebo můžete:

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_targetviz Požadavky a prostředí (myenvviz 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:

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-yamlzávislosti , azureml-core která zavádí zásadní změnu .azureml-core Pokud chcete tuto chybu vyřešit, odinstalujte ruamel-yaml ji spuštěním pip uninstall ruamel-yaml a instalací jiné verze ruamel-yamlnástroje . Podporované verze jsou v0.15.35 až v0.17.4 (včetně). Můžete to provést spuštěním příkazu pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • Úloha selže s jwt.exceptions.DecodeErrorpř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ě:

    1. Spusťte příkazové prostředí a aktivujte prostředí Conda, ve kterém je nainstalovaný azureml-core.
    2. Zadejte a vyhledejte pip freezePyJWT. Pokud se najde, uvedená verze by měla být < 2.0.0.
    3. Pokud uvedená verze není podporovanou verzí, pip uninstall PyJWT v příkazovém prostředí zadejte y pro potvrzení.
    4. 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 nebo conda_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í nebo conda_dependencies_filevypsat 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 parametru environment 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