Share via


TensorFlow-modellen op schaal trainen met Azure Machine Learning SDK (v1)

VAN TOEPASSING OP: Python SDK azureml v1

In dit artikel leert u hoe u uw TensorFlow-trainingsscripts op schaal uitvoert met behulp van Azure Machine Learning.

In dit voorbeeld wordt een TensorFlow-model getraind en geregistreerd om handgeschreven cijfers te classificeren met behulp van een deep neural network (DNN).

Of u nu een TensorFlow-model ontwikkelt vanaf de basis of als u een bestaand model naar de cloud brengt, kunt u Azure Machine Learning gebruiken om opensource-trainingstaken uit te schalen om modellen op productieniveau te bouwen, implementeren, versien en bewaken.

Vereisten

Voer deze code uit op een van deze omgevingen:

  • Azure Machine Learning-rekenproces: er zijn geen downloads of installatie nodig

    • Voltooi de quickstart: Aan de slag met Azure Machine Learning om een toegewezen notebookserver te maken die vooraf is geladen met de SDK en de voorbeeldopslagplaats.
    • Zoek in de map Deep Learning-voorbeelden op de notebookserver een voltooid en uitgebreid notebook door naar deze map te navigeren: how-to-use-azureml > ml-frameworks > tensorflow > train-hyperparameter-tune-deploy-with-tensorflow folder.
  • Uw eigen Jupyter Notebook-server

    U kunt ook een voltooide Jupyter Notebook-versie van deze handleiding vinden op de pagina met GitHub-voorbeelden. Het notebook bevat uitgebreide secties met intelligente afstemming van hyperparameters, modelimplementatie en notebookwidgets.

Voordat u de code in dit artikel kunt uitvoeren om een GPU-cluster te maken, moet u een quotumverhoging aanvragen voor uw werkruimte.

Het experiment instellen

In deze sectie wordt het trainingsexperiment ingesteld door de vereiste Python-pakketten te laden, een werkruimte te initialiseren, het rekendoel te maken en de trainingsomgeving te definiëren.

Pakketten importeren

Importeer eerst de benodigde Python-bibliotheken.

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

Een werkruimte initialiseren

De Azure Machine Learning-werkruimte is de resource op het hoogste niveau voor de service. Het biedt u een centrale plek om te werken met alle artefacten die u maakt. In de Python SDK hebt u toegang tot de werkruimteartefacten door een workspace object te maken.

Maak een werkruimteobject op basis van het config.json bestand dat is gemaakt in de sectie Vereisten.

ws = Workspace.from_config()

Een bestandsgegevensset maken

Een FileDataset object verwijst naar een of meerdere bestanden in uw werkruimtegegevensarchief of openbare URL's. De bestanden kunnen van elke indeling zijn en de klasse biedt u de mogelijkheid om de bestanden te downloaden of te koppelen aan uw berekening. Door een FileDatasette maken, maakt u een verwijzing naar de locatie van de gegevensbron. Als u transformaties hebt toegepast op de gegevensset, worden ze ook opgeslagen in de gegevensset. De gegevens blijven bewaard op de bestaande locatie, dus maakt u geen extra opslagkosten. Zie het artikel Registratiegegevenssets maken voor meer informatie over het Dataset pakket.

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)

Gebruik de register() methode om de gegevensset te registreren bij uw werkruimte, zodat deze kunnen worden gedeeld met anderen, opnieuw kunnen worden gebruikt in verschillende experimenten en waarnaar wordt verwezen met de naam in uw trainingsscript.

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()

Een rekendoel maken

Maak een rekendoel waarop uw TensorFlow-taak kan worden uitgevoerd. In dit voorbeeld maakt u een Azure Machine Learning-rekencluster met GPU.

Belangrijk

Voordat u een GPU-cluster kunt maken, moet u een quotumverhoging aanvragen voor uw werkruimte.

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)

Zie het artikel over een rekendoel voor meer informatie over rekendoelen.

Uw omgeving definiëren

Als u de Azure Machine Learning-omgeving wilt definiëren waarmee de afhankelijkheden van uw trainingsscript worden ingekapseld, kunt u een aangepaste omgeving definiëren of een gecureerde Azure Machine Learning-omgeving gebruiken.

Een gecureerde omgeving gebruiken

