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
- Installeer de Azure Machine Learning SDK (>= 1.15.0).
- Maak een werkruimteconfiguratiebestand.
-
Download de voorbeeldscriptbestanden
tf_mnist.py
enutils.py
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 FileDataset
te 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_framework
op te geven, model_framework_version
en resource_configuration
er 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.py
blijft 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_version
en 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.