Mengelola layanan web Machine Learning Studio (klasik) menggunakan API Management
BERLAKU UNTUK:
Machine Learning Studio (klasik)
Azure Machine Learning
Penting
Dukungan untuk Studio Azure Machine Learning (klasik) akan berakhir pada 31 Agustus 2024. Sebaiknya Anda transisi ke Azure Machine Learning sebelum tanggal tersebut.
Mulai 1 Desember 2021, Anda tidak akan dapat membuat sumber daya Studio Azure Machine Learning (klasik) baru. Hingga 31 Agustus 2024, Anda dapat terus menggunakan sumber daya Pembelajaran Mesin Studio (klasik) yang ada.
- Lihat informasi tentang memindahkan proyek pembelajaran mesin dari ML Studio (klasik) ke Azure Machine Learning.
- Pelajari Azure Machine Learning
ML Dokumentasi Studio (klasik) sedang berhenti dan mungkin tidak diperbarui di masa mendatang.
Gambaran Umum
Panduan ini menunjukkan cara cepat memulai penggunaan API Management untuk mengelola layanan web Machine Learning Studio (klasik).
Apa itu Azure API Management?
Azure API Management adalah layanan Azure yang memungkinkan Anda mengelola titik akhir REST API dengan menentukan akses pengguna, pembatasan penggunaan, dan pemantauan dasbor. Lihat situs manajemen Azure API untuk mendapatkan detail selengkapnya. Untuk mulai menggunakan Azure API Management, lihat panduan impor dan publikasikan. Panduan lain ini, yang menjadi dasar panduan ini, mencakup lebih banyak topik, termasuk konfigurasi pemberitahuan, harga tingkat, penanganan respons, autentikasi pengguna, pembuatan produk, langganan pengembang, dan dasbor penggunaan.
Prasyarat
Untuk menyelesaikan panduan ini, Anda perlu:
- Akun Azure.
- Akun AzureML.
- Ruang kerja, layanan, dan api_key eksperimen AzureML yang disebarkan sebagai layanan web. Untuk detail tentang cara membuat eksperimen AzureML, lihat mulai cepat Studio. Untuk informasi tentang cara menerapkan eksperimen Studio (klasik) sebagai layanan web, lihat Cara penggunaan Studio untuk detail tentang cara menerapkan eksperimen AzureML sebagai layanan web. Secara bergantian, Lampiran A memiliki instruksi tentang cara membuat dan menguji eksperimen AzureML sederhana dan menerapkannya sebagai layanan web.
Membuat instans API Management
Anda dapat mengelola layanan web Machine Learning dengan instans API Management.
- Masuk ke portal Microsoft Azure.
- Pilih + Buat sumber daya.
- Di kotak pencarian, ketik "API Management", lalu pilih "sumber daya API Management".
- Klik Buat.
- Nilai Nama akan digunakan untuk membuat URL unik (contoh ini menggunakan "demoazureml").
- Pilih Langganan, Grup sumber daya, dan Lokasi untuk instans layanan Anda.
- Tentukan nilai untuk nama Organisasi (contoh ini menggunakan "demoazureml").
- Masukkan email Administrator Anda - email ini akan digunakan untuk notifikasi dari sistem API Management.
- Klik Buat.
Mungkin perlu waktu hingga 30 menit agar layanan baru dibuat.

Membuat API
Setelah instans layanan dibuat, langkah selanjutnya adalah membuat API. API terdiri dari serangkaian operasi yang dapat dipanggil dari aplikasi klien. Operasi API di-proksi ke layanan web yang ada. Panduan ini membuat API yang memproksi ke layanan web AzureML RRS dan BES yang ada.
Untuk membuat API:
Di portal Microsoft Azure, buka instans layanan yang Anda buat.
Di panel navigasi sebelah kiri, pilih API.

Klik Tambahkan API.
Masukkan nama Web API (contoh ini menggunakan "AzureML Demo API").
Untuk URL layanan Web, masukkan "
https://ussouthcentral.services.azureml.net".Masukkan **akhiran URL API Web". Ini akan menjadi bagian terakhir dari URL yang akan digunakan pelanggan untuk mengirim permintaan ke instans layanan (contoh ini menggunakan "azureml-demo").
Untuk skema URL API Web, pilih HTTPS.
Untuk Produk, pilih Starter.
Klik Simpan.
Menambahkan operasi
Operasi ditambahkan dan dikonfigurasi ke API di portal penerbit. Untuk mengakses portal penerbit, klik Portal penerbit di portal Microsoft Azure untuk layanan API Management Anda, pilih API, Operasi, lalu klik Tambahkan operasi.

