Pelajari cara mengakses sumber daya Azure dari skrip penilaian Anda dengan titik akhir online dan identitas terkelola yang ditetapkan sistem atau identitas terkelola yang ditetapkan pengguna.
Titik akhir terkelola dan titik akhir Kubernetes memungkinkan Azure Pembelajaran Mesin mengelola beban provisi sumber daya komputasi dan menyebarkan model pembelajaran mesin Anda. Biasanya model Anda perlu mengakses sumber daya Azure seperti Azure Container Registry atau penyimpanan blob Anda untuk inferensi; dengan identitas terkelola, Anda dapat mengakses sumber daya ini tanpa perlu mengelola kredensial dalam kode Anda. Pelajari selengkapnya tentang identitas terkelola.
Panduan ini mengasumsikan Anda tidak memiliki identitas terkelola, akun penyimpanan, atau titik akhir online. Jika Anda sudah memiliki komponen ini, lewati ke bagian Berikan izin akses ke identitas terkelola.
Untuk menggunakan Azure Machine Learning, Anda harus memiliki langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang.
Grup sumber daya Azure, tempat Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses Administrator Akses Pengguna dan Kontributor . Anda memiliki grup sumber daya seperti itu jika Anda mengonfigurasi ekstensi ML per artikel sebelumnya.
Ruang kerja Azure Machine Learning. Anda sudah memiliki ruang kerja jika Mengonfigurasi ekstensi ML sesuai artikel sebelumnya.
Model pembelajaran mesin terlatih siap untuk pemberian skor dan penyebaran. Jika Anda mengikuti sampel, model disediakan.
Jika belum mengatur default untuk Azure CLI, simpan pengaturan default Anda. Untuk menghindari melewati nilai untuk langganan, ruang kerja, dan grup sumber daya Anda beberapa kali, jalankan kode ini:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Untuk mengikuti sampel, kloning repositori sampel lalu ubah direktori menjadi cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Untuk menggunakan Azure Machine Learning, Anda harus memiliki langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang.
Grup Sumber Daya Azure, tempat Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses Administrator Akses Pengguna dan Kontributor . Anda memiliki grup sumber daya seperti itu jika Anda mengonfigurasi ekstensi ML per artikel sebelumnya.
Ruang kerja Azure Machine Learning. Anda memiliki ruang kerja jika Mengonfigurasi ekstensi ML per artikel di atas.
Model pembelajaran mesin terlatih siap untuk pemberian skor dan penyebaran. Jika Anda mengikuti sampel, model disediakan.
Jika belum mengatur default untuk Azure CLI, simpan pengaturan default Anda. Untuk menghindari melewati nilai untuk langganan, ruang kerja, dan grup sumber daya Anda beberapa kali, jalankan kode ini:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Untuk mengikuti sampel, kloning repositori sampel lalu ubah direktori menjadi cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Untuk menggunakan Azure Machine Learning, Anda harus memiliki langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang.
Instal dan konfigurasikan Azure Pembelajaran Mesin Python SDK (v2). Untuk informasi selengkapnya, lihat Menginstal dan menyiapkan SDK (v2).
Grup Sumber Daya Azure, tempat Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses Administrator Akses Pengguna dan Kontributor . Anda memiliki grup sumber daya seperti itu jika Anda mengonfigurasi ekstensi ML per artikel sebelumnya.
Ruang kerja Azure Machine Learning. Anda sudah memiliki ruang kerja jika Mengonfigurasi ekstensi ML sesuai artikel sebelumnya.
Model pembelajaran mesin terlatih siap untuk pemberian skor dan penyebaran. Jika Anda mengikuti sampel, model disediakan.
Kloning repositori sampel, lalu ubah direktori.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Untuk menggunakan Azure Machine Learning, Anda harus memiliki langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang.
Izin pembuatan peran untuk langganan Anda atau sumber daya Azure yang diakses oleh identitas yang ditetapkan pengguna.
Instal dan konfigurasikan Azure Pembelajaran Mesin Python SDK (v2). Untuk informasi selengkapnya, lihat Menginstal dan menyiapkan SDK (v2).
Grup Sumber Daya Azure, tempat Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses Administrator Akses Pengguna dan Kontributor . Anda memiliki grup sumber daya seperti itu jika Anda mengonfigurasi ekstensi ML per artikel sebelumnya.
Ruang kerja Azure Machine Learning. Anda sudah memiliki ruang kerja jika Mengonfigurasi ekstensi ML sesuai artikel sebelumnya.
Model pembelajaran mesin terlatih siap untuk pemberian skor dan penyebaran. Jika Anda mengikuti sampel, model disediakan.
Kloning repositori sampel.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Identitas untuk titik akhir tidak dapat diubah. Selama pembuatan titik akhir, Anda dapat mengaitkannya dengan identitas yang ditetapkan sistem (default) atau identitas yang ditetapkan pengguna. Anda tidak dapat mengubah identitas setelah titik akhir dibuat.
Jika penyimpanan ARC dan blob Anda dikonfigurasi sebagai privat, yaitu, di belakang jaringan virtual, maka akses dari titik akhir Kubernetes harus melalui tautan privat terlepas dari apakah ruang kerja Anda bersifat publik atau privat. Detail selengkapnya tentang pengaturan tautan privat, lihat Cara mengamankan vnet ruang kerja.
Konfigurasikan variabel untuk penyebaran
Konfigurasikan nama variabel untuk ruang kerja, lokasi ruang kerja, dan titik akhir yang ingin Anda buat untuk digunakan dengan penyebaran.
Selanjutnya, tentukan nama apa yang ingin diberikan untuk akun penyimpanan blob, kontainer blob, dan file Anda. Nama variabel ini ditentukan di sini, dan dirujukkan dalam perintah az storage account create dan az storage container create di bagian berikutnya.
Kode berikut mengekspor nilai-nilai tersebut sebagai variabel lingkungan:
Setelah variabel ini diekspor, buat file teks secara lokal. Saat titik akhir disebarkan, skrip penilaian mengakses file teks ini menggunakan identitas terkelola yang ditetapkan sistem yang dihasilkan setelah pembuatan titik akhir.
Tentukan nama titik akhir, ruang kerja, dan lokasi ruang kerja Anda, lalu ekspor nilai tersebut sebagai variabel lingkungan:
Selanjutnya, tentukan nama apa yang ingin diberikan untuk akun penyimpanan blob, kontainer blob, dan file Anda. Nama variabel ini ditentukan di sini, dan dirujukkan dalam perintah az storage account create dan az storage container create di bagian berikutnya.
Setelah variabel ini diekspor, buat file teks secara lokal. Saat titik akhir disebarkan, skrip penilaian mengakses file teks ini menggunakan identitas terkelola yang ditetapkan pengguna yang digunakan di titik akhir.
Tentukan nama dari nama identitas pengguna Anda, dan ekspor nilai tersebut sebagai variabel lingkungan:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Tetapkan nilai untuk ruang kerja dan variabel terkait penyebaran:
Selanjutnya, tentukan nama apa yang ingin diberikan untuk akun penyimpanan blob, kontainer blob, dan file Anda. Nama variabel ini didefinisikan di sini, dan disebut dalam akun penyimpanan dan kode pembuatan kontainer oleh StorageManagementClient dan ContainerClient.
Setelah variabel ini ditetapkan, buat file teks secara lokal. Saat titik akhir disebarkan, skrip penilaian mengakses file teks ini menggunakan identitas terkelola yang ditetapkan sistem yang dihasilkan setelah pembuatan titik akhir.
Sekarang, dapatkan handel ke ruang kerja dan ambil lokasinya:
from azure.ai.ml import MLClient
from azure.identity import AzureCliCredential
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
ManagedOnlineEndpoint,
Model,
CodeConfiguration,
Environment,
)
credential = AzureCliCredential()
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)
workspace_location = ml_client.workspaces.get(workspace_name).location
Gunakan nilai ini untuk membuat akun penyimpanan.
Tetapkan nilai untuk ruang kerja dan variabel terkait penyebaran:
Selanjutnya, tentukan nama apa yang ingin diberikan untuk akun penyimpanan blob, kontainer blob, dan file Anda. Nama variabel ini didefinisikan di sini, dan disebut dalam akun penyimpanan dan kode pembuatan kontainer oleh StorageManagementClient dan ContainerClient.
Setelah variabel ini ditetapkan, buat file teks secara lokal. Saat titik akhir disebarkan, skrip penilaian mengakses file teks ini menggunakan identitas terkelola yang ditetapkan pengguna yang dihasilkan setelah pembuatan titik akhir.
Tentukan nama nama identitas pengguna Anda:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Sekarang, dapatkan handel ke ruang kerja dan ambil lokasinya:
from azure.ai.ml import MLClient
from azure.identity import AzureCliCredential
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
ManagedOnlineEndpoint,
Model,
CodeConfiguration,
Environment,
)
credential = AzureCliCredential()
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)
workspace_location = ml_client.workspaces.get(workspace_name).location
Untuk menyebarkan titik akhir online dengan CLI, Anda perlu menentukan konfigurasi dalam file YAML. Untuk informasi selengkapnya tentang skema YAML, lihat dokumen referensi YAML titik akhir online.
File YAML dalam contoh berikut digunakan untuk membuat titik akhir online.
Contoh YAML berikut terletak di titik akhir/online/terkelola/identitas terkelola/1-sai-create-endpoint. File,
Tentukan nama yang ingin Anda referensikan ke titik akhir, my-sai-endpoint.
Tentukan jenis otorisasi yang akan digunakan untuk mengakses titik akhir, auth-mode: key.
Untuk menyebarkan titik akhir online dengan CLI, Anda perlu menentukan konfigurasi dalam file YAML. Untuk informasi selengkapnya tentang skema YAML, lihat dokumen referensi YAML titik akhir online.
File YAML dalam contoh berikut digunakan untuk membuat titik akhir online.
Contoh YAML berikut terletak di titik akhir/online/terkelola/identitas terkelola/1-uai-create-endpoint. File,
Tentukan nama yang ingin Anda referensikan ke titik akhir, my-uai-endpoint.
Tentukan jenis otorisasi yang akan digunakan untuk mengakses titik akhir, auth-mode: key.
Menunjukkan jenis identitas yang akan digunakan, type: user_assigned
Untuk menyebarkan titik akhir online dengan Python SDK (v2), objek dapat digunakan untuk menentukan konfigurasi berikut. Atau, file YAML dapat dimuat menggunakan .load metode .
Objek titik akhir Python berikut:
Menetapkan nama yang ingin Anda rujuk ke titik akhir ke variabel endpoint_name.
Menentukan jenis otorisasi yang akan digunakan untuk mengakses titik auth-mode="key"akhir .
Untuk menyebarkan titik akhir online dengan Python SDK (v2), objek dapat digunakan untuk menentukan konfigurasi berikut. Atau, file YAML dapat dimuat menggunakan .load metode .
Untuk identitas yang ditetapkan pengguna, Anda menentukan konfigurasi titik akhir setelah identitas terkelola yang ditetapkan pengguna dibuat.
Objek penyebaran ini:
Menentukan bahwa jenis penyebaran yang ingin Anda buat adalah ManagedOnlineDeployment melalui kelas .
Menunjukkan bahwa titik akhir memiliki penyebaran terkait yang disebut blue.
Mengonfigurasi detail penyebaran seperti name dan instance_count
Menentukan lebih banyak objek sebaris dan mengaitkannya dengan penyebaran untuk Model,CodeConfiguration , dan Environment.
Termasuk variabel lingkungan yang diperlukan untuk identitas terkelola yang ditetapkan pengguna untuk mengakses penyimpanan.
Menambahkan variabel lingkungan tempat penampung untuk UAI_CLIENT_ID, yang ditambahkan setelah membuatnya dan sebelum benar-benar menyebarkan konfigurasi ini.
deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=Model(path="../../model-1/model/"),
code_configuration=CodeConfiguration(
code="../../model-1/onlinescoring/", scoring_script="score_managedidentity.py"
),
environment=Environment(
conda_file="../../model-1/environment/conda-managedidentity.yml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
),
instance_type="Standard_DS3_v2",
instance_count=1,
environment_variables={
"STORAGE_ACCOUNT_NAME": storage_account_name,
"STORAGE_CONTAINER_NAME": storage_container_name,
"FILE_NAME": file_name,
# We will update this after creating an identity
"UAI_CLIENT_ID": "uai_client_id_place_holder",
},
)
Buat identitas terkelola
Untuk mengakses sumber daya Azure, buat identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna untuk titik akhir online Anda.
Saat membuat titik akhir online, identitas terkelola yang ditetapkan sistem akan dibuat secara otomatis untuk Anda, jadi tidak perlu membuat yang terpisah.
Untuk membuat identitas terkelola yang ditetapkan pengguna, gunakan perintah berikut:
az identity create --name $UAI_NAME
Saat membuat titik akhir online, identitas terkelola yang ditetapkan sistem akan dibuat secara otomatis untuk Anda, jadi tidak perlu membuat yang terpisah.
Untuk membuat identitas terkelola yang ditetapkan pengguna, pertama-tama dapatkan handel ke ManagedServiceIdentityClient:
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
credential = AzureCliCredential()
msi_client = ManagedServiceIdentityClient(
subscription_id=subscription_id,
credential=credential,
)
Untuk contoh ini, buat akun penyimpanan blob dan kontainer blob, lalu unggah file teks yang dibuat sebelumnya ke kontainer blob. Anda memberikan titik akhir online dan akses identitas terkelola ke akun penyimpanan dan kontainer blob ini.
Kemudian, unggah blob ke kontainer dengan ContainerClient:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Membuat titik akhir online
Kode berikut membuat titik akhir online tanpa menentukan penyebaran.
Peringatan
Identitas untuk titik akhir tidak dapat diubah. Selama pembuatan titik akhir, Anda dapat mengaitkannya dengan identitas yang ditetapkan sistem (default) atau identitas yang ditetapkan pengguna. Anda tidak dapat mengubah identitas setelah titik akhir dibuat.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-uai-create-endpoint.yml --set identity.user_assigned_identities[0].resource_id=$uai_id
Periksa status titik akhir dengan yang berikut ini.
Titik akhir online memerlukan izin penarikan Azure Container Registry, izin AcrPull, ke registri kontainer, dan izin Pembaca Data Blob Penyimpanan ke datastore default ruang kerja.
Anda dapat mengizinkan izin titik akhir agar mengakses penyimpanan melalui identitas terkelola yang ditetapkan sistemnya atau memberikan izin kepada identitas terkelola yang ditetapkan pengguna untuk mengakses akun penyimpanan yang telah dibuat di bagian sebelumnya.
Ambil identitas terkelola yang ditetapkan sistem yang dibuat untuk titik akhir Anda.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Dari sini, Anda dapat memberikan izin identitas terkelola yang ditetapkan sistem untuk mengakses penyimpanan Anda.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Ambil ID klien identitas terkelola yang ditetapkan pengguna.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Ambil ID identitas terkelola yang ditetapkan pengguna.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Dapatkan registri kontainer yang terkait dengan ruang kerja.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Ambil penyimpanan default ruang kerja.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Berikan izin akun penyimpanan ke identitas terkelola yang ditetapkan pengguna.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Berikan izin registri kontainer kepada identitas terkelola yang ditetapkan pengguna.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Berikan izin penyimpanan ruang kerja default ke identitas terkelola yang ditetapkan pengguna.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Pertama, buat untuk mencantumkan AuthorizationManagementClient definisi peran:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.v2018_01_01_preview.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Sekarang, inisialisasi satu untuk membuat penetapan peran:
Selanjutnya, tetapkan peran Pembaca Data Blob Penyimpanan ke titik akhir. Definisi peran diambil berdasarkan nama dan diteruskan bersama dengan ID Utama titik akhir. Peran diterapkan pada cakupan akun penyimpanan yang dibuat di atas dan memungkinkan titik akhir untuk membaca file.
role_name = "Storage Blob Data Reader"
scope = storage_account.id
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id, principal_id=system_principal_id
),
)
Pertama, buat untuk mencantumkan AuthorizationManagementClient definisi peran:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.v2018_01_01_preview.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Sekarang, inisialisasi satu untuk membuat penetapan peran:
Kemudian, dapatkan ID utama dan ID klien dari identitas terkelola yang ditetapkan pengguna. Untuk menetapkan peran, Anda hanya memerlukan ID utama. Namun, Anda menggunakan ID klien untuk mengisi UAI_CLIENT_ID variabel lingkungan tempat penampung sebelum membuat penyebaran.
Selanjutnya, tetapkan peran Pembaca Data Blob Penyimpanan ke titik akhir. Definisi peran diambil berdasarkan nama dan diteruskan bersama dengan ID utama titik akhir. Peran diterapkan pada cakupan akun penyimpanan yang dibuat di atas untuk memungkinkan titik akhir membaca file.
role_name = "Storage Blob Data Reader"
scope = storage_account.id
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Untuk dua izin berikutnya, Anda memerlukan objek registri ruang kerja dan kontainer:
Selanjutnya, tetapkan peran AcrPull ke identitas yang ditetapkan pengguna. Peran ini memungkinkan gambar ditarik dari Azure Container Registry. Cakupan diterapkan pada tingkat registri kontainer yang terkait dengan ruang kerja.
role_name = "AcrPull"
scope = container_registry
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Terakhir, tetapkan peran Pembaca Data Blob Penyimpanan ke titik akhir di cakupan akun penyimpanan ruang kerja. Penetapan peran ini memungkinkan titik akhir untuk membaca blob di akun penyimpanan ruang kerja serta akun penyimpanan yang baru dibuat.
Peran ini memiliki nama dan kemampuan yang sama dengan peran pertama yang ditetapkan di atas, namun diterapkan pada cakupan yang berbeda dan memiliki ID yang berbeda.
role_name = "Storage Blob Data Reader"
scope = workspace.storage_account
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Skrip pemberian skor untuk mengakses sumber daya Azure
Lihat skrip berikut untuk memahami cara menggunakan token identitas Anda untuk mengakses sumber daya Azure, dalam skenario ini, akun penyimpanan yang dibuat di bagian sebelumnya.
import os
import logging
import json
import numpy
import joblib
import requests
from azure.identity import ManagedIdentityCredential
from azure.storage.blob import BlobClient
def access_blob_storage_sdk():
credential = ManagedIdentityCredential(client_id=os.getenv("UAI_CLIENT_ID"))
storage_account = os.getenv("STORAGE_ACCOUNT_NAME")
storage_container = os.getenv("STORAGE_CONTAINER_NAME")
file_name = os.getenv("FILE_NAME")
blob_client = BlobClient(
account_url=f"https://{storage_account}.blob.core.windows.net/",
container_name=storage_container,
blob_name=file_name,
credential=credential,
)
blob_contents = blob_client.download_blob().content_as_text()
logging.info(f"Blob contains: {blob_contents}")
def get_token_rest():
"""
Retrieve an access token via REST.
"""
access_token = None
msi_endpoint = os.environ.get("MSI_ENDPOINT", None)
msi_secret = os.environ.get("MSI_SECRET", None)
# If UAI_CLIENT_ID is provided then assume that endpoint was created with user assigned identity,
# # otherwise system assigned identity deployment.
client_id = os.environ.get("UAI_CLIENT_ID", None)
if client_id is not None:
token_url = (
msi_endpoint + f"?clientid={client_id}&resource=https://storage.azure.com/"
)
else:
token_url = msi_endpoint + f"?resource=https://storage.azure.com/"
logging.info("Trying to get identity token...")
headers = {"secret": msi_secret, "Metadata": "true"}
resp = requests.get(token_url, headers=headers)
resp.raise_for_status()
access_token = resp.json()["access_token"]
logging.info("Retrieved token successfully.")
return access_token
def access_blob_storage_rest():
"""
Access a blob via REST.
"""
logging.info("Trying to access blob storage...")
storage_account = os.environ.get("STORAGE_ACCOUNT_NAME")
storage_container = os.environ.get("STORAGE_CONTAINER_NAME")
file_name = os.environ.get("FILE_NAME")
logging.info(
f"storage_account: {storage_account}, container: {storage_container}, filename: {file_name}"
)
token = get_token_rest()
blob_url = f"https://{storage_account}.blob.core.windows.net/{storage_container}/{file_name}?api-version=2019-04-01"
auth_headers = {
"Authorization": f"Bearer {token}",
"x-ms-blob-type": "BlockBlob",
"x-ms-version": "2019-02-02",
}
resp = requests.get(blob_url, headers=auth_headers)
resp.raise_for_status()
logging.info(f"Blob contains: {resp.text}")
def init():
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# For multiple models, it points to the folder containing all deployed models (./azureml-models)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Model loaded")
# Access Azure resource (Blob storage) using system assigned identity token
access_blob_storage_rest()
access_blob_storage_sdk()
logging.info("Init complete")
# note you can pass in multiple rows for scoring
def run(raw_data):
logging.info("Request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
Penyebaran ini dapat memerlukan waktu sekitar 8-14 menit, bergantung pada apakah lingkungan/gambar yang mendasarinya sedang dibangun untuk pertama kalinya. Penyebaran berikutnya yang menggunakan lingkungan yang sama akan lebih cepat.
az ml online-deployment create --endpoint-name $ENDPOINT_NAME --all-traffic --name blue --file endpoints/online/managed/managed-identities/2-sai-deployment.yml --set environment_variables.STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME environment_variables.STORAGE_CONTAINER_NAME=$STORAGE_CONTAINER_NAME environment_variables.FILE_NAME=$FILE_NAME
Catatan
Nilai argumen --name dapat mengambil alih kunci name di dalam file YAML.
Periksa status penyebaran.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Metode init dalam skrip penilaian membaca file dari akun penyimpanan Anda menggunakan token identitas terkelola yang ditetapkan sistem.
Untuk memeriksa output metode init, lihat log penyebaran dengan kode berikut.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-uai-create-endpoint.yml --set identity.user_assigned_identities[0].resource_id=$uai_id
Catatan
Nilai argumen --name dapat mengambil alih kunci name di dalam file YAML.
Setelah perintah dijalankan, Anda dapat memeriksa status penyebaran.
Saat penyebaran Anda selesai, model, lingkungan, dan titik akhir akan didaftarkan ke ruang kerja Azure Machine Learning Anda.
Menguji titik akhir
Setelah titik akhir online Anda disebarkan, uji dan konfirmasi operasinya dengan permintaan. Detail inferensi bervariasi pada setiap model. Untuk panduan ini, parameter kueri JSON terlihat seperti:
Jika Anda tidak berencana untuk terus menggunakan titik akhir dan penyimpanan yang disebarkan, hapus untuk mengurangi biaya. Jika Anda menghapus titik akhir, maka semua penyebaran terkait juga akan dihapus.