Обучение моделей с помощью оценщика Машинного обучения AzureTrain models with Azure Machine Learning using estimator

С помощью Машинного обучения Azure можно легко отправить скрипт обучения в различные целевые объекты вычислений, используя объекты RunConfiguration и ScriptRunConfig.With Azure Machine Learning, you can easily submit your training script to various compute targets, using RunConfiguration object and ScriptRunConfig object. Этот шаблон обеспечивает высокую гибкость и максимальный контроль.That pattern gives you a lot of flexibility and maximum control.

Чтобы облегчить работу с моделью глубокого обучения, в пакете SDK Машинного обучения Azure для Python предоставляется альтернативная высокоуровневая абстракция — класс оценщика, который позволяет пользователям легко создавать конфигурации запуска.To facilitate deep learning model training, the Azure Machine Learning Python SDK provides an alternative higher-level abstraction, the estimator class, which allows users to easily construct run configurations. Вы можете создать и применять общий класс Estimator для отправки скрипта обучения с помощью любой удобной платформы машинного обучения (например, scikit-learn) с целью его дальнейшего запуска в любом целевом объекте вычислений — на локальном компьютере, отдельной виртуальной машине в Azure или в кластере GPU в Azure.You can create and use a generic Estimator to submit training script using any learning framework you choose (such as scikit-learn) you want to run on any compute target, whether it's your local machine, a single VM in Azure, or a GPU cluster in Azure. Для заданий PyTorch и TensorFlow и Chainer в Машинном обучении Azure также предусмотрены соответствующие оценщики PyTorch, TensorFlow и Chainer, которые облегчают использование этих платформ.For PyTorch, TensorFlow and Chainer tasks, Azure Machine Learning also provides respective PyTorch, TensorFlow and Chainer estimators to simplify using these frameworks.

Обучение с оценщикомTrain with an estimator

После создания рабочей области и настройки вашей среды разработки для обучения модели в Машинном обучении Azure необходимо выполнить следующие действия:Once you've created your workspace and set up your development environment, training a model in Azure Machine Learning involves the following steps:

  1. Создайте удаленный целевой объект вычислений (обратите внимание, что в качестве целевого объекта вычислений также можно использовать локальный компьютер).Create a remote compute target (note you can also use local computer as compute target)
  2. Отправьте данные для обучения в хранилище данных (необязательно).Upload your training data to datastore (Optional)
  3. создать сценарий обучения;Create your training script
  4. создать объект Estimator;Create an Estimator object
  5. Отправьте класс оценщика в объект эксперимента в рабочей области.Submit the estimator to an experiment object under the workspace

В этой статье основное внимание уделено шагам 4–5.This article focuses on steps 4-5. Примеры для шагов 1–3 см. в статье Руководство 1. Обучение модели классификации изображений с помощью службы машинного обучения Azure.For steps 1-3, refer to the train a model tutorial for an example.

Одноузловое обучениеSingle-node training

Используйте Estimator для одноузлового тренировочного запуска в удаленной вычислительной среде в Azure для модели scikit-learn.Use an Estimator for a single-node training run on remote compute in Azure for a scikit-learn model. У вас уже должен быть создан объект compute_target целевого вычислительного ресурса и объект ds хранилища данных.You should have already created your compute target object compute_target and your datastore object ds.

from azureml.train.estimator import Estimator

script_params = {
    '--data-folder': ds.as_mount(),
    '--regularization': 0.8
}

sk_est = Estimator(source_directory='./my-sklearn-proj',
                   script_params=script_params,
                   compute_target=compute_target,
                   entry_script='train.py',
                   conda_packages=['scikit-learn'])

Этот фрагмент кода определяет следующие параметры конструктора Estimator.This code snippet specifies the following parameters to the Estimator constructor.

