Partilhar via


Como consumir um serviço Web do Machine Learning Studio (clássico)

APLICA-SE A: Esta é uma marca de seleção, o que significa que este artigo se aplica ao Machine Learning Studio (clássico). Machine Learning Studio (clássico) Este é um X, o que significa que este artigo se aplica ao Azure Machine Learning.Azure Machine Learning

Importante

O suporte para o Estúdio de ML (clássico) terminará a 31 de agosto de 2024. Recomendamos a transição para o Azure Machine Learning até essa data.

A partir de 1 de dezembro de 2021, não poderá criar novos recursos do Estúdio de ML (clássico). Até 31 de agosto de 2024, pode continuar a utilizar os recursos existentes do Estúdio de ML (clássico).

A documentação do Estúdio de ML (clássico) está a ser descontinuada e poderá não ser atualizada no futuro.

Depois de implantar um modelo preditivo (clássico) do Machine Learning Studio como um serviço Web, você pode usar uma API REST para enviar dados e obter previsões. Você pode enviar os dados em tempo real ou em modo batch.

Você pode encontrar mais informações sobre como criar e implantar um serviço Web de Aprendizado de Máquina usando o Estúdio de Aprendizado de Máquina (clássico) aqui:

Descrição geral

Com o serviço Web de Aprendizado de Máquina, um aplicativo externo se comunica com um modelo de pontuação de fluxo de trabalho de Aprendizado de Máquina em tempo real. Uma chamada de serviço Web de Aprendizado de Máquina retorna resultados de previsão para um aplicativo externo. Para fazer uma chamada de serviço Web de Aprendizado de Máquina, passe uma chave de API que é criada quando você implanta uma previsão. O serviço Web de Aprendizado de Máquina é baseado em REST, uma escolha de arquitetura popular para projetos de programação da Web.

O Machine Learning Studio (clássico) tem dois tipos de serviços:

  • Serviço de Solicitação-Resposta (RRS) – Um serviço de baixa latência e altamente escalável que fornece uma interface para os modelos sem monitoração de estado criados e implantados a partir do Estúdio de Aprendizado de Máquina (clássico).
  • Batch Execution Service (BES) – Um serviço assíncrono que pontua um lote para registros de dados.

Para obter mais informações sobre serviços Web de Aprendizado de Máquina, consulte Implantar um serviço Web de Aprendizado de Máquina.

Obter uma chave de autorização

Quando você implanta seu experimento, as chaves de API são geradas para o serviço Web. Você pode recuperar as chaves de vários locais.

No portal de Serviços Web de Aprendizado de Máquina

Entre no portal de Serviços Web de Aprendizado de Máquina.

Para recuperar a chave de API para um novo serviço Web de Aprendizado de Máquina:

  1. No portal de Serviços Web de Aprendizado de Máquina, clique em Serviços Web no menu superior.
  2. Clique no serviço Web para o qual você deseja recuperar a chave.
  3. No menu superior, clique em Consumir.
  4. Copie e salve a Chave Primária.

Para recuperar a chave de API para um serviço Web Classic Machine Learning:

  1. No portal de Serviços Web do Azure Machine Learning, clique em Serviços Web Clássicos no menu superior.
  2. Clique no serviço Web com o qual você está trabalhando.
  3. Clique no ponto de extremidade para o qual você deseja recuperar a chave.
  4. No menu superior, clique em Consumir.
  5. Copie e salve a Chave Primária.

Serviço Web clássico

Você também pode recuperar uma chave para um serviço Web clássico do Machine Learning Studio (clássico).

Machine Learning Studio (clássico)

  1. No Machine Learning Studio (clássico), clique em WEB SERVICES à esquerda.
  2. Clique em um serviço Web. A chave da API está na guia DASHBOARD .

Conectar-se a um serviço Web de Aprendizado de Máquina

Você pode se conectar a um serviço Web de Aprendizado de Máquina usando qualquer linguagem de programação que ofereça suporte a solicitação e resposta HTTP. Você pode exibir exemplos em C#, Python e R em uma página de ajuda do serviço Web de Aprendizado de Máquina.