Jendela operasi baru akan ditampilkan dan tab Tanda Tangan akan dipilih secara default.
Tambah Operasi RRS
Pertama-tama buat operasi untuk layanan AzureML RRS:
Untuk kata kerja HTTP, pilih POST.
Untuk templat URL, ketik "
/workspaces/{workspace}/services/{service}/execute?api-version={apiversion}&details={details}".Masukkan Nama tampilan (contoh ini menggunakan "RRS Execute").

Klik respons>TAMBAHKAN di sebelah kiri dan pilih 200 OK.
Klik Simpan untuk menyimpan operasi ini.

Tambah Operasi BES
Catatan
Tangkapan layar tidak disertakan di sini untuk operasi BES karena sangat mirip dengan yang untuk menambahkan operasi RRS.
Kirim (tetapi tidak memulai) tugas Eksekusi Batch
- Klik tambahkan operasi untuk menambahkan operasi BES ke API.
- Untuk kata kerja HTTP, pilih POST.
- Untuk templat URL, ketik "
/workspaces/{workspace}/services/{service}/jobs?api-version={apiversion}". - Masukkan Nama tampilan (contoh ini menggunakan "BES Submit").
- Klik respons>TAMBAHKAN di sebelah kiri dan pilih 200 OK.
- Klik Simpan.
Memulai tugas Eksekusi Batch
- Klik tambahkan operasi untuk menambahkan operasi BES ke API.
- Untuk kata kerja HTTP, pilih POST.
- Untuk kata kerja HTTP, ketik "
/workspaces/{workspace}/services/{service}/jobs/{jobid}/start?api-version={apiversion}". - Masukkan Nama tampilan (contoh ini menggunakan "BES Start").
- Klik respons>TAMBAHKAN di sebelah kiri dan pilih 200 OK.
- Klik Simpan.
Dapatkan status atau hasil dari tugas Eksekusi Batch
- Klik tambahkan operasi untuk menambahkan operasi BES ke API.
- Untuk kata kerja HTTP, pilih GET.
- Untuk templat URL, ketik "
/workspaces/{workspace}/services/{service}/jobs/{jobid}?api-version={apiversion}". - Masukkan Nama tampilan (contoh ini menggunakan "BES Status").
- Klik respons>TAMBAHKAN di sebelah kiri dan pilih 200 OK.
- Klik Simpan.
Menghapus tugas Eksekusi Batch
- Klik tambahkan operasi untuk menambahkan operasi BES ke API.
- Untuk kata kerja HTTP, pilih DELETE.
- Untuk templat URL, ketik "
/workspaces/{workspace}/services/{service}/jobs/{jobid}?api-version={apiversion}". - Masukkan Nama tampilan (contoh ini menggunakan "BES Delete").
- Klik respons>TAMBAHKAN di sebelah kiri dan pilih 200 OK.
- Klik Simpan.
Memanggil operasi dari portal Pengembang
Operasi dapat dipanggil langsung dari portal Pengembang, yang menyediakan cara mudah untuk melihat dan menguji operasi API. Dalam langkah ini, Anda akan memanggil metode Eksekusi RRS yang ditambahkan ke AzureML Demo API.
Klik portal Pengembang.

Klik API dari menu atas, lalu klik AzureML Demo API untuk melihat operasi yang tersedia.

Pilih RRS Execute untuk operasi. Klik Coba.

Untuk Parameter permintaan, ketik ruang kerja dan layanan Anda, ketik "2.0 untuk apiversion, dan "true" untuk detail. Anda dapat menemukan ruang kerja dan layanan Anda di dasbor layanan web AzureML (lihat Menguji layanan web di Lampiran A).
Untuk Header permintaan, klik Tambahkan header dan ketik "Content-Type" dan "application/json". Klik Tambahkan header lagi dan ketik "Authorization" dan "Bearer<KUNCI API layanan Anda>". Anda dapat menemukan API-KEY di dasbor layanan web AzureML (lihat Uji layanan web di Lampiran A).
Untuk Isi permintaan, ketik
{"Inputs": {"input1": {"ColumnNames": ["Col2"], "Values": [["This is a good day"]]}}, "GlobalParameters": {}}.
Klik Kirim.

Setelah operasi dipanggil, portal pengembang menampilkan URL yang diminta dari layanan back-end, Status respons, Header respons, dan Konten respons apa pun.

Lampiran A - Membuat dan menguji layanan web AzureML sederhana
Membuat eksperimen
Di bawah ini adalah langkah-langkah untuk membuat eksperimen AzureML sederhana dan menyebarkannya sebagai layanan web. Layanan web mengambil sebagai input kolom teks sewenang-wenang dan mengembalikan sekumpulan fitur yang dinyatakan sebagai bilangan bulat. Contohnya:
| Teks | Teks Hashed |
|---|---|
| Ini adalah hari baik | 1 1 2 2 0 2 0 1 |
Pertama, dengan menggunakan browser pilihan Anda, navigasi ke: https://studio.azureml.net/ dan masukkan kredensial Anda untuk masuk. Selanjutnya, buat eksperimen kosong baru.

