Руководство по обучению модели классификации изображений с помощью Службы машинного обучения AzureTutorial: Train an image classification model with Azure Machine Learning service

В этом руководстве необходимо обучить модель машинного обучения на удаленных вычислительных ресурсах.In this tutorial, you train a machine learning model on remote compute resources. Вы будете использовать рабочий процесс обучения и развертывания для службы "Машинное обучение Azure" (предварительная версия) в Jupyter Notebook для Python.You'll use the training and deployment workflow for Azure Machine Learning service (preview) in a Python Jupyter notebook. Затем можно использовать записную книжку как шаблон для обучения собственной модели машинного обучения со своими данными.You can then use the notebook as a template to train your own machine learning model with your own data. Это руководство представляет собой первую часть серии, состоящей из двух частей.This tutorial is part one of a two-part tutorial series.

Это руководство обучает простую логистическую регрессию по набору данных MNIST с помощью библиотеки scikit-learn и Службы машинного обучения Azure.This tutorial trains a simple logistic regression by using the MNIST dataset and scikit-learn with Azure Machine Learning service. MNIST — это популярный набор данных, состоящий из 70 000 изображений в оттенках серого.MNIST is a popular dataset consisting of 70,000 grayscale images. Каждое изображение содержит рукописную цифру размером 28 x 28 пикселей, то есть числа от нуля до девяти.Each image is a handwritten digit of 28 x 28 pixels, representing a number from zero to nine. Целью является создание многоклассового классификатора для идентификации цифры, которую отображает указанное изображение.The goal is to create a multiclass classifier to identify the digit a given image represents.

Узнайте, как выполнять следующие действия:Learn how to take the following actions:

  • Настройка среды разработки.Set up your development environment.
  • Подключение к данным и их проверка.Access and examine the data.
  • Локальное обучение простой логистической регрессии с помощью популярной библиотеки машинного обучениях scikit-learn.Train a simple logistic regression locally by using the popular scikit-learn machine learning library.
  • Обучение нескольких моделей в удаленном кластере.Train multiple models on a remote cluster.
  • Проверка результатов обучения и регистрация наилучшей модели.Review training results and register the best model.

Во второй части этого руководства описано, как выбрать и развернуть модель.You learn how to select a model and deploy it in part two of this tutorial.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don’t have an Azure subscription, create a free account before you begin. Опробуйте бесплатную или платную версию Службы машинного обучения Azure.Try the free or paid version of Azure Machine Learning service today.

Примечание

Код в этой статье протестирован с помощью пакета SDK для Машинного обучения Azure версии 1.0.8.Code in this article was tested with Azure Machine Learning SDK version 1.0.8.

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

Перейдите к разделу Настройка среды разработки, чтобы ознакомиться с шагами записной книжки, или используйте приведенные ниже инструкции, чтобы получить записную книжку и запустить ее в службе "Записные книжки Azure" или на собственном сервере записных книжек.Skip to Set up your development environment to read through the notebook steps, or use the instructions below to get the notebook and run it on Azure Notebooks or your own notebook server. Чтобы запустить записную книжку, вам потребуется:To run the notebook you will need:

  • Сервер записных книжек Python 3.6, на котором установлены следующие компоненты:A Python 3.6 notebook server with the following installed:
    • пакет SDK для Машинного обучения Azure для Python;The Azure Machine Learning SDK for Python
    • matplotlib и scikit-learnmatplotlib and scikit-learn
  • Пример записной книжки и файл utils.py.The tutorial notebook and the file utils.py
  • Рабочая область машинного обучения.A machine learning workspace
  • Файл конфигурации для рабочей области в том же каталоге, что и записная книжка.The configuration file for the workspace in the same directory as the notebook

Получите все необходимые компоненты, перейдя к нужному из разделов, щелкнув соответствующую ссылку ниже.Get all these prerequisites from either of the sections below.

Использование Записных книжек Azure: к вашим услугам бесплатные записные книжки на основе Jupyter в облаке AzureUse Azure Notebooks: Free Jupyter notebooks in the cloud

