Как использовать веб-службу классической версии платформы машинного обучения (Machine Learning Studio)

ОБЛАСТЬ ПРИМЕНЕНИЯ:Это значок в виде галочки, что означает, что эта статья применима к Классической версии Студии машинного обучения. Студия машинного обучения (классическая) Это значок в виде X, что означает, что эта статья относится к Azure Machine Learning. Машинное обучение Azure

Внимание

Поддержка Студии машинного обучения (классической) будет прекращена 31 августа 2024 г. До этой даты рекомендуется перейти на Машинное обучение Azure.

Начиная с 1 декабря 2021 года вы не сможете создавать новые ресурсы Студии машинного обучения (классической). Существующие ресурсы Студии машинного обучения (классической) можно будет использовать до 31 августа 2024 г.

Документация по Студии машинного обучения (классической) выводится из обращения и в будущем может не обновляться.

После развертывания прогнозной модели Студии машинного обучения (классическая) в качестве веб-службы можно использовать REST API для отправки данных и получения прогнозов. Данные можно отправлять в режиме реального времени или пакетном режиме.

Дополнительные сведения о способах создания и развертывания веб-службы машинного обучения с помощью Студии машинного обучения (классическая модель) можно найти в следующих статьях.

Обзор

С помощью веб-службы Машинного обучения внешнее приложение взаимодействует с рабочим процессом Машинного обучения, оценивая модель в режиме реального времени. Вызов веб-службы машинного обучения возвращает результаты прогноза внешнему приложению. Чтобы вызвать веб-службу машинного обучения, следует передать ключ API, создаваемый при развертывании прогноза. Веб-служба машинного обучения работает на основе архитектуры REST, используемой в основном в проектах с веб-программированием.

Студия машинного обучения (классическая) содержит два типа служб:

  • Служба обработки запросов и ответов (RRS) — высокомасштабируемая служба с малым временем задержки, используемая в качестве интерфейса для моделей без изменения состояния, которые создаются и развертываются в студии машинного обучения Microsoft Azure (классическая модель).
  • Служба пакетного выполнения (BES) — асинхронная служба, оценивающая пакет записей данных.

Дополнительные сведения о веб-службах машинного обучения приведены в статье Развертывание веб-службы машинного обучения.

Получение ключа авторизации

При развертывании эксперимента создаются ключи API для веб-службы. Ключи можно получить из нескольких мест.

С портала веб-служб Машинного обучения

Войдите на портал веб-служб Машинного обучения.

Чтобы получить ключ API для новой веб-службы машинного обучения, сделайте следующее:

  1. На портале веб-служб Машинного обучения в верхнем меню щелкните Веб-службы.
  2. Щелкните веб-службу, для которой требуется получить ключ.
  3. В верхнем меню щелкните Consume.
  4. Скопируйте и сохраните Primary Key(Первичный ключ).

Чтобы получить ключ API для классической веб-службы машинного обучения, сделайте следующее:

  1. На портале веб-служб Машинного обучения Azure в верхнем меню щелкните Classic Web Services (Классические веб-службы).
  2. Выберите веб-службу, с которой вы работаете.
  3. Щелкните конечную точку, для которой требуется получить ключ.
  4. В верхнем меню щелкните Consume.
  5. Скопируйте и сохраните Primary Key(Первичный ключ).

Классическая веб-служба

Вы также можете получить ключ для классической веб-службы из Machine Learning Studio (classic).

Студия машинного обучения (классическая версия)

  1. В студии машинного обучения (классическая модель) щелкните WEB SERVICES (ВЕБ-СЛУЖБЫ) слева.
  2. Щелкните веб-сервис. Ключ API указан на вкладке Панель мониторинга.

Подключение к веб-службе машинного обучения

К веб-службе машинного обучения можно подключиться, используя любой язык программирования, поддерживающий HTTP-запрос и HTTP-ответ. Примеры на языках C#, Python и R можно просмотреть на странице справки веб-службы машинного обучения.

