Trénování modelů PyTorch ve velkém měřítku pomocí sady Azure Machine Learning 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 Learning.
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 přenesete existující model do cloudu, můžete pomocí Azure Machine Learning škálovat opensourcové trénovací úlohy pomocí elastických cloudových výpočetních prostředků. Pomocí služby Azure Machine Learning můžete vytvářet, nasazovat, nasazovat, verze a monitorovat modely na úrovni produkčního prostředí.
Požadavky
Tento kód spusťte v některém z těchto prostředí:
Výpočetní instance Služby Azure Machine Learning – není potřeba stahovat ani instalovat
- Dokončete rychlý start: Začněte se službou Azure Machine Learning a vytvořte předem načtený vyhrazený server poznámkových bloků 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
- Nainstalujte sadu Azure Machine Learning SDK (>= 1.15.0).
- Vytvořte konfigurační soubor pracovního prostoru.
- Stažení ukázkových souborů skriptů
pytorch_train.py
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 Azure Machine Learning 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í služby Azure Machine Learning.
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 Machine Learning s podporou GPU.
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 Learning, které zapouzdřuje závislosti trénovacího skriptu, můžete buď definovat vlastní prostředí, nebo použít kurátorované prostředí Azure Machine Learning.
Použití kurátorovaného prostředí
Azure Machine Learning 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 Learning, 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 Learning 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 Learning 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 Learning 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í ve službě Azure Machine Learning.
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 Learning 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 můžete přistupovat k datům pomocí datové sady Azure Machine Learning.
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 Learning SDK >= 1.15.0 představuje doporučený způsob konfigurace trénovacích úloh, včetně těch, které používají architektury hloubkové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.py
uloží 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 Learning 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 Learning bude spravovat orchestraci za vás.
Azure Machine Learning podporuje spouštění distribuovaných úloh PyTorch s integrovaným modulem DistributedDataParallel pro Horovod i PyTorch.
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 ve službě Azure Machine Learning. Pokud chcete zjistit, jak nasadit model, pokračujte v našem článku o nasazení modelu.