Trénování modelů PyTorch ve velkém měřítku pomocí sady Azure Machine Učení SDK (v1)

PLATÍ PRO:Python SDK azureml v1

V tomto článku se dozvíte, jak spouštět trénovací skripty PyTorch v podnikovém měřítku pomocí služby Azure Machine Učení.

Ukázkové skripty v tomto článku slouží ke klasifikaci obrázků kuřete a krůtí k vytvoření neuronové sítě hlubokého učení (DNN) na základě kurzu přenosu PyTorch. Transfer learning je technika, která využívá znalosti získané z řešení jednoho problému na jiný, ale související problém. Přenos učení zkracuje proces trénování tím, že vyžaduje méně dat, času a výpočetních prostředků než trénování od začátku. Další informace o přenosu učení najdete v článku o hlubokém učení a strojovém učení .

Bez ohledu na to, jestli trénujete model PyTorch hlubokého učení od základů nebo do cloudu, můžete použít Azure Machine Učení k horizontálnímu navýšení kapacity opensourcových trénovacích úloh pomocí výpočetních prostředků elastického cloudu. Pomocí služby Azure Machine Učení můžete vytvářet, nasazovat, nasazovat, verze a monitorovat modely na produkční úrovni.

Požadavky

Tento kód spusťte v některém z těchto prostředí:

  • Výpočetní instance Azure Machine Učení – není potřeba stahovat ani instalovat

    • Dokončete rychlý start: Začínáme se službou Azure Machine Učení a vytvořte předem načtený vyhrazený server poznámkového bloku se sadou SDK a ukázkovým úložištěm.
    • Ve složce hloubkového učení na serveru poznámkového bloku najděte dokončený a rozbalený poznámkový blok tak, že přejdete do tohoto adresáře: postupy k použití-azureml > ml-frameworks > pytorch > train-hyperparameter-tune-deploy-with-pytorch .
  • Vlastní server Jupyter Notebook

    Dokončenou verzi poznámkového bloku Jupyter najdete také na stránce ukázek GitHubu. Poznámkový blok obsahuje rozšířené oddíly, které pokrývají inteligentní ladění hyperparametrů, nasazení modelu a widgety poznámkových bloků.

Než budete moct spustit kód v tomto článku a vytvořit cluster GPU, budete muset požádat o navýšení kvóty pro váš pracovní prostor.

Nastavení experimentu

Tato část nastaví trénovací experiment načtením požadovaných balíčků Pythonu, inicializací pracovního prostoru, vytvořením cílového výpočetního objektu a definováním trénovacího prostředí.

Import balíčků

Nejprve naimportujte potřebné knihovny Pythonu.

import os
import shutil

from azureml.core.workspace import Workspace
from azureml.core import Experiment
from azureml.core import Environment

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

Inicializace pracovního prostoru

Pracovní prostor Učení Azure je prostředek nejvyšší úrovně služby. Poskytuje centralizované místo pro práci se všemi artefakty, které vytvoříte. V sadě Python SDK máte přístup k artefaktům pracovního prostoru vytvořením objektu workspace .

Vytvořte objekt pracovního prostoru ze config.json souboru vytvořeného v části Požadavky.

ws = Workspace.from_config()

Získání dat

Datová sada se skládá z přibližně 120 trénovacích obrázků pro krůty a kuřata s 100 ověřovacími obrázky pro každou třídu. Stáhneme a extrahujeme datovou sadu jako součást našeho trénovacího skriptu pytorch_train.py. Obrázky jsou podmnožinou datové sady Open Images v5. Další kroky k vytvoření JSONL pro trénování s vlastními daty najdete v tomto poznámkovém bloku Jupyter.

Příprava trénovacího skriptu

V tomto kurzu je již k dispozici trénovací skript pytorch_train.py. V praxi můžete použít libovolný vlastní trénovací skript, jak je, a spustit ho pomocí Učení Azure Machine.

Vytvořte složku pro trénovací skripty.

project_folder = './pytorch-birds'
os.makedirs(project_folder, exist_ok=True)
shutil.copy('pytorch_train.py', project_folder)

Vytvoření cílového výpočetního objektu

Vytvořte cílový výpočetní objekt pro spuštění úlohy PyTorch. V tomto příkladu vytvořte výpočetní cluster Azure s podporou GPU Učení.

Důležité

Než budete moct vytvořit cluster GPU, budete muset požádat o navýšení kvóty pro váš pracovní prostor.