Azure Machine Learning biedt vooraf samengestelde, gecureerde omgevingen als u uw eigen omgeving niet wilt definiëren. Azure Machine Learning heeft verschillende gecureerde CPU- en GPU-omgevingen voor TensorFlow die overeenkomen met verschillende versies van TensorFlow. U kunt de nieuwste versie van deze omgeving gebruiken met behulp van de @latest instructie. Zie Azure Machine Learning Gecureerde omgevingen voor meer informatie.

Als u een gecureerde omgeving wilt gebruiken, is de code vergelijkbaar met het volgende voorbeeld:

curated_env_name = 'AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu'
tf_env = Environment.get(workspace=ws, name=curated_env_name)

Als u de pakketten wilt zien die zijn opgenomen in de gecureerde omgeving, kunt u de conda-afhankelijkheden naar schijf schrijven:


tf_env.save_to_directory(path=curated_env_name)

Zorg ervoor dat de gecureerde omgeving alle afhankelijkheden bevat die vereist zijn voor uw trainingsscript. Zo niet, dan moet u de omgeving wijzigen om de ontbrekende afhankelijkheden op te nemen. Als de omgeving wordt gewijzigd, moet u deze een nieuwe naam geven, omdat het voorvoegsel 'AzureML' is gereserveerd voor gecureerde omgevingen. Als u het YAML-bestand met conda-afhankelijkheden hebt gewijzigd, kunt u er een nieuwe omgeving van maken met een nieuwe naam, bijvoorbeeld:


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

Als u in plaats daarvan het gecureerde omgevingsobject rechtstreeks hebt gewijzigd, kunt u die omgeving klonen met een nieuwe naam:


tf_env = tf_env.clone(new_name='my-AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu')

Een aangepaste omgeving maken

U kunt ook uw eigen Azure Machine Learning-omgeving maken waarmee de afhankelijkheden van uw trainingsscript worden ingekapseld.

Definieer eerst uw conda-afhankelijkheden in een YAML-bestand; in dit voorbeeld heeft het bestand de naam conda_dependencies.yml.

channels:
- conda-forge
dependencies:
- python=3.7
- pip:
  - azureml-defaults
  - tensorflow-gpu==2.2.0

Maak een Azure Machine Learning-omgeving op basis van deze conda-omgevingsspecificatie. De omgeving wordt tijdens runtime verpakt in een Docker-container.

Als er geen basisinstallatiekopieën zijn opgegeven, gebruikt Azure Machine Learning standaard een CPU-installatiekopieën azureml.core.environment.DEFAULT_CPU_IMAGE als basisinstallatiekopieën. Omdat in dit voorbeeld training wordt uitgevoerd op een GPU-cluster, moet u een GPU-basisinstallatiekopieën opgeven met de benodigde GPU-stuurprogramma's en afhankelijkheden. Azure Machine Learning onderhoudt een set basisinstallatiekopieën die zijn gepubliceerd op Microsoft Container Registry (MCR) die u kunt gebruiken. Zie de GitHub-opslagplaats Azure/AzureML-Containers voor meer informatie.

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

U kunt eventueel al uw afhankelijkheden rechtstreeks in een aangepaste Docker-installatiekopieën of Dockerfile vastleggen en daar uw omgeving van maken. Zie Trainen met aangepaste installatiekopieën voor meer informatie.

Zie Software-omgevingen maken en gebruiken in Azure Machine Learning voor meer informatie over het maken en gebruiken van omgevingen.

Uw trainingsuitvoering configureren en verzenden

Een ScriptRunConfig maken

Maak een ScriptRunConfig-object om de configuratiegegevens van uw trainingstaak op te geven, inclusief het trainingsscript, de omgeving die u wilt gebruiken en het rekendoel om uit te voeren. Argumenten voor uw trainingsscript worden doorgegeven via de opdrachtregel, indien opgegeven in de arguments parameter.

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)

Waarschuwing

Azure Machine Learning voert trainingsscripts uit door de volledige bronmap te kopiëren. Als u gevoelige gegevens hebt die u niet wilt uploaden, gebruikt u een .ignore-bestand of neemt u het niet op in de bronmap. Open in plaats daarvan uw gegevens met behulp van een Azure Machine Learning-gegevensset.

Zie Trainingsuitvoeringen configureren en verzenden voor meer informatie over het configureren van taken met ScriptRunConfig.

Waarschuwing