Начать работу с Записными книжками Azure очень просто.It's easy to get started with Azure Notebooks! Пакет SDK Машинного обучения Azure для Python уже установлен и настроен в Записных книжках Azure.The Azure Machine Learning SDK for Python is already installed and configured for you on Azure Notebooks. Службы Azure автоматически управляют установкой и последующими обновлениями.The installation and future updates are automatically managed via Azure services.

Выполнив указанные ниже действия, запустите записную книжку tutorials/img-classification-part1-training.ipynb в проекте Начало работы.After you complete the steps below, run the tutorials/img-classification-part1-training.ipynb notebook in your Getting Started project.

  1. Чтобы создать рабочую область и запустить Записные книжки Azure, выполните действия, описанные в этом руководстве.Complete the Azure Machine Learning portal quickstart to create a workspace and launch Azure Notebooks. При необходимости можете пропустить раздел об использовании записной книжки.Feel free to skip the Use the notebook section if you wish.
  2. Если вы выполнили инструкции из этого руководства, снова войдите в службу Записные книжки Azure и откройте проект Начало работы.If you've already completed the quickstart, sign back into Azure Notebooks and open the Getting Started project.
  3. Всегда запускайте проект, если для него отображается состояние "Остановлено".Remember to start the project if its status is stopped. Запуск проектаStart the project

Использование собственного сервера записных книжек JupyterUse your own Jupyter notebook server

Чтобы создать локальный сервер Jupyter Notebook на компьютере, выполните следующие действия.Use these steps to create a local Jupyter Notebook server on your computer. Выполнив указанные действия, запустите записную книжку tutorials/img-classification-part1-training.ipynb.After you complete the steps, run the tutorials/img-classification-part1-training.ipynb notebook.

  1. Чтобы создать рабочую область и установить пакет SDK для службы "Машинное обучение Azure" с помощью Python, выполните действия, описанные в этом кратком руководстве.Complete the Azure Machine Learning Python quickstart to install the SDK and create a workspace. При необходимости можете пропустить раздел об использовании записной книжки.Feel free to skip the Use the notebook section if you wish.

  2. Клонируйте репозиторий GitHub.Clone the GitHub repository.

    git clone https://github.com/Azure/MachineLearningNotebooks.git
    
  3. Добавьте файл конфигурации рабочей области с помощью любого из следующих методов:Add a workspace configuration file using either of these methods:

    • С помощью предварительных требований краткого руководства скопируйте созданный файл aml_config\config.json в клонированный каталог.Copy the aml_config\config.json file you created using the prerequisite quickstart into the cloned directory.
    • Создайте новую рабочую область с помощью кода в configuration.ipynb.Create a new workspace using code in the configuration.ipynb.
  4. Запустите сервер записной книжки из клонированного каталога.Start the notebook server from your cloned directory.

    jupyter notebook
    

Настройка среды разработкиSet up your development environment

Все настройки для работы по разработке можно сделать в записной книжке Python.All the setup for your development work can be accomplished in a Python notebook. Настройка включает следующие действия:Setup includes the following actions:

  • Импорт пакетов Python.Import Python packages.
  • Подключение к рабочей области, что позволяет локальному компьютеру обмениваться данными с удаленными ресурсами.Connect to a workspace, so that your local computer can communicate with remote resources.
  • Создание эксперимента, чтобы отслеживать все запуски.Create an experiment to track all your runs.
  • Создание удаленного целевого объекта вычислений для использования в обучении.Create a remote compute target to use for training.

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

Импортируйте пакеты Python, которые необходимы вам в этом сеансе.Import Python packages you need in this session. Также отобразите версию пакета SDK Службы машинного обучения Azure.Also display the Azure Machine Learning SDK version:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

import azureml.core
from azureml.core import Workspace

# check core SDK version number
print("Azure ML SDK Version: ", azureml.core.VERSION)

Подключение к рабочей областиConnect to a workspace

В существующей рабочей области создайте объект.Create a workspace object from the existing workspace. Workspace.from_config() считывает файл config.json и загружает данные в объект с именем ws.Workspace.from_config() reads the file config.json and loads the details into an object named ws:

# load workspace configuration from the config.json file in the current folder.
ws = Workspace.from_config()
print(ws.name, ws.location, ws.resource_group, ws.location, sep = '\t')