# Choose a name for your CPU cluster
cluster_name = "gpu-cluster"

# Verify that cluster does not exist already
try:
    compute_target = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing compute target')
except ComputeTargetException:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', 
                                                           max_nodes=4)

    # Create the cluster with the specified name and configuration
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    # Wait for the cluster to complete, show the output log
    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

Pokud místo toho chcete vytvořit cluster procesoru, zadejte jinou velikost virtuálního počítače vm_size parametru, například STANDARD_D2_V2.

Další informace o cílových výpočetních objektech najdete v článku o cílovém výpočetním objektu.

Definování prostředí

Pokud chcete definovat prostředí Azure Machine Učení, které zapouzdřuje závislosti trénovacího skriptu, můžete buď definovat vlastní prostředí, nebo použít Učení kurátorované prostředí Azure Machine.

Použití kurátorovaného prostředí

Azure Machine Učení poskytuje předem připravená a kurátorovaná prostředí, pokud nechcete definovat vlastní prostředí. Existuje několik prostředí kurátorovaných procesorem a GPU pro PyTorch odpovídajících různým verzím PyTorch.

Pokud chcete použít kurátorované prostředí, můžete místo toho spustit následující příkaz:

curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)

Pokud chcete zobrazit balíčky zahrnuté v kurátorovaném prostředí, můžete na disk zapsat závislosti conda:

pytorch_env.save_to_directory(path=curated_env_name)

Ujistěte se, že kurátorované prostředí obsahuje všechny závislosti vyžadované trénovacím skriptem. Pokud ne, budete muset upravit prostředí tak, aby zahrnovalo chybějící závislosti. Pokud se prostředí upraví, musíte mu dát nový název, protože předpona AzureML je vyhrazená pro kurátorovaná prostředí. Pokud jste upravili soubor YAML závislostí conda, můžete z něj vytvořit nové prostředí s novým názvem, například:

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

Pokud jste místo toho upravili kurátorovaný objekt prostředí přímo, můžete toto prostředí naklonovat s novým názvem:

pytorch_env = pytorch_env.clone(new_name='pytorch-1.6-gpu')

Vytvoření vlastního prostředí

Můžete také vytvořit vlastní prostředí Azure Machine Učení, které zapouzdřuje závislosti trénovacího skriptu.

Nejprve definujte závislosti conda v souboru YAML; v tomto příkladu je soubor pojmenován conda_dependencies.yml.

channels:
- conda-forge
dependencies:
- python=3.7
- pip=21.3.1
- pip:
  - azureml-defaults
  - torch==1.6.0
  - torchvision==0.7.0
  - future==0.17.1
  - pillow

Vytvořte prostředí Azure Machine Učení z této specifikace prostředí Conda. Prostředí se zabalí do kontejneru Dockeru za běhu.

Pokud není zadaná žádná základní image, azure machine Učení jako základní image použije image azureml.core.environment.DEFAULT_CPU_IMAGE procesoru. Vzhledem k tomu, že tento příklad spouští trénování v clusteru GPU, budete muset zadat základní image GPU, která má potřebné ovladače GPU a závislosti. Azure Machine Učení udržuje sadu základních imagí publikovaných ve službě Microsoft Container Registry (MCR), kterou můžete použít. Další informace najdete v úložišti AzureML-Containers Na GitHubu.

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

# Specify a GPU base image
pytorch_env.docker.enabled = True
pytorch_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04'

Tip

Volitelně můžete všechny závislosti zachytit přímo ve vlastní imagi Dockeru nebo souboru Dockerfile a vytvořit z toho prostředí. Další informace najdete v tématu Trénování s vlastní imagí.

Další informace o vytváření a používání prostředí najdete v tématu Vytváření a používání softwarových prostředí v azure machine Učení.

Konfigurace a odeslání trénovacího spuštění

Vytvoření ScriptRunConfig

Vytvořte objekt ScriptRunConfig pro zadání podrobností konfigurace vaší trénovací úlohy, včetně trénovacího skriptu, prostředí pro použití a cílového výpočetního objektu, na kterém se má spustit. Všechny argumenty trénovacího skriptu se předají přes příkazový řádek, pokud je zadaný v parametru arguments . Následující kód nakonfiguruje úlohu PyTorch s jedním uzlem.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='pytorch_train.py',
                      arguments=['--num_epochs', 30, '--output_dir', './outputs'],
                      compute_target=compute_target,
                      environment=pytorch_env)

