如何使用 機器學習 Studio (傳統) Web 服務
適用於:機器學習 Studio(傳統版)Azure 機器學習
重要
Machine Learning 工作室 (傳統) 的支援將於 2024 年 8 月 31 日結束。 建議您在該日期之前轉換成 Azure Machine Learning。
自 2021 年 12 月 1 日起,您將無法建立新的 Machine Learning 工作室 (傳統) 資源。 在 2024 年 8 月 31 日之前,您可以繼續使用現有的 Machine Learning 工作室 (傳統) 資源。
ML 工作室 (傳統) 文件即將淘汰,未來將不再更新。
當您將 機器學習 Studio (傳統) 預測模型部署為 Web 服務之後,您就可以使用 REST API 來傳送數據並取得預測。 您可以即時或批次模式傳送數據。
您可以在這裡找到如何使用 機器學習 Studio 來建立及部署 機器學習 Web 服務的詳細資訊:
- 如需如何在 機器學習 Studio 中建立實驗的教學課程(傳統版),請參閱建立您的第一個實驗。
- 如需如何部署 Web 服務的詳細資訊,請參閱部署 機器學習 Web 服務。
- 如需一般 機器學習 的詳細資訊,請流覽 機器學習 檔中心。
概觀
使用 機器學習 Web 服務,外部應用程式會即時與 機器學習 工作流程評分模型通訊。 機器學習 Web 服務呼叫會將預測結果傳回至外部應用程式。 若要進行 機器學習 Web 服務呼叫,您可以傳遞部署預測時所建立的 API 金鑰。 機器學習 Web 服務是以 REST 為基礎,這是 Web 程式設計專案的熱門架構選擇。
機器學習 Studio(傳統版)有兩種類型的服務:
- 要求-回應服務 (RRS) – 低延遲、高度可調整的服務,可提供從 機器學習 Studio 建立和部署之無狀態模型的介面(傳統)。
- 批次執行服務 (BES) – 為數據記錄評分批次的異步服務。
如需 機器學習Web服務的詳細資訊,請參閱部署 機器學習Web服務。
取得授權金鑰
當您部署實驗時,會為 Web 服務產生 API 金鑰。 您可以從數個位置擷取金鑰。
從 機器學習 Web 服務入口網站
登入 機器學習 Web 服務入口網站。
若要擷取新 機器學習 Web 服務的 API 金鑰:
- 在 機器學習 Web 服務入口網站中,單擊頂端功能表的 [Web 服務]。
- 按兩下您要擷取金鑰的 Web 服務。
- 在頂端功能表上,按兩下 [ 取用]。
- 複製並儲存 主鍵。
若要擷取傳統 機器學習 Web 服務的 API 金鑰:
- 在 Azure 機器學習 Web 服務入口網站中,單擊頂端功能表的傳統 Web 服務。
- 按兩下您正在使用的 Web 服務。
- 按兩下您要擷取金鑰的端點。
- 在頂端功能表上,按兩下 [ 取用]。
- 複製並儲存 主鍵。
傳統 Web 服務
您也可以從 機器學習 Studio (classic) 擷取傳統 Web 服務的金鑰。
Machine Learning Studio (傳統)
- 在 機器學習 Studio(傳統版)中,按兩下左側的 [WEB 服務]。
- 按兩下Web服務。 API 金鑰位於 [儀錶板] 索引標籤上。
聯機到 機器學習 Web 服務
您可以使用任何支援 HTTP 要求和回應的程式設計語言,連線到 機器學習 Web 服務。 您可以從 機器學習 Web 服務說明頁面檢視 C#、Python 和 R 中的範例。
當您部署 Web 服務時,機器學習 API 說明 機器學習 建立 API 說明。 請參閱 教學課程 3:部署信用風險模型。 機器學習 API 說明包含預測 Web 服務的詳細數據。
- 按兩下您正在使用的 Web 服務。
- 按兩下您要檢視 API 說明頁面的端點。
- 在頂端功能表上,按兩下 [ 取用]。
- 按兩下 [要求-回應] 或 [批次執行端點] 底下的 [API 說明] 頁面 。
若要檢視新 Web 服務的 機器學習 API 說明
- 點擊頂 端選單上的 [WEB 服務 ]。
- 按兩下您要擷取金鑰的 Web 服務。
單擊 [使用 Web 服務 ] 取得 C#、R 和 Python 中要求回應和批次執行服務和範例程式代碼的 URI。
按兩下 [Swagger API ] 以取得從提供的 URI 呼叫之 API 的 Swagger 型檔。
C# 範例
若要連線到 機器學習 Web 服務,請使用 HttpClient 傳遞 ScoreData。 ScoreData 包含 FeatureVector,這是代表 ScoreData 之數值特徵的 n 維向量。 您可以使用 API 金鑰向 機器學習 服務進行驗證。
若要連線到 機器學習 Web 服務,必須安裝 Microsoft.AspNet.WebApi.Client NuGet 套件。
在 Visual Studio 中安裝 Microsoft.AspNet.WebApi.Client NuGet
- 從UCI發佈下載數據集:成人 2 類別數據集Web服務。
- 按一下 [工具]>[NuGet 套件管理員]>[套件管理員主控台]。
- 選擇 [Install-Package Microsoft.AspNet.WebApi.Client]。
執行程式代碼範例
- 發佈「範例 1:從 UCI:成人 2 類別數據集下載數據集」實驗,這是 機器學習 範例集合的一部分。
- 使用 Web 服務的金鑰指派 apiKey。 請參閱 上述取得授權金鑰 。
- 使用要求 URI 指派 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 範例
若要連線到 機器學習 Web 服務,請使用適用於 Python 2.X 的 urllib2 連結庫和適用於 Python 3.X 的 urllib.request 連結庫。 您將傳遞 ScoreData,其中包含 FeatureVector,這是代表 ScoreData 之數值特徵的 n 維向量。 您可以使用 API 金鑰向 機器學習 服務進行驗證。
執行程式代碼範例
- 部署「範例 1:從 UCI:成人 2 類別數據集下載數據集」實驗,這是 機器學習 範例集合的一部分。
- 使用 Web 服務的金鑰指派 apiKey。 請參閱本文開頭附近的取得授權金鑰一節。
- 使用要求 URI 指派 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 範例
若要連線到 機器學習 Web 服務,請使用 RCurl 和 rjson 連結庫提出要求並處理傳回的 JSON 回應。 您將傳遞 ScoreData,其中包含 FeatureVector,這是代表 ScoreData 之數值特徵的 n 維向量。 您可以使用 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 範例
若要連線到 機器學習 Web 服務,請在專案中使用要求 npm 套件。 您也會使用 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);
}
});