Создание экспериментаCreate an experiment

Чтобы отслеживать сведения о выполнении в рабочей области, создайте эксперимент.Create an experiment to track the runs in your workspace. Рабочая область может содержать несколько экспериментов.A workspace can have multiple experiments:

experiment_name = 'sklearn-mnist'

from azureml.core import Experiment
exp = Experiment(workspace=ws, name=experiment_name)

Создание или подключение существующего ресурса вычисленийCreate or attach an existing compute resource

Использование Вычислительной среды Машинного обучения Azure (управляемой службы) позволяет специалистам по обработке и анализу данных обучать модели машинного обучения в кластерах виртуальных машин Azure.By using Azure Machine Learning Compute, a managed service, data scientists can train machine learning models on clusters of Azure virtual machines. Часто используются виртуальные машины с поддержкой GPU.Examples include VMs with GPU support. В этом руководстве описано, как создать Вычислительную среду Машинного обучения Azure в качестве среды обучения.In this tutorial, you create Azure Machine Learning Compute as your training environment. Приведенный ниже код создаст вычислительные кластеры, если они еще не существуют в вашей рабочей области.The code below creates the compute clusters for you if they don't already exist in your workspace.

Создание вычислительной среды занимает около пяти минут.Creation of the compute takes about five minutes. Если вычислительная среда уже находится в рабочей области, код сразу применяет ее, пропуская процесс создания.If the compute is already in the workspace, the code uses it and skips the creation process.

from azureml.core.compute import AmlCompute
from azureml.core.compute import ComputeTarget
import os

# choose a name for your cluster
compute_name = os.environ.get("AML_COMPUTE_CLUSTER_NAME", "cpucluster")
compute_min_nodes = os.environ.get("AML_COMPUTE_CLUSTER_MIN_NODES", 0)
compute_max_nodes = os.environ.get("AML_COMPUTE_CLUSTER_MAX_NODES", 4)

# This example uses CPU VM. For using GPU VM, set SKU to STANDARD_NC6
vm_size = os.environ.get("AML_COMPUTE_CLUSTER_SKU", "STANDARD_D2_V2")


if compute_name in ws.compute_targets:
    compute_target = ws.compute_targets[compute_name]
    if compute_target and type(compute_target) is AmlCompute:
        print('found compute target. just use it. ' + compute_name)
else:
    print('creating a new compute target...')
    provisioning_config = AmlCompute.provisioning_configuration(vm_size = vm_size,
                                                                min_nodes = compute_min_nodes, 
                                                                max_nodes = compute_max_nodes)

    # create the cluster
    compute_target = ComputeTarget.create(ws, compute_name, provisioning_config)
    
    # can poll for a minimum number of nodes and for a specific timeout. 
    # if no min node count is provided it will use the scale settings for the cluster
    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)
    
     # For a more detailed view of current AmlCompute status, use get_status()
    print(compute_target.get_status().serialize())

Теперь у вас есть необходимые пакеты и вычислительные ресурсы для обучения модели в облаке.You now have the necessary packages and compute resources to train a model in the cloud.

Изучение данныхExplore data

Прежде чем начинать обучение модели, необходимо понимать, какие данные используются для ее обучения.Before you train a model, you need to understand the data that you use to train it. Также следует скопировать данные в облако.You also need to copy the data into the cloud. Оттуда они будут доступны для облачной среды обучения.Then it can be accessed by your cloud training environment. В этом разделе описано, как выполнять следующие действия:In this section, you learn how to take the following actions:

  • Скачивание набора данных MNIST.Download the MNIST dataset.
  • Отображение примеров изображений.Display some sample images.
  • Отправка данных в облако.Upload data to the cloud.

Скачивание набора данных MNISTDownload the MNIST dataset

Скачайте набор данных MNIST и сохраните файлы в локальном каталоге data.Download the MNIST dataset and save the files into a data directory locally. Загрузите изображения и метки для обучения и тестирования.Images and labels for both training and testing are downloaded:

import urllib.request
import os

data_folder = os.path.join(os.getcwd(), 'data')
os.makedirs(data_folder, exist_ok = True)

urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', filename=os.path.join(data_folder, 'train-images.gz'))
urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', filename=os.path.join(data_folder, 'train-labels.gz'))
urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', filename=os.path.join(data_folder, 'test-images.gz'))
urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', filename=os.path.join(data_folder, 'test-labels.gz'))

Вы увидите примерно такие выходные данные: ('./data/test-labels.gz', <http.client.HTTPMessage at 0x7f40864c77b8>).You will see output similar to this: ('./data/test-labels.gz', <http.client.HTTPMessage at 0x7f40864c77b8>)

Отображение некоторых примеров изображенийDisplay some sample images

Загрузите сжатые файлы в массивы numpy.Load the compressed files into numpy arrays. Затем с помощью matplotlib постройте график 30 случайных изображений из набора данных с подписями над ними.Then use matplotlib to plot 30 random images from the dataset with their labels above them. На этом шаге потребуется функция load_data, которая содержится в файле util.py.This step requires a load_data function that's included in an util.py file. Этот файл находится в папке примера.This file is included in the sample folder. Разместите его в той же папке, где находится эта записная книжка.Make sure it's placed in the same folder as this notebook. Функция load_data выполняет анализ сжатых файлов, преобразовывая их в массивы numpy.The load_data function simply parses the compressed files into numpy arrays:

# make sure utils.py is in the same directory as this code
from utils import load_data

# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the model converge faster.
X_train = load_data(os.path.join(data_folder, 'train-images.gz'), False) / 255.0
X_test = load_data(os.path.join(data_folder, 'test-images.gz'), False) / 255.0
y_train = load_data(os.path.join(data_folder, 'train-labels.gz'), True).reshape(-1)
y_test = load_data(os.path.join(data_folder, 'test-labels.gz'), True).reshape(-1)

# now let's show some randomly chosen images from the traininng set.
count = 0
sample_size = 30
plt.figure(figsize = (16, 6))
for i in np.random.permutation(X_train.shape[0])[:sample_size]:
    count = count + 1
    plt.subplot(1, sample_size, count)
    plt.axhline('')
    plt.axvline('')
    plt.text(x=10, y=-10, s=y_train[i], fontsize=18)
    plt.imshow(X_train[i].reshape(28, 28), cmap=plt.cm.Greys)
plt.show()

Случайный пример изображений приведен ниже.A random sample of images displays:

Случайный пример изображений

Теперь у вас есть представление о том, как выглядят эти изображения, и прогноз ожидаемого результата.Now you have an idea of what these images look like and the expected prediction outcome.

Отправка данных в облакоUpload data to the cloud

Теперь сделайте данные доступными удаленно, отправив их с локального компьютера в Azure.Now make the data accessible remotely by uploading that data from your local machine into Azure. Так они будут доступны для удаленного обученияThen it can be accessed for remote training. Хранилище данных — это удобная конструкция для отправки и скачивания файлов, связанная с рабочей областью.The datastore is a convenient construct associated with your workspace for you to upload or download data. Вы можете взаимодействовать с ним из удаленных целевых объектов вычислений.You can also interact with it from your remote compute targets. В качестве базового хранилища используется учетная запись хранилища BLOB-объектов Azure.It's backed by an Azure Blob storage account.

MNIST-файлы передаются в каталог с именем mnist, размещенный в корневом каталоге хранилища данных.The MNIST files are uploaded into a directory named mnist at the root of the datastore:

ds = ws.get_default_datastore()
print(ds.datastore_type, ds.account_name, ds.container_name)

ds.upload(src_dir=data_folder, target_path='mnist', overwrite=True, show_progress=True)

Теперь у вас есть все необходимое для начала обучения модели.You now have everything you need to start training a model.

Обучение на удаленном кластереTrain on a remote cluster

Для выполнения этой задачи отправьте задание в кластер удаленного обучения, который мы настроили ранее.For this task, submit the job to the remote training cluster you set up earlier. Чтобы отправить задание, нужно:To submit a job you:

  • создать каталог;Create a directory
  • Создание сценария обученияCreate a training script
  • Создание объекта оценщикаCreate an estimator object
  • отправить задание.Submit the job

создать каталог;Create a directory

