Создание модели глубокого обучения TensorFlow в масштабе с помощью Машинное обучение AzureBuild a TensorFlow deep learning model at scale with Azure Machine Learning

Применимо к: даБазовый выпуск даКорпоративный выпуск                    (Обновление до выпуска "Корпоративный")APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

В этой статье показано, как выполнять сценарии обучения TensorFlow в масштабе с помощью класса средства оценки TensorFlow для машинное обучение Azure.This article shows you how to run your TensorFlow training scripts at scale using Azure Machine Learning's TensorFlow estimator class. В этом примере производится обучение и регистрация модели TensorFlow для классификации рукописных цифр с помощью глубокой нейронной сети (DNN).This example trains and registers a TensorFlow model to classify handwritten digits using a deep neural network (DNN).

Независимо от того, разрабатываете ли вы модель TensorFlow с нуля или используете существующую модель в облаке, вы можете использовать машинное обучение Azure для масштабирования заданий обучения с открытым исходным кодом для создания, развертывания, версии и мониторинга моделей производственного уровня. .Whether you're developing a TensorFlow model from the ground-up or you're bringing an existing model into the cloud, you can use Azure Machine Learning to scale out open-source training jobs to build, deploy, version, and monitor production-grade models.

Дополнительные сведения о глубоком обучении и машинном обучении.Learn more about deep learning vs machine learning.

предварительным требованиямPrerequisites

Запустите этот код в любой из этих сред:Run this code on either of these environments:

  • Машинное обучение Azure виртуальной машины записной книжки — Загрузка или установка не требуетсяAzure Machine Learning Notebook VM - no downloads or installation necessary

    • Выполните инструкции из учебника Настройка среды и рабочей области , чтобы создать выделенный сервер записной книжки, предварительно загруженный с помощью пакета SDK и примера репозитория.Complete the Tutorial: Setup environment and workspace to create a dedicated notebook server pre-loaded with the SDK and the sample repository.
    • В папке примеры глубокого обучения на сервере записной книжки найдите готовую и развернутую записную книжку, перейдя в этот каталог: практические советы по использованию azureml > ML-frameworks > tensorflow > развертывания > Train-i Parameter-Настройка-Deploy-with-tensorflow папка.In the samples deep learning folder on the notebook server, find a completed and expanded notebook by navigating to this directory: how-to-use-azureml > ml-frameworks > tensorflow > deployment > train-hyperparameter-tune-deploy-with-tensorflow folder.
  • Собственный сервер Jupyter NotebookYour own Jupyter Notebook server

    Вы также можете найти завершенную Jupyter Notebook версию этого руководства на странице примеров GitHub.You can also find a completed Jupyter Notebook version of this guide on the GitHub samples page. Записная книжка включает в себя развернутые разделы, охватывающие интеллектуальные настройки, развертывание моделей и мини-приложения записных книжек.The notebook includes expanded sections covering intelligent hyperparameter tuning, model deployment, and notebook widgets.

Настройка экспериментаSet up the experiment

В этом разделе выполняется настройка обучающего эксперимента путем загрузки требуемых пакетов Python, инициализации рабочей области, создания эксперимента и отправки обучающих данных и сценариев обучения.This section sets up the training experiment by loading the required Python packages, initializing a workspace, creating an experiment, and uploading the training data and training scripts.

Импорт пакетовImport packages

Сначала импортируйте необходимые библиотеки Python.First, import the necessary Python libraries.

import os
import urllib
import shutil
import azureml

from azureml.core import Experiment
from azureml.core import Workspace, Run

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

Инициализация рабочей областиInitialize a workspace

Машинное обучение Azure Рабочая область — это ресурс верхнего уровня для службы.The Azure Machine Learning workspace is the top-level resource for the service. Он обеспечивает централизованное расположение для работы со всеми создаваемыми артефактами.It provides you with a centralized place to work with all the artifacts you create. В пакете SDK для Python можно получить доступ к артефактам рабочей области, создав объект workspace .In the Python SDK, you can access the workspace artifacts by creating a workspace object.

Создайте объект рабочей области из файла config.json, созданного в разделе Предварительные требования.Create a workspace object from the config.json file created in the prerequisites section.

ws = Workspace.from_config()

Создание эксперимента глубокого обученияCreate a deep learning experiment

Создайте эксперимент и папку для хранения сценариев обучения.Create an experiment and a folder to hold your training scripts. В этом примере Создайте эксперимент с именем "TF-mnist".In this example, create an experiment called "tf-mnist".