Справка по API машинного обучения Справка по API машинного обучения создается при развертывании веб-службы. См. Учебник 3. Развертывание модели кредитных рисков. Справка по API машинного обучения содержит сведения о веб-службе прогнозирования.

  1. Выберите веб-службу, с которой вы работаете.
  2. Щелкните конечную точку, для которой требуется просмотреть страницу справки по API.
  3. В верхнем меню щелкните Consume.
  4. Щелкните API help page под пунктами "Запрос—ответ" или "Пакетное выполнение".

Чтобы ознакомиться со справкой по API машинного обучения для нового веб-сервиса

На портале веб-служб Машинного обучения сделайте следующее:

  1. В верхнем меню щелкните WEB SERVICES (ВЕБ-СЛУЖБЫ).
  2. Щелкните веб-службу, для которой требуется получить ключ.

Щелкните Use Web Service (Использовать веб-службу), чтобы получить значения URI для службы "запрос и ответ" и службы пакетного выполнения, а также для примеров кода на C#, R и Python.

Кликните Swagger API, чтобы получить документацию на основе Swagger для API, вызываемых из предоставленных URI.

Пример на языке C#

Для подключения к веб-службе машинного обучения воспользуйтесь клиентом HttpClient, передав ScoreData. ScoreData содержит FeatureVector, n-мерный вектор числовых признаков, представляющий ScoreData. Службу машинного обучения можно аутентифицировать с помощью ключа API.

Для подключения к веб-службе машинного обучения должен быть установлен пакет NuGet Microsoft.AspNet.WebApi.Client.

Установка Microsoft.AspNet.WebApi.Client NuGet в Visual Studio

  1. Опубликуйте набор данных Загрузки из набора UCI: Adult 2 веб-службы.
  2. Выберите Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
  3. Выберите Установить пакет Microsoft.AspNet.WebApi.Client.

Для запуска примера выполните следующие действия:

  1. Опубликуйте эксперимент "Пример 1: Загрузка набора данных из UCI: набор данных класса Adult 2", входящий в коллекцию примеров машинного обучения.
  2. Присвойте переменной apiKey ключ из веб-службы. См. выше раздел Получение ключа авторизации.
  3. Назначьте serviceUri с URI запроса.

Вот как будет выглядеть полный запрос:

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace CallRequestResponseService
{
    class Program
    {
        static void Main(string[] args)
        {
            InvokeRequestResponseService().Wait();
        }

        static async Task InvokeRequestResponseService()
        {
            using (var client = new HttpClient())
            {
                var scoreRequest = new
                {
                    Inputs = new Dictionary<string, List<Dictionary<string, string>>> () {
                        {
                            "input1",
                            // Replace columns labels with those used in your dataset
                            new List<Dictionary<string, string>>(){new Dictionary<string, string>(){
                                    {
                                        "column1", "value1"
                                    },
                                    {
                                        "column2", "value2"
                                    },
                                    {
                                        "column3", "value3"
                                    }
                                }
                            }
                        },
                    },
                    GlobalParameters = new Dictionary<string, string>() {}
                };

                // Replace these values with your API key and URI found on https://services.azureml.net/
                const string apiKey = "<your-api-key>"; 
                const string apiUri = "<your-api-uri>";
                
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Bearer", apiKey);
                client.BaseAddress = new Uri(apiUri);

                // WARNING: The 'await' statement below can result in a deadlock
                // if you are calling this code from the UI thread of an ASP.NET application.
                // One way to address this would be to call ConfigureAwait(false)
                // so that the execution does not attempt to resume on the original context.
                // For instance, replace code such as:
                //      result = await DoSomeTask()
                // with the following:
                //      result = await DoSomeTask().ConfigureAwait(false)

                HttpResponseMessage response = await client.PostAsJsonAsync("", scoreRequest);

                if (response.IsSuccessStatusCode)
                {
                    string result = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("Result: {0}", result);
                }
                else
                {
                    Console.WriteLine(string.Format("The request failed with status code: {0}", response.StatusCode));

                    // Print the headers - they include the request ID and the timestamp,
                    // which are useful for debugging the failure
                    Console.WriteLine(response.Headers.ToString());

                    string responseContent = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseContent);
                }
            }
        }
    }
}

Пример на Python

Чтобы подключиться к веб-службе машинного обучения, используйте библиотеку urllib2 для Python 2.X и библиотеку urllib.request для Python 3.X. Вы передадите данные ScoreData, содержащие FeatureVector — n-мерный вектор числовых параметров, представляющий ScoreData. Службу машинного обучения можно аутентифицировать с помощью ключа API.