Создайте каталог для доставки необходимого кода с компьютера на удаленный ресурс.Create a directory to deliver the necessary code from your computer to the remote resource.

import os
script_folder  = os.path.join(os.getcwd(), "sklearn-mnist")
os.makedirs(script_folder, exist_ok=True)

Создание сценария обученияCreate a training script

Чтобы отправить задание в кластер, необходимо сначала создать сценарий обучения.To submit the job to the cluster, first create a training script. Для создания сценария обучения выполните следующий код, который называется train.py, в каталоге, который был только что создан.Run the following code to create the training script called train.py in the directory you just created.

%%writefile $script_folder/train.py

import argparse
import os
import numpy as np

from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib

from azureml.core import Run
from utils import load_data

# let user feed in 2 parameters, the location of the data files (from datastore), and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')
args = parser.parse_args()

data_folder = args.data_folder
print('Data folder:', data_folder)

# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.
X_train = load_data(os.path.join(data_folder, 'train-images.gz'), False) / 255.0
X_test = load_data(os.path.join(data_folder, 'test-images.gz'), False) / 255.0
y_train = load_data(os.path.join(data_folder, 'train-labels.gz'), True).reshape(-1)
y_test = load_data(os.path.join(data_folder, 'test-labels.gz'), True).reshape(-1)
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\n')

# get hold of the current run
run = Run.get_context()

print('Train a logistic regression model with regularization rate of', args.reg)
clf = LogisticRegression(C=1.0/args.reg, random_state=42)
clf.fit(X_train, y_train)

print('Predict the test set')
y_hat = clf.predict(X_test)

# calculate accuracy on the prediction
acc = np.average(y_hat == y_test)
print('Accuracy is', acc)

run.log('regularization rate', np.float(args.reg))
run.log('accuracy', np.float(acc))

os.makedirs('outputs', exist_ok=True)
# note file saved in the outputs folder is automatically uploaded into experiment record
joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

Обратите внимание на то, как сценарий получает данные и сохраняет модели.Notice how the script gets data and saves models:

  • Скрипт обучения считывает аргумент, чтобы найти каталог с данными.The training script reads an argument to find the directory that contains the data. Позднее при отправке задания вы укажете хранилище данных для этого аргумента: parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point').When you submit the job later, you point to the datastore for this argument: parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point').

  • Скрипт обучения сохраняет модель в каталог с именем outputs.The training script saves your model into a directory named outputs:
    joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl').joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl').
    Все записи в этом каталоге автоматически передаются в рабочую область.Anything written in this directory is automatically uploaded into your workspace. Вы будете обращаться к модели из этого каталога далее в этом руководстве.You access your model from this directory later in the tutorial. Файл utils.py — это ссылка из скрипта обучения для правильной загрузки набора данных.The file utils.py is referenced from the training script to load the dataset correctly. Скопируйте этот скрипт в папку script, чтобы он был доступен вместе со скриптом обучения на удаленном ресурсе.Copy this script into the script folder, so that it can be accessed along with the training script on the remote resource.

import shutil
shutil.copy('utils.py', script_folder)

Создание оценщикаCreate an estimator

Объект оценщика используется для отправки потокового выполнения.An estimator object is used to submit the run. Создайте оценщик, выполнив следующий код, который определяет следующие элементы:Create your estimator by running the following code to define these items:

  • Имя оценщика — est.The name of the estimator object, est.
  • Выберите каталог, который содержит скрипт.The directory that contains your scripts. Все файлы в этом каталоге передаются в узел кластера для выполнения.All the files in this directory are uploaded into the cluster nodes for execution.
  • Целевой объект вычисления.The compute target. В этом примере используется созданный вычислительный кластер Службы машинного обучения Azure.In this case, you use the Azure Machine Learning compute cluster you created.
  • Имя скрипта обучения — train.py.The training script name, train.py.
  • Параметры, требуемые от скрипта обучения.Parameters required from the training script.
  • Необходимые для обучения пакеты Python.Python packages needed for training.

В этом руководстве целевой средой является AMLCompute.In this tutorial, this target is AmlCompute. Все файлы в папке скриптов передаются для выполнения в узлы кластера.All files in the script folder are uploaded into the cluster nodes for run. Параметр data_folder настраивается на использование хранилища данных ds.path('mnist').as_mount().The data_folder is set to use the datastore, ds.path('mnist').as_mount():

