Руководство по Создание конвейеров Машинного обучения Azure для пакетной оценкиTutorial: Build an Azure Machine Learning pipeline for batch scoring

Из этого расширенного учебника вы узнаете, как создавать конвейеры Машинного обучения Azure для выполнения заданий пакетной оценки.In this advanced tutorial, you learn how to build an Azure Machine Learning pipeline to run a batch scoring job. Конвейеры машинного обучения оптимизируют ваш рабочий процесс за счет ускорения, мобильности и повторного использования, позволяя вам сосредоточиться непосредственно на задачах обучения, а не на сложностях инфраструктуры.Machine learning pipelines optimize your workflow with speed, portability, and reuse, so you can focus on machine learning instead of infrastructure and automation. После создания и публикации конвейера необходимо настроить конечную точку REST, позволяющую активировать конвейер с любой библиотеки HTTP на любой платформе.After you build and publish a pipeline, you configure a REST endpoint that you can use to trigger the pipeline from any HTTP library on any platform.

В этом руководстве для классификации изображений без метки используется Inception-V3, предварительно обученная модель сверточной нейронной сети, реализованная в Tensorflow.The example uses a pretrained Inception-V3 convolutional neural network model implemented in Tensorflow to classify unlabeled images.

В этом руководстве выполняются следующие задачи:In this tutorial, you complete the following tasks:

  • Настройка рабочей областиConfigure workspace
  • Скачивание и сохранение примера данных.Download and store sample data
  • Создание объектов DataSet для извлечения и вывода данных.Create dataset objects to fetch and output data
  • Скачивание, подготовка и регистрация модели в рабочей областиDownload, prepare, and register the model in your workspace
  • Подготовка целевых объектов вычислений и создание сценария оценки.Provision compute targets and create a scoring script
  • Использование класса ParallelRunStep для асинхронной оценки пакетной службыUse the ParallelRunStep class for async batch scoring
  • Создание, запуск и публикация конвейера.Build, run, and publish a pipeline
  • Включение конечной точки REST для конвейера.Enable a REST endpoint for the pipeline

Если у вас еще нет подписки 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 today.

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

  • Если у вас еще нет рабочей области Машинного обучения Azure или виртуальной машины записной книжки, выполните инструкции, приведенные в первой части руководства по установке.If you don't already have an Azure Machine Learning workspace or notebook virtual machine, complete Part 1 of the setup tutorial.
  • Завершив настройку, используйте тот же сервер записных книжек, чтобы открыть записную книжку tutorials/machine-learning-pipelines-advanced/tutorial-pipeline-batch-scoring-classification.ipynb.When you finish the setup tutorial, use the same notebook server to open the tutorials/machine-learning-pipelines-advanced/tutorial-pipeline-batch-scoring-classification.ipynb notebook.

Если вы хотите открыть руководство по установке в собственной локальной среде, доступ к нему можно получить на GitHub.If you want to run the setup tutorial in your own local environment, you can access the tutorial on GitHub. Выполните команду pip install azureml-sdk[notebooks] azureml-pipeline-core azureml-pipeline-steps pandas requests, чтобы получить необходимые пакеты.Run pip install azureml-sdk[notebooks] azureml-pipeline-core azureml-pipeline-steps pandas requests to get the required packages.

Настройка рабочей области и создание хранилища данныхConfigure workspace and create a datastore

В имеющейся рабочей области Машинного обучения Azure создайте объект.Create a workspace object from the existing Azure Machine Learning workspace.

from azureml.core import Workspace
ws = Workspace.from_config()

Важно!

Этот фрагмент кода ищет конфигурацию рабочей области в текущем или родительском каталоге.This code snippet expects the workspace configuration to be saved in the current directory or its parent. Дополнительные сведения о создании рабочей области см. в статье Создание рабочих областей машинного обучения Azure и управление ими.For more information on creating a workspace, see Create and manage Azure Machine Learning workspaces. Дополнительные сведения о сохранении конфигурации в файле см. в разделе Создание файла конфигурации рабочей области.For more information on saving the configuration to file, see Create a workspace configuration file.

Создание хранилища данных для образцов изображенийCreate a datastore for sample images

В учетной записи pipelinedata извлеките образец общедоступных данных вычисления ImageNet из общедоступного контейнера больших двоичных объектов sampledata.On the pipelinedata account, get the ImageNet evaluation public data sample from the sampledata public blob container. Выполните вызов register_azure_blob_container(), чтобы предоставить рабочей области images_datastore доступ к данным.Call register_azure_blob_container() to make the data available to the workspace under the name images_datastore. Затем задайте хранилище данных рабочей области по умолчанию в качестве выходного.Then, set the workspace default datastore as the output datastore. Используйте выходное хранилище данных для оценки выходных данных в конвейере.Use the output datastore to score output in the pipeline.

Дополнительные сведения о доступе к данным см. в этом разделе.For more information on accessing data, see How to access data.

from azureml.core.datastore import Datastore

batchscore_blob = Datastore.register_azure_blob_container(ws, 
                      datastore_name="images_datastore", 
                      container_name="sampledata", 
                      account_name="pipelinedata", 
                      overwrite=True)

def_data_store = ws.get_default_datastore()

Создание объектов DataSetCreate dataset objects

При создании конвейера объекты Dataset используются для чтения данных из хранилищ данных рабочей области, а объекты PipelineData — для передачи промежуточных данных между шагами конвейера.When building pipelines, Dataset objects are used for reading data from workspace datastores, and PipelineData objects are used for transferring intermediate data between pipeline steps.

Важно!

Пример оценки пакетной службы в этом руководстве использует только один шаг конвейера.The batch scoring example in this tutorial uses only one pipeline step. В вариантах использования с несколькими шагами типичный поток будет включать следующие шаги:In use cases that have multiple steps, the typical flow will include these steps:

  1. Использование объектов Dataset в качестве входных данных для извлечения необработанных данных, выполнение определенных преобразований, а затем вывод объекта PipelineData.Use Dataset objects as inputs to fetch raw data, perform some transformation, and then output a PipelineData object.

  2. Использование выходного объекта PipelineData из предыдущего шага в качестве входного объекта.Use the PipelineData output object in the preceding step as an input object. Повторение для последующих шагов.Repeat it for subsequent steps.

В этом сценарии создайте объекты Dataset, соответствующие каталогам хранилища данных для входных изображений и меток классификации (значения y-test).In this scenario, you create Dataset objects that correspond to the datastore directories for both the input images and the classification labels (y-test values). Кроме того, создайте объект PipelineData для выходных данных пакетной оценки.You also create a PipelineData object for the batch scoring output data.

from azureml.core.dataset import Dataset
from azureml.pipeline.core import PipelineData

input_images = Dataset.File.from_files((batchscore_blob, "batchscoring/images/"))
label_ds = Dataset.File.from_files((batchscore_blob, "batchscoring/labels/"))
output_dir = PipelineData(name="scores", 
                          datastore=def_data_store, 
                          output_path_on_compute="batchscoring/results")

Зарегистрируйте наборы данных в рабочей области, если они понадобятся вам позже.Register the datasets to the workspace if you want to reuse it later. Это необязательный шаг.This step is optional.


input_images = input_images.register(workspace = ws, name = "input_images")
label_ds = label_ds.register(workspace = ws, name = "label_ds")

Скачивание и регистрация моделиDownload and register the model

Скачайте предварительно обученную модель Tensorflow, чтобы использовать ее для пакетной оценки в конвейере.Download the pretrained Tensorflow model to use it for batch scoring in a pipeline. Сначала создайте локальный каталог, в котором будет храниться модель.First, create a local directory where you store the model. Затем скачайте и извлеките модель.Then, download and extract the model.

import os
import tarfile
import urllib.request

if not os.path.isdir("models"):
    os.mkdir("models")
    
response = urllib.request.urlretrieve("http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz", "model.tar.gz")
tar = tarfile.open("model.tar.gz", "r:gz")
tar.extractall("models")

Выполните регистрацию модели в рабочей области, что позволит быстро извлекать ее в процессе конвейера.Next, register the model to your workspace, so you can easily retrieve the model in the pipeline process. В статической функции register() параметр model_name является ключом, который используется для определения расположения модели в пакете SDK.In the register() static function, the model_name parameter is the key you use to locate your model throughout the SDK.

from azureml.core.model import Model
 
model = Model.register(model_path="models/inception_v3.ckpt",
                       model_name="inception",
                       tags={"pretrained": "inception"},
                       description="Imagenet trained tensorflow inception",
                       workspace=ws)

Создание и вложение удаленного целевого объекта вычисленийCreate and attach the remote compute target

Конвейеры машинного обучения невозможно запустить локально, поэтому их можно запускать в облачных ресурсах или удаленных целевых объектах вычислений.Machine learning pipelines can't be run locally, so you run them on cloud resources or remote compute targets. Удаленный целевой объект вычислений — это повторно используемая виртуальная среда вычислений, в которой выполняются эксперименты и рабочие процессы машинного обучения.A remote compute target is a reusable virtual compute environment where you run experiments and machine learning workflows.

Выполните приведенный ниже код, чтобы создать целевой объект AmlCompute с поддержкой GPU, а затем вложите его в свою рабочую область.Run the following code to create a GPU-enabled AmlCompute target, and then attach it to your workspace. Дополнительные сведения о целевых объектах вычислений см. в тематической статье.For more information about compute targets, see the conceptual article.

from azureml.core.compute import AmlCompute, ComputeTarget
from azureml.exceptions import ComputeTargetException
compute_name = "gpu-cluster"

# checks to see if compute target already exists in workspace, else create it
try:
    compute_target = ComputeTarget(workspace=ws, name=compute_name)
except ComputeTargetException:
    config = AmlCompute.provisioning_configuration(vm_size="STANDARD_NC6",
                                                   vm_priority="lowpriority", 
                                                   min_nodes=0, 
                                                   max_nodes=1)

    compute_target = ComputeTarget.create(workspace=ws, name=compute_name, provisioning_configuration=config)
    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

Написание сценария оценкиWrite a scoring script

Для оценки необходимо создать скрипт пакетной оценки под названием batch_scoring.py, а затем записать его в текущий каталог.To do the scoring, create a batch scoring script called batch_scoring.py, and then write it to the current directory. Скрипт принимает входные изображения, применяет модель классификации, а затем выводит прогнозы в файл результатов.The script takes input images, applies the classification model, and then outputs the predictions to a results file.

Сценарий batch_scoring.py принимает приведенные ниже параметры, которые передаются из класса ParallelRunStep, который вы создадите позже:The batch_scoring.py script takes the following parameters, which get passed from the ParallelRunStep you create later:

  • --model_name: Имя используемой модели.--model_name: The name of the model being used.
  • --labels_dir: Расположение файла labels.txt.--labels_dir: The location of the labels.txt file.

Инфраструктура конвейеров использует класс ArgumentParser для передачи параметров в шаги конвейера.The pipeline infrastructure uses the ArgumentParser class to pass parameters into pipeline steps. Например, в следующем коде первый аргумент --model_name получает идентификатор свойства model_name.For example, in the following code, the first argument --model_name is given the property identifier model_name. В функции init() для доступа к этому свойству используется Model.get_model_path(args.model_name).In the init() function, Model.get_model_path(args.model_name) is used to access this property.

%%writefile batch_scoring.py

import os
import argparse
import datetime
import time
import tensorflow as tf
from math import ceil
import numpy as np
import shutil
from tensorflow.contrib.slim.python.slim.nets import inception_v3

from azureml.core import Run
from azureml.core.model import Model
from azureml.core.dataset import Dataset

slim = tf.contrib.slim

image_size = 299
num_channel = 3


def get_class_label_dict(labels_dir):
    label = []
    labels_path = os.path.join(labels_dir, 'labels.txt')
    proto_as_ascii_lines = tf.gfile.GFile(labels_path).readlines()
    for l in proto_as_ascii_lines:
        label.append(l.rstrip())
    return label


def init():
    global g_tf_sess, probabilities, label_dict, input_images

    parser = argparse.ArgumentParser(description="Start a tensorflow model serving")
    parser.add_argument('--model_name', dest="model_name", required=True)
    parser.add_argument('--labels_dir', dest="labels_dir", required=True)
    args, _ = parser.parse_known_args()

    label_dict = get_class_label_dict(args.labels_dir)
    classes_num = len(label_dict)

    with slim.arg_scope(inception_v3.inception_v3_arg_scope()):
        input_images = tf.placeholder(tf.float32, [1, image_size, image_size, num_channel])
        logits, _ = inception_v3.inception_v3(input_images,
                                              num_classes=classes_num,
                                              is_training=False)
        probabilities = tf.argmax(logits, 1)

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    g_tf_sess = tf.Session(config=config)
    g_tf_sess.run(tf.global_variables_initializer())
    g_tf_sess.run(tf.local_variables_initializer())

    model_path = Model.get_model_path(args.model_name)
    saver = tf.train.Saver()
    saver.restore(g_tf_sess, model_path)


def file_to_tensor(file_path):
    image_string = tf.read_file(file_path)
    image = tf.image.decode_image(image_string, channels=3)

    image.set_shape([None, None, None])
    image = tf.image.resize_images(image, [image_size, image_size])
    image = tf.divide(tf.subtract(image, [0]), [255])
    image.set_shape([image_size, image_size, num_channel])
    return image


def run(mini_batch):
    result_list = []
    for file_path in mini_batch:
        test_image = file_to_tensor(file_path)
        out = g_tf_sess.run(test_image)
        result = g_tf_sess.run(probabilities, feed_dict={input_images: [out]})
        result_list.append(os.path.basename(file_path) + ": " + label_dict[result[0]])
    return result_list

Совет

Конвейер в этом руководстве содержит только один шаг и записывает выходные данные в файл.The pipeline in this tutorial has only one step, and it writes the output to a file. Для многошаговых конвейеров также используется ArgumentParser, чтобы определить каталог для записи выходных данных для последующего выполнения действий.For multi-step pipelines, you also use ArgumentParser to define a directory to write output data for input to subsequent steps. Пример передачи данных между несколькими шагами конвейера с использованием конструктивного шаблона ArgumentParser см. в записной книжке.For an example of passing data between multiple pipeline steps by using the ArgumentParser design pattern, see the notebook.

Создание конвейераBuild the pipeline

Перед запуском конвейера создайте объект, который определяет среду Python и создает зависимости, необходимые скрипту batch_scoring.py.Before you run the pipeline, create an object that defines the Python environment and creates the dependencies that your batch_scoring.py script requires. Основной зависимостью является TensorFlow, но кроме нее установите azureml-core и azureml-dataprep[fuse], требуемые для ParallelRunStep.The main dependency required is Tensorflow, but you also install azureml-core and azureml-dataprep[fuse] which are required by ParallelRunStep. Кроме того, следует указать поддержку Docker и Docker-GPU.Also, specify Docker and Docker-GPU support.

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import DEFAULT_GPU_IMAGE

cd = CondaDependencies.create(pip_packages=["tensorflow-gpu==1.15.2",
                                            "azureml-core", "azureml-dataprep[fuse]"])
env = Environment(name="parallelenv")
env.python.conda_dependencies = cd
env.docker.base_image = DEFAULT_GPU_IMAGE

Создание конфигурации для заключения скрипта в оболочкуCreate the configuration to wrap the script

Создайте шаг конвейера, используя сценарий, конфигурацию среды и параметры.Create the pipeline step using the script, environment configuration, and parameters. Укажите целевой объект вычислений, уже подключенный к вашей рабочей области.Specify the compute target you already attached to your workspace.

from azureml.pipeline.steps import ParallelRunConfig

parallel_run_config = ParallelRunConfig(
    environment=env,
    entry_script="batch_scoring.py",
    source_directory=".",
    output_action="append_row",
    mini_batch_size="20",
    error_threshold=1,
    compute_target=compute_target,
    process_count_per_node=2,
    node_count=1
)

Создание шага конвейераCreate the pipeline step

Шаг конвейера — это объект, который инкапсулирует все необходимое для запуска конвейера, включая:A pipeline step is an object that encapsulates everything you need to run a pipeline, including:

  • параметры среды и зависимостей;Environment and dependency settings
  • вычислительный ресурс для запуска конвейера;The compute resource to run the pipeline on
  • входные и выходные данные и любые пользовательские параметры;Input and output data, and any custom parameters
  • ссылку на скрипт или логику пакета SDK для запуска во время выполнения шага.Reference to a script or SDK logic to run during the step

Несколько классов наследуют от родительского класса PipelineStep.Multiple classes inherit from the parent class PipelineStep. Для создания шага можно выбрать классы для использования конкретных платформ или стеков.You can choose classes to use specific frameworks or stacks to build a step. В этом примере используется класс ParallelRunStep для определения логики шага с помощью пользовательского скрипта Python.In this example, you use the ParallelRunStep class to define your step logic by using a custom Python script. Если аргумент вашего скрипта является вводом или выводом шага, его необходимо определить в массиве argumentsи в параметре input или output соответственно.If an argument to your script is either an input to the step or an output of the step, the argument must be defined both in the arguments array and in either the input or the output parameter, respectively.

Ссылка на объект в массиве outputs становится доступной в качестве входных данных для последующего шага конвейера в сценариях с несколькими шагами.In scenarios where there is more than one step, an object reference in the outputs array becomes available as an input for a subsequent pipeline step.

from azureml.pipeline.steps import ParallelRunStep
from datetime import datetime

parallel_step_name = "batchscoring-" + datetime.now().strftime("%Y%m%d%H%M")

label_config = label_ds.as_named_input("labels_input")

batch_score_step = ParallelRunStep(
    name=parallel_step_name,
    inputs=[input_images.as_named_input("input_images")],
    output=output_dir,
    arguments=["--model_name", "inception",
               "--labels_dir", label_config],
    side_inputs=[label_config],
    parallel_run_config=parallel_run_config,
    allow_reuse=False
)

Список всех классов для разных типов шагов см. в этой статье.For a list of all the classes you can use for different step types, see the steps package.

Отправка конвейераSubmit the pipeline

Теперь запустите конвейер.Now, run the pipeline. Сначала создайте объект Pipeline с помощью ссылки на вашу рабочую область и созданный шаг конвейера.First, create a Pipeline object by using your workspace reference and the pipeline step you created. Параметр steps является массивом шагов.The steps parameter is an array of steps. В этом случае для пакетной оценки выполняется только один шаг.In this case, there's only one step for batch scoring. Чтобы создать конвейеры с несколькими шагами, разместите шаги по порядку в этом массиве.To build pipelines that have multiple steps, place the steps in order in this array.

Затем используйте функцию Experiment.submit(), чтобы передать конвейер для выполнения.Next, use the Experiment.submit() function to submit the pipeline for execution. Функция wait_for_completion выводит журналы во время процесса сборки конвейера.The wait_for_completion function outputs logs during the pipeline build process. В журналах можно просмотреть текущий ход выполнения.You can use the logs to see current progress.

Важно!

Первый запуск конвейера занимает примерно 15 минут.The first pipeline run takes roughly 15 minutes. Необходимо скачать все зависимости, создать образ Docker и подготовить и создать среду Python.All dependencies must be downloaded, a Docker image is created, and the Python environment is provisioned and created. Повторный запуск конвейера занимает значительно меньше времени, так как эти ресурсы используются повторно, а не создаются.Running the pipeline again takes significantly less time because those resources are reused instead of created. Однако общее время запуска для конвейера зависит от рабочей нагрузки ваших скриптов и процессов, выполняемых в каждом шаге конвейера.However, total run time for the pipeline depends on the workload of your scripts and the processes that are running in each pipeline step.

from azureml.core import Experiment
from azureml.pipeline.core import Pipeline

pipeline = Pipeline(workspace=ws, steps=[batch_score_step])
pipeline_run = Experiment(ws, 'batch_scoring').submit(pipeline)
pipeline_run.wait_for_completion(show_output=True)

Скачивание и просмотр выходных данныхDownload and review output

Запустите приведенный ниже код, чтобы скачать выходной файл, созданный из скрипта batch_scoring.py.Run the following code to download the output file that's created from the batch_scoring.py script. Затем изучите результаты оценки.Then, explore the scoring results.

import pandas as pd

batch_run = next(pipeline_run.get_children())
batch_output = batch_run.get_output_data("scores")
batch_output.download(local_path="inception_results")

for root, dirs, files in os.walk("inception_results"):
    for file in files:
        if file.endswith("parallel_run_step.txt"):
            result_file = os.path.join(root, file)

df = pd.read_csv(result_file, delimiter=":", header=None)
df.columns = ["Filename", "Prediction"]
print("Prediction has ", df.shape[0], " rows")
df.head(10)

Публикация и запуск из конечной точки RESTPublish and run from a REST endpoint

Выполните приведенный ниже код, чтобы опубликовать конвейер в рабочей области.Run the following code to publish the pipeline to your workspace. В своей рабочей области студии машинного обучения Azure вы можете просмотреть метаданные для конвейера, включая журнал выполнения и продолжительность.In your workspace in Azure Machine Learning studio, you can see metadata for the pipeline, including run history and durations. Вы также можете запустить в студии конвейер вручную.You can also run the pipeline manually from the studio.

Публикация конвейера позволяет конечной точке REST повторно запускать конвейер из любой библиотеки HTTP на любой платформе.Publishing the pipeline enables a REST endpoint that you can use to run the pipeline from any HTTP library on any platform.

published_pipeline = pipeline_run.publish_pipeline(
    name="Inception_v3_scoring", description="Batch scoring using Inception v3 model", version="1.0")

published_pipeline

Чтобы запустить конвейер из конечной точки REST, вам потребуется заголовок проверки подлинности типа OAuth2 Bearer.To run the pipeline from the REST endpoint, you need an OAuth2 Bearer-type authentication header. В следующем примере для иллюстрации используется интерактивная проверка подлинности, но для большинства производственных сценариев, требующих автоматической или автономной проверки подлинности, необходимо использовать проверку подлинности субъекта-службы, как описано в этой статье.The following example uses interactive authentication (for illustration purposes), but for most production scenarios that require automated or headless authentication, use service principal authentication as described in this article.

Проверка подлинности субъекта-службы включает в себя создание регистрации приложения в Azure Active Directory.Service principal authentication involves creating an App Registration in Azure Active Directory. Сначала необходимо создать секрет клиента, а затем предоставить субъекту-службе доступ роли к вашей рабочей области машинного обучения.First, you generate a client secret, and then you grant your service principal role access to your machine learning workspace. Используйте класс ServicePrincipalAuthentication для управления потоком проверки подлинности.Use the ServicePrincipalAuthentication class to manage your authentication flow.

InteractiveLoginAuthentication и ServicePrincipalAuthentication наследуются от AbstractAuthentication.Both InteractiveLoginAuthentication and ServicePrincipalAuthentication inherit from AbstractAuthentication. В обоих случаях используйте функцию get_authentication_header() для извлечения заголовка:In both cases, use the get_authentication_header() function in the same way to fetch the header:

from azureml.core.authentication import InteractiveLoginAuthentication

interactive_auth = InteractiveLoginAuthentication()
auth_header = interactive_auth.get_authentication_header()

Получите URL-адрес REST из свойства endpoint объекта опубликованного конвейера.Get the REST URL from the endpoint property of the published pipeline object. Кроме того, URL-адрес REST можно найти в рабочей области в студии машинного обучения Azure.You can also find the REST URL in your workspace in Azure Machine Learning studio.

Создайте запрос HTTP POST к конечной точке.Build an HTTP POST request to the endpoint. Укажите заголовок проверки подлинности в запросе.Specify your authentication header in the request. Добавьте объект полезных данных JSON с именем эксперимента.Add a JSON payload object that has the experiment name.

Выполните запрос на активацию запуска.Make the request to trigger the run. Включите код для доступа к ключу Id из словаря ответов, чтобы получить значение идентификатора запуска.Include code to access the Id key from the response dictionary to get the value of the run ID.

import requests

rest_endpoint = published_pipeline.endpoint
response = requests.post(rest_endpoint, 
                         headers=auth_header, 
                         json={"ExperimentName": "batch_scoring",
                               "ParameterAssignments": {"process_count_per_node": 6}})
run_id = response.json()["Id"]

Используйте его для отслеживания состояния нового запуска.Use the run ID to monitor the status of the new run. Для завершения нового запуска требуется еще 10–15 минут.The new run takes another 10-15 min to finish.

Новый запуск будет выглядеть аналогично конвейеру, который вы запустили ранее в этом руководстве.The new run will look similar to the pipeline you ran earlier in the tutorial. Вы можете не просматривать все выходные данные.You can choose not to view the full output.

from azureml.pipeline.core.run import PipelineRun
from azureml.widgets import RunDetails

published_pipeline_run = PipelineRun(ws.experiments["batch_scoring"], run_id)
RunDetails(published_pipeline_run).show()

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

Не выполняйте инструкции из этого раздела, если вы собираетесь изучать другие руководства по Машинному обучению Azure.Don't complete this section if you plan to run other Azure Machine Learning tutorials.

Остановка вычислительной операцииStop the compute instance

Если вы использовали вычислительный экземпляр или виртуальную машину для записных книжек, завершите работу неиспользуемой виртуальной машины, чтобы сократить расходы.If you used a compute instance or Notebook VM, stop the VM when you aren't using it to reduce cost.

  1. В своей рабочей области выберите Вычисление.In your workspace, select Compute.

  2. Выберите пользователя из списка.From the list, select the VM.

  3. Выберите Остановить.Select Stop.

  4. Когда вам снова понадобится использовать сервер, выберите Запустить.When you're ready to use the server again, select Start.

Удаление всех ресурсовDelete everything

Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.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, in the left menu, select Resource groups.
  2. В списке групп ресурсов выберите созданную группу ресурсов.In the list of resource groups, select the resource group you created.
  3. Выберите Удалить группу ресурсов.Select Delete resource group.
  4. Введите имя группы ресурсов.Enter the resource group name. Затем нажмите кнопку Удалить.Then, select Delete.

Вы также можете сохранить группу ресурсов, но удалить одну рабочую область.You can also keep the resource group but delete a single workspace. Отобразите свойства рабочей области и нажмите кнопку Удалить.Display the workspace properties, and then select Delete.

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

Изучив это руководство о конвейерах машинного обучения, вы выполнили следующие задачи:In this machine learning pipelines tutorial, you did the following tasks:

  • Создание конвейера с зависимостями среды для запуска в удаленном ресурсе вычислений GPU.Built a pipeline with environment dependencies to run on a remote GPU compute resource.
  • Создание скрипта оценки для выполнения пакетных прогнозирований с помощью предварительно обученной модели Tensorflow.Created a scoring script to run batch predictions by using a pretrained Tensorflow model.
  • Публикация конвейера и его включение для запуска с конечной точки REST.Published a pipeline and enabled it to be run from a REST endpoint.

Дополнительные примеры создания конвейеров с помощью пакета SDK для машинного обучения см. в репозитории записных книжек.For more examples of how to build pipelines by using the machine learning SDK, see the notebook repository.