script_folder = './tf-mnist'
os.makedirs(script_folder, exist_ok=True)

exp = Experiment(workspace=ws, name='tf-mnist')

Создание файлового набора данныхCreate a file dataset

Объект FileDataset ссылается на один или несколько файлов в хранилище данных рабочей области или общедоступных URL-адресов.A FileDataset object references one or multiple files in your workspace datastore or public urls. Это могут быть файлы любого формата, и с помощью этого класса вы сможете скачивать их или подключать к вычислительной среде.The files can be of any format, and the class provides you with the ability to download or mount the files to your compute. Создавая FileDataset, вы одновременно создаете ссылку на расположение источника данных.By creating a FileDataset, you create a reference to the data source location. Любые преобразования, примененные к такому набору данных, будут сохранены и в исходном наборе данных.If you applied any transformations to the data set, they will be stored in the data set as well. Данные хранятся только в исходном расположении, а значит не потребуется лишних расходов на хранение.The data remains in its existing location, so no extra storage cost is incurred. Дополнительные сведения см. в соответствующем практическом руководстве по пакету Dataset.See the how-to guide on the Dataset package for more information.

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(), чтобы зарегистрировать набор данных в рабочей области, чтобы предоставить доступ к ним другим пользователям, повторно использовать их в различных экспериментах и называть их по имени в обучающем скрипте.Use the register() method to register the data set to your workspace so they can be shared with others, reused across various experiments, and referred to by name in your training script.

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

Создание целевого объекта вычисленийCreate a compute target

Создайте целевой объект вычислений для выполнения задания TensorFlow.Create a compute target for your TensorFlow job to run on. В этом примере создайте кластерный Машинное обучение Azure вычислений с поддержкой GPU.In this example, create a GPU-enabled Azure Machine Learning compute cluster.

cluster_name = "gpucluster"

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)

Дополнительные сведения о целевых объектах вычислений см. в статье что такое целевые показатели вычислений .For more information on compute targets, see the what is a compute target article.

Создание средства оценки TensorFlowCreate a TensorFlow estimator

Средство оценки TensorFlow предоставляет простой способ запуска задания обучения TensorFlow на целевом объекте вычислений.The TensorFlow estimator provides a simple way of launching a TensorFlow training job on a compute target.

Оценщик TensorFlow реализуется с помощью универсального класса estimator , который можно использовать для поддержки любой платформы.The TensorFlow estimator is implemented through the generic estimator class, which can be used to support any framework. Дополнительные сведения о учебных моделях с помощью универсального средства оценки см. в статье обучение моделей с машинное обучение Azure помощью средства оценки .For more information about training models using the generic estimator, see train models with Azure Machine Learning using estimator

Если для выполнения сценария обучения требуются дополнительные пакеты PIP или conda, можно установить пакеты в полученном образе DOCKER, передав их имена с помощью pip_packages и conda_packages аргументов.If your training script needs additional pip or conda packages to run, you can have the packages installed on the resulting Docker image by passing their names through the pip_packages and conda_packages arguments.

script_params = {
    '--data-folder': dataset.as_named_input('mnist').as_mount(),
    '--batch-size': 50,
    '--first-layer-neurons': 300,
    '--second-layer-neurons': 100,
    '--learning-rate': 0.01
}

est = TensorFlow(source_directory=script_folder,
                 entry_script='tf_mnist.py',
                 script_params=script_params,
                 compute_target=compute_target,
                 use_gpu=True)

Совет

В класс средства оценки Tensorflow добавлена поддержка Tensorflow 2,0 .Support for Tensorflow 2.0 has been added to the Tensorflow estimator class. Дополнительные сведения см. в записи блога .See the blog post for more information.

Отправка запускаSubmit a run

Объект Run предоставляет интерфейс для журнала выполнения во время выполнения задания и после его завершения.The Run object provides the interface to the run history while the job is running and after it has completed.

run = exp.submit(est)
run.wait_for_completion(show_output=True)