from azureml.train.estimator import Estimator

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

est = Estimator(source_directory=script_folder,
                script_params=script_params,
                compute_target=compute_target,
                entry_script='train.py',
                conda_packages=['scikit-learn'])

Отправка задания в кластерSubmit the job to the cluster

Запустите эксперимент, отправив объект оценщика.Run the experiment by submitting the estimator object:

run = exp.submit(config=est)
run

Так как вызов является асинхронным, сразу после запуска задания он возвращает состояние Preparing (Подготовка) или Running (Выполнение).Because the call is asynchronous, it returns a Preparing or Running state as soon as the job is started.

Мониторинг удаленного выполненияMonitor a remote run

Обычно первый запуск занимает около 10 минут.In total, the first run takes about 10 minutes. Но для последующих запусков используется тот же образ, если зависимости скрипта не изменяются.But for subsequent runs, as long as the script dependencies don't change, the same image is reused. Благодаря этому запуск контейнера будет намного быстрее.So the container startup time is much faster.

Что происходит, пока вы ожидаете завершения?What happens while you wait:

  • Создание образа. Создается образ Docker, который соответствует среде Python, указанной в оценщике.Image creation: A Docker image is created that matches the Python environment specified by the estimator. Изображение загружается в рабочую область.The image is uploaded to the workspace. Создание и отправка изображений занимает около пяти минут.Image creation and uploading takes about five minutes.

    Этот этап выполняется один раз для каждой среды Python, а для последующих запусков контейнер помещается в кэш.This stage happens once for each Python environment because the container is cached for subsequent runs. Во время создания образа журналы будут отправлены в журнал выполнения.During image creation, logs are streamed to the run history. С помощью этих журналов вы можете отслеживать ход создания образа.You can monitor the image creation progress by using these logs.

  • Масштабирование. Если для выполнения на удаленном кластере требуется больше узлов, чем доступно в текущий момент, дополнительные узлы добавляются автоматически.Scaling: If the remote cluster requires more nodes to do the run than currently available, additional nodes are added automatically. Масштабирование обычно занимает около пяти минут.Scaling typically takes about five minutes.

  • Running. На этом этапе необходимые скрипты и файлы отправляются на целевой объект вычислений.Running: In this stage, the necessary scripts and files are sent to the compute target. Затем подключаются или копируются хранилища данных.Then datastores are mounted or copied. После этого выполняется entry_script.And then the entry_script is run. Пока выполняется задание, стандартный выход stdout и каталог ./logs направляются в журнал выполнения.While the job is running, stdout and the ./logs directory are streamed to the run history. С помощью этих журналов вы можете отслеживать ход создания образа.You can monitor the run's progress by using these logs.

  • Постобработка. Каталог ./outputs завершенного выполнения копируется в журнал выполнения в рабочей области, чтобы вы могли обращаться к этим результатам.Post-processing: The ./outputs directory of the run is copied over to the run history in your workspace, so you can access these results.

Ход выполнения запущенного задания можно контролировать несколькими способами.You can check the progress of a running job in several ways. В этом руководстве используются мини-приложение Jupyter и метод wait_for_completion.This tutorial uses a Jupyter widget and a wait_for_completion method.

Мини-приложение JupyterJupyter widget

Отслеживайте ход выполнения с помощью мини-приложения Jupyter.Watch the progress of the run with a Jupyter widget. Как и отправка выполнения, мини-приложение работает асинхронно и в реальном времени предоставляет обновления каждые 10–15 секунд, пока не завершит задание.Like the run submission, the widget is asynchronous and provides live updates every 10 to 15 seconds until the job finishes:

from azureml.widgets import RunDetails
RunDetails(run).show()

Этот снимок демонстрирует окно мини-приложение в конце процесса обучения.This still snapshot is the widget shown at the end of training:

Мини-приложение записной книжки

Если необходимо отменить выполнение, вы можете выполнить эти инструкции.If you need to cancel a run, you can follow these instructions.

Получение результатов записи по завершенииGet log results upon completion