Als u eerder de TensorFlow-estimator hebt gebruikt om uw TensorFlow-trainingstaken te configureren, moet u er rekening mee houden dat Estimators zijn afgeschaft vanaf de SDK-release van 1.19.0. Met Azure Machine Learning SDK >= 1.15.0 is ScriptRunConfig de aanbevolen manier om trainingstaken te configureren, inclusief die met behulp van deep learning-frameworks. Zie de migratiehandleiding voor Estimator naar ScriptRunConfig voor algemene migratievragen.

Een uitvoering verzenden

Het run-object biedt de interface voor de uitvoeringsgeschiedenis terwijl de taak wordt uitgevoerd en nadat deze is voltooid.

run = Experiment(workspace=ws, name='Tutorial-TF-Mnist').submit(src)
run.wait_for_completion(show_output=True)

Wat gebeurt er tijdens de uitvoering van de uitvoering

Terwijl de uitvoering wordt uitgevoerd, worden de volgende fasen doorlopen:

  • Voorbereiden: Er wordt een Docker-installatiekopieën gemaakt op basis van de gedefinieerde omgeving. De installatiekopieën worden geüpload naar het containerregister van de werkruimte en in de cache opgeslagen voor latere uitvoeringen. Logboeken worden ook gestreamd naar de uitvoeringsgeschiedenis en kunnen worden bekeken om de voortgang te controleren. Als in plaats daarvan een gecureerde omgeving is opgegeven, wordt de back-up van de gecureerde omgeving in de cache gebruikt.

  • Schalen: Het cluster probeert omhoog te schalen als voor het Batch AI-cluster meer knooppunten nodig zijn om de uitvoering uit te voeren dan momenteel beschikbaar is.

  • Wordt uitgevoerd: Alle scripts in de scriptmap worden geüpload naar het rekendoel, gegevensarchieven worden gekoppeld of gekopieerd en de script scripts worden uitgevoerd. Uitvoer van stdout en de map ./logs worden gestreamd naar de uitvoeringsgeschiedenis en kunnen worden gebruikt om de uitvoering te bewaken.

  • Naverwerking: de map ./outputs van de uitvoering wordt gekopieerd naar de uitvoeringsgeschiedenis.

Een model registreren of downloaden

Nadat u het model hebt getraind, kunt u het registreren bij uw werkruimte. Met modelregistratie kunt u uw modellen opslaan en versien in uw werkruimte om modelbeheer en implementatie te vereenvoudigen.

Optioneel: door de parameters model_frameworkop te geven, model_framework_versionen resource_configurationer wordt geen codemodelimplementatie beschikbaar. Hiermee kunt u uw model rechtstreeks implementeren als een webservice vanuit het geregistreerde model en het ResourceConfiguration object definieert de rekenresource voor de webservice.

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))

U kunt ook een lokale kopie van het model downloaden met behulp van het run-object. In het trainingsscript tf_mnist.pyblijft een TensorFlow-spaarobject het model behouden in een lokale map (lokaal voor het rekendoel). U kunt het run-object gebruiken om een kopie te downloaden.

# 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)

Gedistribueerde training

Azure Machine Learning ondersteunt ook gedistribueerde TensorFlow-taken met meerdere knooppunten, zodat u uw trainingsworkloads kunt schalen. U kunt eenvoudig gedistribueerde TensorFlow-taken uitvoeren en Azure Machine Learning beheert de indeling voor u.

Azure Machine Learning biedt ondersteuning voor het uitvoeren van gedistribueerde TensorFlow-taken met de ingebouwde gedistribueerde trainings-API van Horovod en TensorFlow.

Zie de handleiding voor gedistribueerde GPU-training voor meer informatie over gedistribueerde training.

Een TensorFlow-model implementeren

De instructies voor de implementatie bevatten een sectie over het registreren van modellen, maar u kunt direct doorgaan met het maken van een rekendoel voor implementatie, omdat u al een geregistreerd model hebt.

(Preview) Implementatie van model zonder code

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

In plaats van de traditionele implementatieroute kunt u ook de functie voor implementatie zonder code (preview) voor TensorFlow gebruiken. Door uw model te registreren zoals hierboven wordt weergegeven met de model_framework, model_framework_versionen resource_configuration parameters, kunt u de deploy() statische functie gebruiken om uw model te implementeren.

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

In de volledige procedures wordt de implementatie in Azure Machine Learning uitgebreider behandeld.

Volgende stappen

In dit artikel hebt u een TensorFlow-model getraind en geregistreerd en geleerd over opties voor implementatie. Zie deze andere artikelen voor meer informatie over Azure Machine Learning.