Trénování modelů TensorFlow 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 spustit trénovací skripty TensorFlow ve velkém měřítku pomocí služby Azure Machine Učení.

Tento příklad trénuje a registruje model TensorFlow ke klasifikaci ručně psaných číslic pomocí hluboké neurální sítě (DNN).

Bez ohledu na to, jestli vyvíjíte model TensorFlow od základů nebo přenesete existující model do cloudu, můžete použít Azure Machine Učení k horizontálnímu navýšení kapacity opensourcových trénovacích úloh k sestavování, nasazování, verzí a monitorování modelů 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 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-use-azureml > ml-frameworks > tensorflow > train-hyperparameter-tune-deploy-with-tensorflow .
  • 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 urllib
import shutil
import azureml

from azureml.core import Experiment
from azureml.core import Workspace, Run
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()

Vytvoření datové sady souborů

FileDataset Objekt odkazuje na jeden nebo více souborů v úložišti dat pracovního prostoru nebo na veřejné adresy URL. Soubory mohou být libovolného formátu a třída vám poskytuje možnost stáhnout nebo připojit soubory k výpočetním prostředkům. Vytvořením objektu FileDatasetvytvoříte odkaz na umístění zdroje dat. Pokud jste u datové sady použili nějaké transformace, budou uloženy i v sadě dat. Data zůstávají v existujícím umístění, takže se neúčtují žádné další náklady na úložiště. Další informace o Dataset balíčku najdete v článku Vytvoření registračních datových sad.

from azureml.core.dataset import Dataset

web_paths = [
            'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
            ]
dataset = Dataset.File.from_files(path = web_paths)

register() Tato metoda slouží k registraci datové sady do vašeho pracovního prostoru, aby je bylo možné sdílet s ostatními, opakovaně používat různé experimenty a odkazovat na ně v trénovacím skriptu.

dataset = dataset.register(workspace=ws,
                           name='mnist-dataset',
                           description='training and test dataset',
                           create_new_version=True)

# list the files referenced by dataset
dataset.to_path()

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

Vytvořte cílový výpočetní objekt pro spuštění úlohy TensorFlow. 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.

cluster_name = "gpu-cluster"

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)

    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

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í. Azure Machine Učení má několik prostředí kurátorovaných procesorem a GPU pro TensorFlow odpovídajících různým verzím TensorFlow. Pomocí direktivy @latest můžete použít nejnovější verzi tohoto prostředí. Další informace najdete v tématu Azure Machine Učení kurátorovaná prostředí.

Pokud chcete použít kurátorované prostředí, bude kód vypadat podobně jako v následujícím příkladu:

curated_env_name = 'AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu'
tf_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:


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


tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-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:


tf_env = tf_env.clone(new_name='my-AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-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:
  - azureml-defaults
  - tensorflow-gpu==2.2.0

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 Azure/AzureML-Containers na GitHubu.

tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu', file_path='./conda_dependencies.yml')

# Specify a GPU base image
tf_env.docker.enabled = True
tf_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 .

from azureml.core import ScriptRunConfig

args = ['--data-folder', dataset.as_mount(),
        '--batch-size', 64,
        '--first-layer-neurons', 256,
        '--second-layer-neurons', 128,
        '--learning-rate', 0.01]

src = ScriptRunConfig(source_directory=script_folder,
                      script='tf_mnist.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=tf_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 používali estimátor TensorFlow ke konfiguraci trénovacích úloh TensorFlow, mějte na paměti, že od verze sady 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(workspace=ws, name='Tutorial-TF-Mnist').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í.

Volitelné: Zadáním parametrů model_framework, model_framework_versiona resource_configuration, no-code model nasazení bude k dispozici. To vám umožní přímo nasadit model jako webovou službu z registrovaného modelu a ResourceConfiguration objekt definuje výpočetní prostředek pro webovou službu.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='tf-mnist', 
                           model_path='outputs/model',
                           model_framework=Model.Framework.TENSORFLOW,
                           model_framework_version='2.0',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Místní kopii modelu si můžete stáhnout také pomocí objektu Spustit. V trénovacím skriptu tf_mnist.pyobjekt spořič TensorFlow 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)
run.download_files(prefix='outputs/model', output_directory='./model', append_prefix=False)

Distribuované trénování

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

Azure Machine Učení podporuje spouštění distribuovaných úloh TensorFlow s integrovaným integrovaným rozhraním API pro trénování TensorFlow i Horovodu.

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

Nasazení modelu TensorFlow

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.

(Preview) Nasazení modelu bez kódu

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti.

Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Místo tradiční trasy nasazení můžete také použít funkci nasazení bez kódu (Preview) pro TensorFlow. Registrací modelu, jak je znázorněno výše, model_frameworkmodel_framework_versionpomocí parametrů a resource_configuration , můžete použít deploy() statickou funkci k nasazení modelu.

service = Model.deploy(ws, "tensorflow-web-service", [model])

Úplný postup zahrnuje nasazení ve službě Azure Machine Učení podrobněji.

Další kroky

V tomto článku jste vytrénovali a zaregistrovali model TensorFlow a dozvěděli jste se o možnostech nasazení. Další informace o službě Azure Machine Učení najdete v těchto dalších článcích.