Ganti namanya menjadi SimpleFeatureHashingExperiment. Perluas Himpunan Data Tersimpan dan seret Ulasan Buku dari Amazon ke eksperimen Anda.

Perluas Transformasi Data dan Manipulasi Data dan seret Pilih Kolom di Himpunan Data ke eksperimen Anda. Hubungkan Ulasan Buku dari Amazon ke Pilih Kolom di Himpunan Data.

Klik Pilih Kolom di Himpunan Data lalu klik Luncurkan pemilih kolom dan pilih Col2. Klik tanda centang untuk menerapkan perubahan ini.

Perluas Analitik Teks dan seret Hashing Fitur ke eksperimen. Sambungkan Pilih Kolom di Himpunan Data ke Hashing Fitur.

Ketik 3 untuk bitsize Hashing. Ini akan membuat 8 (23) kolom.

Pada titik ini, Anda mungkin ingin mengklik Jalankan untuk menguji eksperimen.

Buat layanan web
Sekarang buat layanan web Perluas Layanan Web dan seret Input ke eksperimen Anda. Sambungkan Input ke Hashing Fitur. Seret juga output ke eksperimen Anda. Sambungkan Output ke Hashing Fitur.

Klik Menerbitkan layanan web.

Klik Ya untuk menerbitkan eksperimen.

Menguji aplikasi web
Layanan web AzureML terdiri dari titik akhir RSS (layanan permintaan/respons) dan BES (layanan eksekusi batch). RSS adalah untuk eksekusi sinkron. BES adalah untuk eksekusi pekerjaan asinkron. Untuk menguji layanan web Anda dengan contoh sumber Python di bawah ini, Anda mungkin perlu mengunduh dan menginstal Azure SDK untuk Python (lihat: Cara menginstal Python).
Anda juga akan membutuhkan ruang kerja, layanan, dan api_key eksperimen Anda untuk sumber sampel di bawah ini. Anda dapat menemukan ruang kerja dan layanan dengan mengklik Permintaan/ Respons atau Eksekusi Batch untuk eksperimen Anda di dasbor layanan web.

Anda dapat menemukan api_key dengan mengklik eksperimen Anda di dasbor layanan web.

Uji titik akhir RRS
Tombol uji
Cara mudah untuk menguji titik akhir RRS adalah dengan mengklik Uji di dasbor layanan web.

Ketik Ini adalah hari yang baik untuk col2. Tekan tanda centang.

Anda akan melihat sesuatu seperti