Upozorňující

Azure Machine Učení spouští trénovací skripty zkopírováním celého zdrojového adresáře. Pokud máte citlivá data, která nechcete nahrát, použijte soubor .ignore nebo je nezahrňte do zdrojového adresáře . Místo toho přistupovat k datům pomocí datové sady Azure Machine Učení.

Další informace o konfiguraci úloh pomocí ScriptRunConfig najdete v tématu Konfigurace a odeslání trénovacích spuštění.

Upozorňující

Pokud jste dříve ke konfiguraci trénovacích úloh PyTorch používali estimátor PyTorch, mějte na paměti, že od verze SDK 1.19.0 jsou estimátory zastaralé. Sada Azure Machine Učení SDK >= 1.15.0 představuje doporučený způsob konfigurace trénovacích úloh, včetně těch, které používají architektury hlubokého učení. Běžné dotazy k migraci najdete v průvodci migrací estimátoru do ScriptRunConfig.

Odeslání spuštění

Objekt Spustit poskytuje rozhraní historie spuštění, zatímco úloha běží a po dokončení.

run = Experiment(ws, name='Tutorial-pytorch-birds').submit(src)
run.wait_for_completion(show_output=True)

Co se stane během provádění spuštění

Při spuštění běhu prochází následujícími fázemi:

  • Příprava: Image Dockeru se vytvoří podle definovaného prostředí. Image se nahraje do registru kontejneru pracovního prostoru a pro pozdější spuštění se ukládá do mezipaměti. Protokoly se také streamují do historie spuštění a dají se zobrazit pro monitorování průběhu. Pokud je místo toho zadané kurátorované prostředí, použije se image uložená v mezipaměti, která kurátorované prostředí zálohuje.

  • Škálování: Cluster se pokusí vertikálně navýšit kapacitu, pokud cluster Batch AI vyžaduje ke spuštění více uzlů, než je aktuálně k dispozici.

  • Spuštěno: Všechny skripty ve složce skriptu se nahrají do cílového výpočetního objektu, úložiště dat se připojí nebo zkopírují a script spustí se. Výstupy ze stdoutu a složky ./logs se streamují do historie spuštění a lze je použít k monitorování spuštění.

  • Následné zpracování: Složka ./outputs spuštění se zkopíruje do historie spuštění.

Registrace nebo stažení modelu

Jakmile model vytrénujete, můžete ho zaregistrovat do svého pracovního prostoru. Registrace modelu umožňuje ukládat a spravovat verze modelů v pracovním prostoru a zjednodušit správu modelů a nasazení.

model = run.register_model(model_name='pytorch-birds', model_path='outputs/model.pt')

Tip

Postup nasazení obsahuje část o registraci modelů, ale můžete přeskočit přímo k vytvoření cílového výpočetního objektu pro nasazení, protože už máte zaregistrovaný model.

Místní kopii modelu si můžete stáhnout také pomocí objektu Spustit. V trénovacím skriptu pytorch_train.pyuloží objekt PyTorch zachová model do místní složky (místní do cílového výpočetního objektu). Ke stažení kopie můžete použít objekt Spustit.

# Create a model folder in the current directory
os.makedirs('./model', exist_ok=True)

# Download the model from run history
run.download_file(name='outputs/model.pt', output_file_path='./model/model.pt'), 

Distribuované trénování

Azure Machine Učení také podporuje distribuované úlohy PyTorch s více uzly, abyste mohli škálovat trénovací úlohy. Distribuované úlohy PyTorch můžete snadno spouštět a azure machine Učení budou spravovat orchestraci za vás.

Azure Machine Učení podporuje spouštění distribuovaných úloh PyTorch s integrovaným modulem DistributedDataParallel v horovodu i PyTorchu.

Další informace o distribuovaném trénování najdete v průvodci trénováním distribuovaného GPU.

Export do ONNX

Pokud chcete optimalizovat odvozování pomocí modulu RUNTIME ONNX, převeďte trénovaný model PyTorch do formátu ONNX. Odvozování neboli bodování modelu je fáze, ve které se nasazený model používá k predikci, nejčastěji u produkčních dat. Příklad najdete v kurzu Export modelu z PyTorch do ONNX.

Další kroky

V tomto článku jste natrénovali a zaregistrovali hluboké učení, neurální síť pomocí PyTorchu na azure Machine Učení. Pokud chcete zjistit, jak nasadit model, pokračujte v našem článku o nasazení modelu.