Обучение и мониторинг модели происходит в фоновом режиме.Model training and monitoring happen in the background. Прежде, чем выполнять другой код, дождитесь завершения обучения модели.Wait until the model has finished training before you run more code. wait_for_completion позволяет узнать, когда завершится обучение модели.Use wait_for_completion to show when the model training is finished:

run.wait_for_completion(show_output=False) # specify True for a verbose log

Отображение результатов потокового выполненияDisplay run results

Теперь у вас есть модель, которую обучили на удаленном кластере.You now have a model trained on a remote cluster. Извлеките точность модели, выполнив такую команду.Retrieve the accuracy of the model:

print(run.get_metrics())

В выходных данных показано, что точность удаленной модели — 0,9204.The output shows the remote model has accuracy of 0.9204:

{'regularization rate': 0.8, 'accuracy': 0.9204}

В следующем руководстве эта модель рассматривается подробнее.In the next tutorial, you explore this model in more detail.

Регистрация моделиRegister model

На последнем шаге скрипт обучения записал файл outputs/sklearn_mnist_model.pkl в каталог с именем outputs на виртуальной машине кластера, где выполнялось задание.The last step in the training script wrote the file outputs/sklearn_mnist_model.pkl in a directory named outputs in the VM of the cluster where the job is run. Все содержимое специального каталога outputs автоматически отправляется в рабочую область.outputs is a special directory in that all content in this directory is automatically uploaded to your workspace. Это содержимое отображается в записи о выполнении эксперимента в рабочей области.This content appears in the run record in the experiment under your workspace. Теперь файл модели также доступен в рабочей области.So the model file is now also available in your workspace.

Вы увидите файлы, связанные с этим выполнением.You can see files associated with that run:

print(run.get_file_names())

Зарегистрируйте модель в рабочей области, чтобы вы или другие участники смогли позже запросить, проверить и развернуть ее.Register the model in the workspace, so that you or other collaborators can later query, examine, and deploy this model:

# register model 
model = run.register_model(model_name='sklearn_mnist', model_path='outputs/sklearn_mnist_model.pkl')
print(model.name, model.id, model.version, sep = '\t')

Очистка ресурсовClean up resources

Важно!

Созданные ресурсы могут использоваться в качестве необходимых компонентов для других руководств и статей с практическими рекомендациями по Службе машинного обучения Azure.The resources you created can be used as prerequisites to other Azure Machine Learning service tutorials and how-to articles.

Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.If you don't plan to use the resources you created, delete them, so you don't incur any charges:

  1. На портале Azure выберите Группы ресурсов в левой части окна.In the Azure portal, select Resource groups on the far left.

    Удаление ресурсов на портале Azure

  2. В списке выберите созданную группу ресурсов.From the list, select the resource group you created.

  3. Выберите Удалить группу ресурсов.Select Delete resource group.

  4. Введите имя группы ресурсов.Enter the resource group name. Теперь щелкните Удалить.Then select Delete.

Вычислительный кластер Машинного обучения Azure можно удалить.You can also delete just the Azure Machine Learning Compute cluster. Но для него включено автомасштабирование с минимальным размером, равным нулю.However, autoscale is turned on, and the cluster minimum is zero. Это означает, что этот ресурс не создает дополнительных расходов, когда он не используется.So this particular resource won't incur additional compute charges when not in use:

# optionally, delete the Azure Machine Learning Compute cluster
compute_target.delete()

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

В рамках этого руководства по Службе машинного обучения Azure вы выполнили с помощью Python следующие задачи:In this Azure Machine Learning service tutorial, you used Python for the following tasks:

  • Настройка среды разработки.Set up your development environment.
  • Подключение к данным и их проверка.Access and examine the data.
  • Обучение нескольких моделей на удаленном кластере с помощью популярной библиотеки машинного обучения scikit-learn.Train multiple models on a remote cluster using the popular scikit-learn machine learning library
  • Проверка сведений об обучении и регистрация наилучшей модели.Review training details and register the best model.

Теперь вы готовы развернуть зарегистрированную модель с помощью инструкций, представленных в следующей части серии руководств.You're ready to deploy this registered model by using the instructions in the next part of the tutorial series: