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 Učení 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 Učení 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

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

  1. Vytvoření experimentu ke spuštění
  2. Vytvoření prostředí, ve kterém se skript spouští
  3. Vytvoření 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 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'Učení azure machine Učení 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 Učení počítačů s podporou Azure Arc.

Vytvořit prostředí

Prostředí Azure Machine Učení 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 definovat vlastní prostředí nebo použít Učení kurátorované prostředí Azure Machine. 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 Azure Machine Učení Kurátorovaná prostředí.

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 Učení.

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

Zvláštní složky Dvě složky, výstupy a protokoly, přijímají zvláštní zacházení se službou Azure Machine Učení. 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 ./logsv 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 Učení, 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 Učení.

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í 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ěnu azureml-core. Pokud chcete tuto chybu opravit, odinstalujte ruamel-yaml spuštěním pip uninstall ruamel-yaml a instalací jiné verze ruamel-yaml. Podporované verze jsou verze v0.15.35 až v0.17.4 (včetně). Můžete to provést spuštěním pip 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.

    Pokud. 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:

    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, měla by < být uvedená verze 2.0.0.
    3. Pokud uvedená verze není podporovaná, pip uninstall PyJWT zadejte v příkazovém prostředí a zadejte y pro potvrzení.
    4. Dá se nainstalovat pomocí pip install 'PyJWT<2.0.0'.

    Pokud. 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 Učení 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 Učení nainstaluje balíček do prostředí použitého pro vaši trénovací úlohu.

    Pokud. K odesílání experimentů používáte estimátory. V nástroji pro odhadce můžete zadat název pip_packages balíčku nebo conda_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_filenebo vypsat všechny požadavky pip v souboru txt pomocí pip_requirements_file parametru. Pokud máte vlastní objekt prostředí Azure Machine Učení, který chcete přepsat výchozí image používanou odhadcem, můžete toto prostředí zadat pomocí environment parametru konstruktoru estimátoru.

    Azure Machine Učení udržovat image Dockeru a jejich obsah je možné vidět v kontejnerech Azure Machine Učení. Závislosti specifické pro architekturu jsou uvedeny v příslušné dokumentaci k rozhraní:

    Poznámka:

    Pokud si myslíte, že je konkrétní balíček dostatečně běžný, abyste ho mohli přidat do služby Azure Machine Učení udržované image a prostředí, vytvořte problém s GitHubem ve službě Azure Machine Učení Containers.

  • 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 Učení počítače.

  • Dokument metriky je příliš velký: Služba Azure Machine Učení 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 Učení 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 Učení 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