При выполнении выполнения он проходит следующие этапы.As the Run is executed, it goes through the following stages:

  • Подготовка. образ DOCKER создается в соответствии с оценкой TensorFlow.Preparing: A Docker image is created according to the TensorFlow estimator. Образ отправляется в реестр контейнеров рабочей области и кэшируется для последующего выполнения.The image is uploaded to the workspace's container registry and cached for later runs. Журналы также передаются в журнал выполнения и могут быть просмотрены для отслеживания хода выполнения.Logs are also streamed to the run history and can be viewed to monitor progress.

  • Масштабирование. Кластер пытается выполнить масштабирование, если кластеру Batch AI требуется больше узлов для выполнения выполнения, чем в настоящее время доступно.Scaling: The cluster attempts to scale up if the Batch AI cluster requires more nodes to execute the run than are currently available.

  • Выполняется: все скрипты в папке Script передаются в целевой объект вычислений, хранилища данных подключаются или копируются, а entry_script выполняется.Running: All scripts in the script folder are uploaded to the compute target, data stores are mounted or copied, and the entry_script is executed. Выходные данные из STDOUT и папки/логс передаются в журнал выполнения и могут использоваться для наблюдения за выполнением.Outputs from stdout and the ./logs folder are streamed to the run history and can be used to monitor the run.

  • Пост-обработка. папка/Outputs для выполнения копируется в журнал выполнения.Post-Processing: The ./outputs folder of the run is copied over to the run history.

Регистрация или скачивание моделиRegister or download a model

После обучения модели ее можно зарегистрировать в рабочей области.Once you've trained the model, you can register it to your workspace. Регистрация модели позволяет хранить и отменять версии моделей в рабочей области, чтобы упростить Управление моделями и их развертывание.Model registration lets you store and version your models in your workspace to simplify model management and deployment. Если указать параметры model_framework, model_framework_versionи resource_configuration, то развертывание модели без кода станет недоступным.By specifying the parameters model_framework, model_framework_version, and resource_configuration, no-code model deployment becomes available. Это позволяет напрямую развернуть модель в качестве веб-службы из зарегистрированной модели, а объект ResourceConfiguration определяет ресурс вычислений для веб-службы.This allows you to directly deploy your model as a web service from the registered model, and the ResourceConfiguration object defines the compute resource for the web service.

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

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

Вы также можете скачать локальную копию модели с помощью объекта Run.You can also download a local copy of the model by using the Run object. В mnist-tf.pyскрипте обучения объект TensorFlow хранителя сохраняет модель в локальной папке (локальную для целевого объекта вычислений).In the training script mnist-tf.py, a TensorFlow saver object persists the model to a local folder (local to the compute target). Для скачивания копии можно использовать объект Run.You can use the Run object to download a copy.

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

for f in run.get_file_names():
    if f.startswith('outputs/model'):
        output_file_path = os.path.join('./model', f.split('/')[-1])
        print('Downloading from {} to {} ...'.format(f, output_file_path))
        run.download_file(name=f, output_file_path=output_file_path)

Распределенное обучениеDistributed training

TensorFlow оценщик также поддерживает распределенное обучение между кластерами ЦП и GPU.The TensorFlow estimator also supports distributed training across CPU and GPU clusters. Вы можете легко выполнять распределенные задания TensorFlow, а Машинное обучение Azure будет управлять согласованием.You can easily run distributed TensorFlow jobs and Azure Machine Learning will manage the orchestration for you.

Служба машинного обучения Azure поддерживает два метода распределенного обучения в TensorFlow.Azure Machine Learning supports two methods of distributed training in TensorFlow:

HorovodHorovod

Хоровод — это платформа с открытым исходным кодом для распределенного обучения, разработанного Uber.Horovod is an open-source framework for distributed training developed by Uber. Он предоставляет простой путь к распределенным заданиям TensorFlow GPU.It offers an easy path to distributed GPU TensorFlow jobs.

Чтобы использовать хоровод, укажите объект MpiConfiguration для параметра distributed_training в конструкторе TensorFlow.To use Horovod, specify an MpiConfiguration object for the distributed_training parameter in the TensorFlow constructor. Этот параметр обеспечивает установку библиотеки хоровод для использования в обучающем скрипте.This parameter ensures that Horovod library is installed for you to use in your training script.

from azureml.core.runconfig import MpiConfiguration
from azureml.train.dnn import TensorFlow

# Tensorflow constructor
estimator= TensorFlow(source_directory=project_folder,
                      compute_target=compute_target,
                      script_params=script_params,
                      entry_script='script.py',
                      node_count=2,
                      process_count_per_node=1,
                      distributed_training=MpiConfiguration(),
                      framework_version='1.13',
                      use_gpu=True)

Сервер параметровParameter server

Можно также запустить собственное распределенное обучение TensorFlow, которое использует модель сервера параметров.You can also run native distributed TensorFlow, which uses the parameter server model. В этом методе обучение проводится в кластере серверов параметров и рабочих ролей.In this method, you train across a cluster of parameter servers and workers. Во время обучения рабочие роли вычисляют градиенты, а серверы параметров выполняют статистическую обработку градиентов.The workers calculate the gradients during training, while the parameter servers aggregate the gradients.

Чтобы использовать метод сервера параметров, укажите объект TensorflowConfiguration для параметра distributed_training в конструкторе TensorFlow.To use the parameter server method, specify a TensorflowConfiguration object for the distributed_training parameter in the TensorFlow constructor.

from azureml.train.dnn import TensorFlow

distributed_training = TensorflowConfiguration()
distributed_training.worker_count = 2

# Tensorflow constructor
estimator= TensorFlow(source_directory=project_folder,
                      compute_target=compute_target,
                      script_params=script_params,
                      entry_script='script.py',
                      node_count=2,
                      process_count_per_node=1,
                      distributed_training=distributed_training,
                      use_gpu=True)

# submit the TensorFlow job
run = exp.submit(tf_est)

Определение спецификаций кластера в "TF_CONFIG"Define cluster specifications in 'TF_CONFIG`

Кроме того, для tf.train.ClusterSpecтребуются сетевые адреса и порты кластера, поэтому машинное обучение Azure задает переменную среды TF_CONFIG.You also need the network addresses and ports of the cluster for the tf.train.ClusterSpec, so Azure Machine Learning sets the TF_CONFIG environment variable for you.

Переменная среды TF_CONFIG представляет собой строку JSON.The TF_CONFIG environment variable is a JSON string. Ниже приведен пример переменной для сервера параметров.Here is an example of the variable for a parameter server:

TF_CONFIG='{
    "cluster": {
        "ps": ["host0:2222", "host1:2222"],
        "worker": ["host2:2222", "host3:2222", "host4:2222"],
    },
    "task": {"type": "ps", "index": 0},
    "environment": "cloud"
}'

Для tf.estimator API высокого уровня TensorFlow TensorFlow анализирует переменную TF_CONFIG и создает спецификацию кластера.For TensorFlow's high level tf.estimator API, TensorFlow parses the TF_CONFIG variable and builds the cluster spec for you.

Для обучения API-интерфейсы нижнего уровня TensorFlow Проанализируйте переменную TF_CONFIG и создайте tf.train.ClusterSpec в коде обучения.For TensorFlow's lower-level core APIs for training, parse the TF_CONFIG variable and build the tf.train.ClusterSpec in your training code.

import os, json
import tensorflow as tf

tf_config = os.environ.get('TF_CONFIG')
if not tf_config or tf_config == "":
    raise ValueError("TF_CONFIG not found.")
tf_config_json = json.loads(tf_config)
cluster_spec = tf.train.ClusterSpec(cluster)

РазвертываниеDeployment

Только что зарегистрированная модель может быть развернута точно так же, как и любая другая Зарегистрированная модель в Машинное обучение Azure, независимо от того, какой механизм оценки использовался для обучения.The model you just registered can be deployed the exact same way as any other registered model in Azure Machine Learning, regardless of which estimator you used for training. Руководство по развертыванию содержит раздел, посвященный регистрации моделей, но можно сразу перейти к созданию целевого объекта вычислений для развертывания, так как у вас уже есть Зарегистрированная модель.The deployment how-to contains a section on registering models, but you can skip directly to creating a compute target for deployment, since you already have a registered model.

Образца Развертывание модели без кода(Preview) No-code model deployment

Вместо традиционного маршрута развертывания можно также использовать функцию развертывания без кода (Предварительная версия) для Tensorflow.Instead of the traditional deployment route, you can also use the no-code deployment feature (preview)for Tensorflow. Зарегистрировав модель, как показано выше, с параметрами model_framework, model_framework_versionи resource_configuration, можно просто использовать статическую функцию deploy() для развертывания модели.By registering your model as shown above with the model_framework, model_framework_version, and resource_configuration parameters, you can simply use the deploy() static function to deploy your model.

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

Полное Описание процесса развертывания в машинное обучение Azure более подробно.The full how-to covers deployment in Azure Machine Learning in greater depth.

Дополнительная информацияNext steps

В этой статье вы обучили и зарегистрировали модель TensorFlow и узнали о вариантах развертывания.In this article, you trained and registered a TensorFlow model, and learned about options for deployment. Дополнительные сведения о Машинное обучение Azure см. в других статьях.See these other articles to learn more about Azure Machine Learning.