Как использовать веб-службу Студии машинного обучения Azure (классическая модель)
ОБЛАСТЬ ПРИМЕНЕНИЯ: Машинное обучение Studio (классическая) Машинное обучение Azure
Внимание
Поддержка Студии машинного обучения (классической) будет прекращена 31 августа 2024 г. До этой даты рекомендуется перейти на Машинное обучение Azure.
Начиная с 1 декабря 2021 года вы не сможете создавать новые ресурсы Студии машинного обучения (классической). Существующие ресурсы Студии машинного обучения (классической) можно будет использовать до 31 августа 2024 г.
- См. сведения о переносе проектов машинного обучения из Студии машинного обучения (классическая версия) в Машинное обучение Azure.
- См. дополнительные сведения о Машинном обучении Azure.
Прекращается поддержка документации по Студии машинного обучения (классической). В будущем она может не обновляться.
После развертывания прогнозной модели Студии машинного обучения (классическая) в качестве веб-службы можно использовать REST API для отправки данных и получения прогнозов. Данные можно отправлять в режиме реального времени или пакетном режиме.
Дополнительные сведения о способах создания и развертывания веб-службы машинного обучения с помощью Студии машинного обучения (классическая модель) можно найти в следующих статьях.
- Руководство по созданию эксперимента в Студии машинного обучения (классическая модель) см. в этой статье.
- Дополнительные сведения о развертывании веб-службы см. в этой статье.
- Дополнительные сведения о машинном обучении см. в центре документации по Машинному обучению Azure.
Обзор
С помощью веб-службы Машинного обучения внешнее приложение взаимодействует с рабочим процессом Машинного обучения, оценивая модель в режиме реального времени. Вызов веб-службы машинного обучения возвращает результаты прогноза внешнему приложению. Чтобы вызвать веб-службу машинного обучения, следует передать ключ API, создаваемый при развертывании прогноза. Веб-служба машинного обучения работает на основе архитектуры REST, используемой в основном в проектах с веб-программированием.
Студия машинного обучения (классическая) содержит два типа служб:
- Служба обработки запросов и ответов (RRS) — высокомасштабируемая служба с малым временем задержки, используемая в качестве интерфейса для моделей без изменения состояния, которые создаются и развертываются в студии машинного обучения Microsoft Azure (классическая модель).
- Служба пакетного выполнения (BES) — асинхронная служба, оценивающая пакет записей данных.
Дополнительные сведения о веб-службах машинного обучения приведены в статье Развертывание веб-службы машинного обучения Azure.
Получение ключа авторизации
При развертывании эксперимента создаются ключи API для веб-службы. Ключи можно извлечь из нескольких расположений.
С портала веб-служб Машинного обучения
Войдите на портал веб-служб Машинного обучения.
Чтобы получить ключ API для новой веб-службы машинного обучения, сделайте следующее:
- На портале веб-служб Машинного обучения в верхнем меню щелкните Веб-службы.
- Щелкните веб-службу, для которой требуется получить ключ.
- В верхнем меню щелкните Consume(Использование).
- Скопируйте и сохраните Primary Key(Первичный ключ).
Чтобы получить ключ API для классической веб-службы машинного обучения, сделайте следующее:
- На портале веб-служб Машинного обучения Azure в верхнем меню щелкните Classic Web Services (Классические веб-службы).
- Выберите веб-службу, с которой вы работаете.
- Щелкните конечную точку, для которой требуется получить ключ.
- В верхнем меню щелкните Consume(Использование).
- Скопируйте и сохраните Primary Key(Первичный ключ).
Классическая веб-служба
Ключ для классической веб-службы можно также получить из Студии машинного обучения (классическая модель).
Студия машинного обучения (классическая версия)
- В студии машинного обучения (классическая модель) щелкните WEB SERVICES (ВЕБ-СЛУЖБЫ) слева.
- Щелкните веб-службу. Ключ API указан на вкладке Панель мониторинга.
Подключение к веб-службе машинного обучения
К веб-службе машинного обучения можно подключиться, используя любой язык программирования, поддерживающий HTTP-запрос и HTTP-ответ. Примеры на языках C#, Python и R можно просмотреть на странице справки веб-службы машинного обучения.
Справка по API машинного обучения. Страница справки по API машинного обучения Azure создается при развертывании веб-службы. См. Учебник 3. Развертывание модели кредитных рисков. Справка по API машинного обучения содержит сведения о веб-службе прогнозирования.
- Выберите веб-службу, с которой вы работаете.
- Щелкните конечную точку, для которой требуется просмотреть страницу справки по API.
- В верхнем меню щелкните Consume(Использование).
- Щелкните API help page (Страница справки API) под конечными точками "Запрос — ответ" или "Выполнение пакета".
Просмотр справки по API машинного обучения для новой веб-службы
На портале веб-служб Машинного обучения сделайте следующее:
- В верхнем меню щелкните WEB SERVICES (ВЕБ-СЛУЖБЫ).
- Щелкните веб-службу, для которой требуется получить ключ.
Щелкните Use Web Service (Использовать веб-службу), чтобы получить значения URI для службы "запрос и ответ" и службы пакетного выполнения, а также для примеров кода на C#, R и Python.
Щелкните Swagger API, чтобы получить документацию на основе Swagger для интерфейсов API, вызываемых из передаваемых URI.
Пример на языке C#
Для подключения к веб-службе машинного обучения воспользуйтесь клиентом HttpClient, передав ScoreData. Данные набора содержат FeatureVector, n-мерный вектор числовых параметров, представляющий ScoreData. Службу машинного обучения можно аутентифицировать с помощью ключа API.
Для подключения к веб-службе машинного обучения должен быть установлен пакет NuGet Microsoft.AspNet.WebApi.Client.
Установка Microsoft.AspNet.WebApi.Client NuGet в Visual Studio
- Опубликуйте набор данных Загрузки из набора UCI: Adult 2 веб-службы.
- Выберите Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
- Выберите Установить пакет Microsoft.AspNet.WebApi.Client.
Для запуска примера выполните следующие действия:
- Опубликуйте эксперимент "Пример 1. Загрузка набора данных из UCI: набор данных для класса Adult 2", входящий в набор примеров машинного обучения Azure.
- Назначьте apiKey ключ из веб-службы. См. выше раздел Получение ключа авторизации.
- Назначьте serviceUri универсальный код ресурса запроса.
Вот как будет выглядеть полный запрос:
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.
Для запуска примера выполните следующие действия:
- Разверните эксперимент "Sample 1: Download dataset from UCI: Adult 2 class dataset" (Пример 1. Скачивание набора данных из UCI: набор данных для класса Adult 2), входящий в набор примеров машинного обучения.
- Назначьте apiKey ключ из веб-службы. См. раздел Получение ключа авторизации в начале этой статьи.
- Назначьте serviceUri универсальный код ресурса запроса.
Вот как будет выглядеть полный запрос:
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);
}
});