Kode Sampel
Cara lain untuk menguji RRS Anda adalah dari kode klien Anda. Jika Anda mengklik Permintaan/respons di dasbor dan menggulir ke bawah, Anda akan melihat contoh kode untuk C#, Python, dan R. Anda juga akan melihat sintaks permintaan RRS, termasuk URI permintaan, header, dan isi.
Panduan ini menunjukkan contoh Python yang berfungsi. Anda harus memodifikasinya dengan ruang kerja, layanan, dan api_key eksperimen Anda.
import urllib2
import json
workspace = "<REPLACE WITH YOUR EXPERIMENT'S WEB SERVICE WORKSPACE ID>"
service = "<REPLACE WITH YOUR EXPERIMENT'S WEB SERVICE SERVICE ID>"
api_key = "<REPLACE WITH YOUR EXPERIMENT'S WEB SERVICE API KEY>"
data = {
"Inputs": {
"input1": {
"ColumnNames": ["Col2"],
"Values": [ [ "This is a good day" ] ]
},
},
"GlobalParameters": { }
}
url = "https://ussouthcentral.services.azureml.net/workspaces/" + workspace + "/services/" + service + "/execute?api-version=2.0&details=true"
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
body = str.encode(json.dumps(data))
try:
req = urllib2.Request(url, body, headers)
response = urllib2.urlopen(req)
result = response.read()
print "result:" + result
except urllib2.HTTPError, error:
print("The request failed with status code: " + str(error.code))
print(error.info())
print(json.loads(error.read()))
Uji titik akhir BES
Klik Eksekusi batch di dasbor dan gulir ke bawah. Anda akan melihat contoh kode untuk C#, Python, dan R. Anda juga akan melihat sintaks permintaan BES untuk mengirimkan pekerjaan, memulai pekerjaan, mendapatkan status atau hasil pekerjaan, dan menghapus pekerjaan.
Panduan ini menunjukkan contoh Python yang berfungsi. Anda perlu memodifikasinya dengan ruang kerja, layanan, dan api_key eksperimen Anda. Selain itu, Anda perlu mengubah nama akun penyimpanan, kunci akun penyimpanan, dan nama kontainer penyimpanan. Terakhir, Anda harus memodifikasi lokasi file input dan lokasi file output.
import urllib2
import json
import time
from azure.storage import *
workspace = "<REPLACE WITH YOUR WORKSPACE ID>"
service = "<REPLACE WITH YOUR SERVICE ID>"
api_key = "<REPLACE WITH THE API KEY FOR YOUR WEB SERVICE>"
storage_account_name = "<REPLACE WITH YOUR AZURE STORAGE ACCOUNT NAME>"
storage_account_key = "<REPLACE WITH YOUR AZURE STORAGE KEY>"
storage_container_name = "<REPLACE WITH YOUR AZURE STORAGE CONTAINER NAME>"
input_file = "<REPLACE WITH THE LOCATION OF YOUR INPUT FILE>" # Example: C:\\mydata.csv
output_file = "<REPLACE WITH THE LOCATION OF YOUR OUTPUT FILE>" # Example: C:\\myresults.csv
input_blob_name = "mydatablob.csv"
output_blob_name = "myresultsblob.csv"
def printHttpError(httpError):
print("The request failed with status code: " + str(httpError.code))
print(httpError.info())
print(json.loads(httpError.read()))
return
def saveBlobToFile(blobUrl, resultsLabel):
print("Reading the result from " + blobUrl)
try:
response = urllib2.urlopen(blobUrl)
except urllib2.HTTPError, error:
printHttpError(error)
return
with open(output_file, "wb+") as f:
f.write(response.read())
print(resultsLabel + " have been written to the file " + output_file)
return
def processResults(result):
first = True
results = result["Results"]
for outputName in results:
result_blob_location = results[outputName]
sas_token = result_blob_location["SasBlobToken"]
base_url = result_blob_location["BaseLocation"]
relative_url = result_blob_location["RelativeLocation"]
print("The results for " + outputName + " are available at the following Azure Storage location:")
print("BaseLocation: " + base_url)
print("RelativeLocation: " + relative_url)
print("SasBlobToken: " + sas_token)
if (first):
first = False
url3 = base_url + relative_url + sas_token
saveBlobToFile(url3, "The results for " + outputName)
return
def invokeBatchExecutionService():
url = "https://ussouthcentral.services.azureml.net/workspaces/" + workspace +"/services/" + service +"/jobs"
blob_service = BlobService(account_name=storage_account_name, account_key=storage_account_key)
print("Uploading the input to blob storage...")
data_to_upload = open(input_file, "r").read()
blob_service.put_blob(storage_container_name, input_blob_name, data_to_upload, x_ms_blob_type="BlockBlob")
print "Uploaded the input to blob storage"
input_blob_path = "/" + storage_container_name + "/" + input_blob_name
connection_string = "DefaultEndpointsProtocol=https;AccountName=" + storage_account_name + ";AccountKey=" + storage_account_key
payload = {
"Input": {
"ConnectionString": connection_string,
"RelativeLocation": input_blob_path
},
"Outputs": {
"output1": { "ConnectionString": connection_string, "RelativeLocation": "/" + storage_container_name + "/" + output_blob_name },
},
"GlobalParameters": {
}
}
body = str.encode(json.dumps(payload))
headers = { "Content-Type":"application/json", "Authorization":("Bearer " + api_key)}
print("Submitting the job...")
# submit the job
req = urllib2.Request(url + "?api-version=2.0", body, headers)
try:
response = urllib2.urlopen(req)
except urllib2.HTTPError, error:
printHttpError(error)
return
result = response.read()
job_id = result[1:-1] # remove the enclosing double-quotes
print("Job ID: " + job_id)
# start the job
print("Starting the job...")
req = urllib2.Request(url + "/" + job_id + "/start?api-version=2.0", "", headers)
try:
response = urllib2.urlopen(req)
except urllib2.HTTPError, error:
printHttpError(error)
return
url2 = url + "/" + job_id + "?api-version=2.0"
while True:
print("Checking the job status...")
# If you are using Python 3+, replace urllib2 with urllib.request in the following code
req = urllib2.Request(url2, headers = { "Authorization":("Bearer " + api_key) })
try:
response = urllib2.urlopen(req)
except urllib2.HTTPError, error:
printHttpError(error)
return
result = json.loads(response.read())
status = result["StatusCode"]
print "status:" + status
if (status == 0 or status == "NotStarted"):
print("Job " + job_id + " not yet started...")
elif (status == 1 or status == "Running"):
print("Job " + job_id + " running...")
elif (status == 2 or status == "Failed"):
print("Job " + job_id + " failed!")
print("Error details: " + result["Details"])
break
elif (status == 3 or status == "Cancelled"):
print("Job " + job_id + " cancelled!")
break
elif (status == 4 or status == "Finished"):
print("Job " + job_id + " finished!")
processResults(result)
break
time.sleep(1) # wait one second
return
invokeBatchExecutionService()