Для запуска примера выполните следующие действия:

  1. Разверните эксперимент "Sample 1: Download dataset from UCI: Adult 2 class dataset" (Пример 1. Скачивание набора данных из UCI: набор данных для класса Adult 2), входящий в набор примеров машинного обучения.
  2. Присвойте переменной apiKey ключ из веб-службы. См. раздел Получение ключа авторизации в начале этой статьи.
  3. Назначьте serviceUri с URI запроса.

Вот как будет выглядеть полный запрос:

import urllib2 # urllib.request and urllib.error for Python 3.X
import json

data = {
    "Inputs": {
        "input1":
        [
            {
                'column1': "value1",   
                'column2': "value2",   
                'column3': "value3"
            }
        ],
    },
    "GlobalParameters":  {}
}

body = str.encode(json.dumps(data))

# Replace this with the URI and API Key for your web service
url = '<your-api-uri>'
api_key = '<your-api-key>'
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}

# "urllib.request.Request(url, body, headers)" for Python 3.X
req = urllib2.Request(url, body, headers)

try:
    # "urllib.request.urlopen(req)" for Python 3.X
    response = urllib2.urlopen(req)

    result = response.read()
    print(result)
# "urllib.error.HTTPError as error" for Python 3.X
except urllib2.HTTPError, error: 
    print("The request failed with status code: " + str(error.code))

    # Print the headers - they include the request ID and the timestamp, which are useful for debugging the failure
    print(error.info())
    print(json.loads(error.read())) 

Пример на языке R

Чтобы подключиться к веб-службе машинного обучения, используйте для выполнения запроса и обработки ответа в формате JSON библиотеки RCurl и rjson. Вы передадите данные ScoreData, содержащие FeatureVector — n-мерный вектор числовых характеристик, который описывает ScoreData. Службу машинного обучения можно аутентифицировать с помощью ключа API.

Вот как будет выглядеть полный запрос:

library("curl")
library("httr")
library("rjson")

requestFailed = function(response) {
    return (response$status_code >= 400)
}

printHttpResult = function(response, result) {
    if (requestFailed(response)) {
        print(paste("The request failed with status code:", response$status_code, sep=" "))
    
        # Print the headers - they include the request ID and the timestamp, which are useful for debugging the failure
        print(response$headers)
    }
    
    print("Result:") 
    print(fromJSON(result))  
}

req = list(
        Inputs = list( 
            "input1" = list(
                "ColumnNames" = list("Col1", "Col2", "Col3"),
                "Values" = list( list( "0", "value", "0" ),  list( "0", "value", "0" )  )
            )                ),
        GlobalParameters = setNames(fromJSON('{}'), character(0))
)

body = enc2utf8(toJSON(req))
api_key = "abc123" # Replace this with the API key for the web service
authz_hdr = paste('Bearer', api_key, sep=' ')

response = POST(url= "<your-api-uri>",
        add_headers("Content-Type" = "application/json", "Authorization" = authz_hdr),
        body = body)

result = content(response, type="text", encoding="UTF-8")

printHttpResult(response, result)

Пример на языке JavaScript

Чтобы подключиться к веб-службе машинного обучения, используйте в своем проекте пакет npm request. Кроме того, для форматирования входных данных и анализа результата вы будете использовать объект JSON. Выполните установку с помощью npm install request --save или добавьте "request": "*" в файл package.json в разделе dependencies и запустите npm install.

Вот как будет выглядеть полный запрос:

let req = require("request");

const uri = "<your-api-uri>";
const apiKey = "<your-api-key>";

let data = {
    "Inputs": {
        "input1":
        [
            {
                'column1': "value1",
                'column2': "value2",
                'column3': "value3"
            }
        ],
    },
    "GlobalParameters": {}
}

const options = {
    uri: uri,
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + apiKey,
    },
    body: JSON.stringify(data)
}

req(options, (err, res, body) => {
    if (!err && res.statusCode == 200) {
        console.log(body);
    } else {
        console.log("The request failed with status code: " + res.statusCode);
    }
});