ПараметрParameter ОписаниеDescription
source_directory Локальный каталог, который содержит весь код, необходимый для задания обучения.Local directory that contains all of your code needed for the training job. Эта папка копируется с локального компьютера на удаленный вычислительный ресурс.This folder gets copied from your local machine to the remote compute
script_params Словарь, указав аргументы командной строки в сценарий обучения entry_script, в виде < аргумент командной строки, значение > пары.Dictionary specifying the command-line arguments to your training script entry_script, in the form of <command-line argument, value> pairs. Чтобы указать подробные флаг в script_params, используйте <command-line argument, "">.To specify a verbose flag in script_params, use <command-line argument, "">.
compute_target Удаленный целевой объект вычислений, на котором будет выполняться скрипт обучения. В нашем случае это кластер Вычислительной среды Машинного обучения Azure (AmlCompute).Remote compute target that your training script will run on, in this case an Azure Machine Learning Compute (AmlCompute) cluster. (Обратите внимание: даже если кластер AmlCompute чаще всего используется как целевой объект, вы можете выбрать другие типы целевых объектов вычислений, такие как виртуальные машины Azure или даже локальный компьютер.)(Please note even though AmlCompute cluster is the commonly used target, it is also possible to choose other compute target types such as Azure VMs or even local computer.)
entry_script Путь к файлу (относительно source_directory) сценария обучения, который будет выполняться на удаленном вычислительном ресурсе.Filepath (relative to the source_directory) of the training script to be run on the remote compute. В этой папке должны быть расположены этот файл и дополнительные файлы, от которых он зависит.This file, and any additional files it depends on, should be located in this folder
conda_packages Необходимый для сценария обучения список пакетов Python, которые нужно установить с помощью conda.List of Python packages to be installed via conda needed by your training script.

У конструктора есть другой параметр с именем pip_packages. Его можно использовать для всех необходимых пакетов pip.The constructor has another parameter called pip_packages that you use for any pip packages needed

Теперь, когда вы создали объект Estimator, можно выполнить задание обучения в удаленной вычислительной среде посредством вызова функции submit в объекте experiment Эксперимента.Now that you've created your Estimator object, submit the training job to be run on the remote compute with a call to the submit function on your Experiment object experiment.

run = experiment.submit(sk_est)
print(run.get_portal_url())

Важно!

Особые папки. Две папки — выходные данные и журналы, обрабатываются Машинным обучением Azure специальным образом.Special Folders Two folders, outputs and logs, receive special treatment by Azure Machine Learning. Если вы записываете файлы в папки с именами выходные данные и журналы, которые относятся к корневому каталогу (./outputs и ./logs соответственно), то эти файлы во время обучения автоматически будут отправляться в журнал выполнения, чтобы после завершения выполнения у вас был к ним доступ.During training, when you write files to folders named outputs and logs that are relative to the root directory (./outputs and ./logs, respectively), the files will automatically upload to your run history so that you have access to them once your run is finished.

Чтобы создать артефакты во время обучения (например, к файлам моделей, контрольным точкам, файлам данных или графическим изображениям), запишите их в папку ./outputs.To create artifacts during training (such as model files, checkpoints, data files, or plotted images) write these to the ./outputs folder.

Аналогичным образом можно записать любые журналы выполнения обучения в папку ./logs.Similarly, you can write any logs from your training run to the ./logs folder. Чтобы использовать интеграцию TensorBoard Машинного обучения Azure, убедитесь, что вы записываете журналы TensorBoard в эту папку.To utilize Azure Machine Learning's TensorBoard integration make sure you write your TensorBoard logs to this folder. Во время выполнения вы сможете запустить TensorBoard и выполнить потоковую передачу этих журналов.While your run is in progress, you will be able to launch TensorBoard and stream these logs. Позже вы также сможете восстановить журналы из любого из ваших предыдущих запусков.Later, you will also be able to restore the logs from any of your previous runs.

Например, чтобы загрузить файл, записанный в папку выходные данные локального компьютера, после запуска удаленного обучения выполните такую команду: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')For example, to download a file written to the outputs folder to your local machine after your remote training run: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Распределенное обучение и настройка образов DockerDistributed training and custom Docker images

Существуют два сценария дополнительного обучения, которые вы можете выполнить с помощью Estimator:There are two additional training scenarios you can carry out with the Estimator:

  • использование пользовательского образа Docker;Using a custom Docker image
  • распределенное обучение на кластере с несколькими узлами.Distributed training on a multi-node cluster

Ниже показан код, позволяющий выполнить распределенное обучение для модели Keras.The following code shows how to carry out distributed training for a Keras model. Кроме того, предполагается, что для обучения вместо стандартных образов Машинного обучения Azure используется пользовательский образ Docker из контейнера Docker Hub continuumio/miniconda.In addition, instead of using the default Azure Machine Learning images, it specifies a custom docker image from Docker Hub continuumio/miniconda for training.

У вас уже должен быть создан объект compute_target целевого вычислительного ресурса.You should have already created your compute target object compute_target. Вы можете создать оценщик следующим образом.You create the estimator as follows:

from azureml.train.estimator import Estimator

estimator = Estimator(source_directory='./my-keras-proj',
                      compute_target=compute_target,
                      entry_script='train.py',
                      node_count=2,
                      process_count_per_node=1,
                      distributed_backend='mpi',     
                      conda_packages=['tensorflow', 'keras'],
                      custom_docker_base_image='continuumio/miniconda')

В приведенном выше коде показаны следующие новые параметры конструктора Estimator:The above code exposes the following new parameters to the Estimator constructor:

ПараметрParameter ОписаниеDescription значение по умолчаниюDefault
custom_docker_base_image Имя используемого образа.Name of the image you want to use. Можно предоставлять только те образы, которые доступны в публичных хранилищах Docker (в данном случае в центре Docker).Only provide images available in public docker repositories (in this case Docker Hub). Чтобы выбрать образ из частного репозитория Docker, используйте параметр конструктора environment_definition.To use an image from a private docker repository, use the constructor's environment_definition parameter instead. Ознакомьтесь с примером ниже.See example. None
node_count Количество узлов, которые будут использоваться для задания обучения.Number of nodes to use for your training job. 1
process_count_per_node Количество процессов (или рабочих ролей), запускаемых на каждом узле.Number of processes (or "workers") to run on each node. В этом случае используется 2 графических процессора, доступных на каждом узле.In this case, you use the 2 GPUs available on each node. 1
distributed_backend Серверная часть для запуска распределенного обучения, предлагаемая средством оценки с помощью MPI.Backend for launching distributed training, which the Estimator offers via MPI. Чтобы выполнять параллельное или распределенное обучение (например, node_count> 1 ,или process_count_per_node> 1, или оба варианта), задайте distributed_backend='mpi'.To carry out parallel or distributed training (e.g. node_count>1 or process_count_per_node>1 or both), set distributed_backend='mpi'. Реализация MPI, используемая AML — Open MPI.The MPI implementation used by AML is Open MPI. None

И наконец, отправьте задание обучения, выполнив такую команду.Finally, submit the training job:

run = experiment.submit(estimator)
print(run.get_portal_url())

ПримерыExamples

Записная книжка с основным сведениями о шаблоне оценщика:For a notebook that shows the basics of estimator pattern, see:

Записная книжка для обучения модели scikit-learn с помощью оценщика:For a notebook that trains an scikit-learn model using estimator, see:

Записные книжки для обучения моделей с помощью специальных оценщиков платформы глубокого обучения:For notebooks on training models using deep-learning-framework specific estimators, see:

Узнайте, как запускать записные книжки, следуя указаниям из статьи о том, как изучить эту службу с помощью записных книжек Jupyter.Learn how to run notebooks by following the article, Use Jupyter notebooks to explore this service.

Дальнейшие действияNext steps