Ajuda da API de Aprendizado de Máquina A ajuda da API de Aprendizado de Máquina é criada quando você implanta um serviço Web. Consulte o Tutorial 3: Implantar o modelo de risco de crédito. A ajuda da API de Aprendizado de Máquina contém detalhes sobre um serviço Web de previsão.

  1. Clique no serviço Web com o qual você está trabalhando.
  2. Clique no ponto de extremidade para o qual você deseja exibir a Página de Ajuda da API.
  3. No menu superior, clique em Consumir.
  4. Clique na página de ajuda da API nos pontos de extremidade Solicitação-Resposta ou Execução em lote.

Para exibir a ajuda da API de Aprendizado de Máquina para um novo serviço Web

No Portal de Serviços Web de Aprendizado de Máquina:

  1. Clique em WEB SERVICES no menu superior.
  2. Clique no serviço Web para o qual você deseja recuperar a chave.

Clique em Usar Serviço Web para obter os URIs para o código Request-Response e Batch Execution Services e Sample em C#, R e Python.

Clique em API do Swagger para obter a documentação baseada no Swagger para as APIs chamadas a partir dos URIs fornecidos.

Exemplo de C#

Para se conectar a um serviço Web de Aprendizado de Máquina, use um HttpClient passando ScoreData. ScoreData contém um FeatureVector, um vetor n-dimensional de recursos numéricos que representa o ScoreData. Você se autentica no serviço de Aprendizado de Máquina com uma chave de API.

Para se conectar a um serviço Web de Aprendizado de Máquina, o pacote NuGet Microsoft.AspNet.WebApi.Client deve ser instalado.

Instalar Microsoft.AspNet.WebApi.Client NuGet no Visual Studio

  1. Publique o conjunto de dados Download da UCI: Adult 2 class dataset Web Service.
  2. clique em Ferramentas>Gestor de Pacotes NuGet>Consola de Gestor de Pacotes.
  3. Escolha Install-Package Microsoft.AspNet.WebApi.Client.

Para executar o exemplo de código

  1. Publique o experimento "Sample 1: Download dataset from UCI: Adult 2 class dataset", parte da coleção de exemplos do Machine Learning.
  2. Atribua apiKey com a chave de um serviço Web. Consulte Obter uma chave de autorização acima.
  3. Atribua serviceUri com o URI de solicitação.

Aqui está como será um pedido completo.

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);
                }
            }
        }
    }
}

Exemplo de Python

Para se conectar a um serviço Web de Aprendizado de Máquina, use a biblioteca urllib2 para Python 2.X e a biblioteca urllib.request para Python 3.X. Você passará ScoreData, que contém um FeatureVector, um vetor n-dimensional de recursos numéricos que representa o ScoreData. Você se autentica no serviço de Aprendizado de Máquina com uma chave de API.

Para executar o exemplo de código

  1. Implante o experimento "Amostra 1: Baixar conjunto de dados da UCI: conjunto de dados de classe adulto 2", parte da coleção de exemplos do Machine Learning.
  2. Atribua apiKey com a chave de um serviço Web. Consulte a seção Obter uma chave de autorização no início deste artigo.
  3. Atribua serviceUri com o URI de solicitação.

Aqui está como será um pedido completo.

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())) 

Amostra R

Para se conectar a um Serviço Web de Aprendizado de Máquina, use as bibliotecas RCurl e rjson para fazer a solicitação e processar a resposta JSON retornada. Você passará ScoreData, que contém um FeatureVector, um vetor n-dimensional de recursos numéricos que representa o ScoreData. Você se autentica no serviço de Aprendizado de Máquina com uma chave de API.

Aqui está como será um pedido completo.

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)

Exemplo de JavaScript

Para se conectar a um serviço Web de Aprendizado de Máquina, use o pacote npm request em seu projeto. Você também usará o JSON objeto para formatar sua entrada e analisar o resultado. Instale usando npm install request --saveo , ou adicione "request": "*" ao seu package.json em dependencies e execute npm install.

Aqui está como será um pedido completo.

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);
    }
});