Çevrimiçi uç nokta ve sistem tarafından atanan yönetilen kimlik veya kullanıcı tarafından atanan yönetilen kimlik ile puanlama betiğinizden Azure kaynaklarına erişmeyi öğrenin.
Hem yönetilen uç noktalar hem de Kubernetes uç noktaları, Azure Machine Learning'in işlem kaynağınızı sağlama ve makine öğrenmesi modelinizi dağıtma yükünü yönetmesine olanak sağlar. Genellikle modelinizin çıkarım için Azure Container Registry veya blob depolama alanınız gibi Azure kaynaklarına erişmesi gerekir; yönetilen kimlikle, kodunuzda kimlik bilgilerini yönetmenize gerek kalmadan bu kaynaklara erişebilirsiniz. Yönetilen kimlikler hakkında daha fazla bilgi edinin.
Bu kılavuzda yönetilen kimliğiniz, depolama hesabınız veya çevrimiçi uç noktanız olmadığı varsayılır. Bu bileşenlere zaten sahipseniz Yönetilen kimliğe erişim izni ver bölümüne atlayın.
Azure Machine Learning'i kullanmak için bir Azure aboneliğiniz olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin.
Azure CLI ve ML (v2) uzantısını yükleyin ve yapılandırın. Daha fazla bilgi için bkz . 2.0 CLI'yı yükleme, ayarlama ve kullanma.
Sizin (veya kullandığınız hizmet sorumlusunun) Kullanıcı Erişimi Yöneticisi ve Katkıda Bulunan erişimine sahip olması gereken bir Azure kaynak grubu. Ml uzantınızı önceki makaleye göre yapılandırdıysanız böyle bir kaynak grubunuz vardır.
Azure Machine Learning çalışma alanı. Ml uzantınızı önceki makaleye göre yapılandırdıysanız zaten bir çalışma alanınız vardır.
Puanlama ve dağıtım için hazır eğitilmiş bir makine öğrenmesi modeli. Örneği takip ediyorsanız bir model sağlanır.
Azure CLI için varsayılan ayarları henüz ayarlamadıysanız varsayılan ayarlarınızı kaydedin. Aboneliğinizin, çalışma alanınızın ve kaynak grubunuzun değerlerinin birden çok kez geçirilmesini önlemek için şu kodu çalıştırın:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Örneği takip etmek için örnek deposunu kopyalayın ve dizini cli olarak değiştirin.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Azure Machine Learning'i kullanmak için bir Azure aboneliğiniz olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin.
Azure CLI ve ML (v2) uzantısını yükleyin ve yapılandırın. Daha fazla bilgi için bkz . 2.0 CLI'yı yükleme, ayarlama ve kullanma.
Sizin (veya kullandığınız hizmet sorumlusunun) Kullanıcı Erişimi Yöneticisi ve Katkıda Bulunan erişimine sahip olması gereken bir Azure Kaynak grubu. Ml uzantınızı önceki makaleye göre yapılandırdıysanız böyle bir kaynak grubunuz vardır.
Azure Machine Learning çalışma alanı. Ml uzantınızı yukarıdaki makaleye göre yapılandırdıysanız bir çalışma alanınız vardır.
Puanlama ve dağıtım için hazır eğitilmiş bir makine öğrenmesi modeli. Örneği takip ediyorsanız bir model sağlanır.
Azure CLI için varsayılan ayarları henüz ayarlamadıysanız varsayılan ayarlarınızı kaydedin. Aboneliğinizin, çalışma alanınızın ve kaynak grubunuzun değerlerinin birden çok kez geçirilmesini önlemek için şu kodu çalıştırın:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Örneği takip etmek için örnek deposunu kopyalayın ve dizini cli olarak değiştirin.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Azure Machine Learning'i kullanmak için bir Azure aboneliğiniz olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin.
Azure Machine Learning Python SDK'sını (v2) yükleyin ve yapılandırın. Daha fazla bilgi için bkz . SDK'yı (v2) yükleme ve ayarlama.
Sizin (veya kullandığınız hizmet sorumlusunun) Kullanıcı Erişimi Yöneticisi ve Katkıda Bulunan erişimine sahip olması gereken bir Azure Kaynak grubu. Ml uzantınızı önceki makaleye göre yapılandırdıysanız böyle bir kaynak grubunuz vardır.
Azure Machine Learning çalışma alanı. Ml uzantınızı önceki makaleye göre yapılandırdıysanız zaten bir çalışma alanınız vardır.
Puanlama ve dağıtım için hazır eğitilmiş bir makine öğrenmesi modeli. Örneği takip ediyorsanız bir model sağlanır.
Örnek deposunu kopyalayın ve dizini değiştirin.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Bu not defteriyle birlikte izlemek için sdk/endpoints/online/managed/managed-identities dizinindeki eşlikçi örnek not defterine erişin.
Azure Machine Learning'i kullanmak için bir Azure aboneliğiniz olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin.
Aboneliğiniz veya kullanıcı tarafından atanan kimlik tarafından erişilen Azure kaynakları için rol oluşturma izinleri.
Azure Machine Learning Python SDK'sını (v2) yükleyin ve yapılandırın. Daha fazla bilgi için bkz . SDK'yı (v2) yükleme ve ayarlama.
Sizin (veya kullandığınız hizmet sorumlusunun) Kullanıcı Erişimi Yöneticisi ve Katkıda Bulunan erişimine sahip olması gereken bir Azure Kaynak grubu. Ml uzantınızı önceki makaleye göre yapılandırdıysanız böyle bir kaynak grubunuz vardır.
Azure Machine Learning çalışma alanı. Ml uzantınızı önceki makaleye göre yapılandırdıysanız zaten bir çalışma alanınız vardır.
Puanlama ve dağıtım için hazır eğitilmiş bir makine öğrenmesi modeli. Örneği takip ediyorsanız bir model sağlanır.
Örnek deposunu kopyalayın.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Bu not defteriyle birlikte izlemek için sdk/endpoints/online/managed/managed-identities dizinindeki eşlikçi örnek not defterine erişin.
Uç noktanın kimliği sabittir. Uç nokta oluşturma sırasında, bunu sistem tarafından atanan bir kimlik (varsayılan) veya kullanıcı tarafından atanan bir kimlikle ilişkilendirebilirsiniz. Uç nokta oluşturulduktan sonra kimliği değiştiremezsiniz.
ARC ve blob depolama alanınız özel olarak yapılandırıldıysa, yani bir sanal ağın arkasındaysa, çalışma alanınızın genel veya özel olmasına bakılmaksızın Kubernetes uç noktasından erişim özel bağlantı üzerinden olmalıdır. Özel bağlantı ayarı hakkında daha fazla ayrıntı için bkz. Çalışma alanı sanal alığının güvenliğini sağlama.
Değişkenleri dağıtım için yapılandırma
Çalışma alanı, çalışma alanı konumu ve dağıtımınızla kullanmak üzere oluşturmak istediğiniz uç nokta için değişken adlarını yapılandırın.
Ardından blob depolama hesabınızı, blob kapsayıcınızı ve dosyanızı adlandırmak istediğiniz adı belirtin. Bu değişken adları burada tanımlanır ve sonraki bölümde ve az storage container create komutlarında az storage account create başvurulur.
Aşağıdaki kod bu değerleri ortam değişkenleri olarak dışarı aktarır:
Bu değişkenler dışarı aktarıldıktan sonra yerel olarak bir metin dosyası oluşturun. Uç nokta dağıtıldığında puanlama betiği, uç nokta oluşturulduktan sonra oluşturulan sistem tarafından atanan yönetilen kimliği kullanarak bu metin dosyasına erişir.
Uç noktanızın, çalışma alanınızın ve çalışma alanı konumunuzun adına karar verin ve bu değeri ortam değişkeni olarak dışarı aktarın:
Ardından blob depolama hesabınızı, blob kapsayıcınızı ve dosyanızı adlandırmak istediğiniz adı belirtin. Bu değişken adları burada tanımlanır ve sonraki bölümde ve az storage container create komutlarında az storage account create başvurulur.
Bu değişkenler dışarı aktarıldıktan sonra yerel olarak bir metin dosyası oluşturun. Uç nokta dağıtıldığında puanlama betiği, uç noktada kullanılan kullanıcı tarafından atanan yönetilen kimliği kullanarak bu metin dosyasına erişir.
Kullanıcı kimliği adınızın adına karar verin ve bu değeri ortam değişkeni olarak dışarı aktarın:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Çalışma alanı ve dağıtımla ilgili değişkenler için değerler atayın:
Ardından blob depolama hesabınızı, blob kapsayıcınızı ve dosyanızı adlandırmak istediğiniz adı belirtin. Bu değişken adları burada tanımlanır ve ve ContainerClienttarafından depolama hesabı ve kapsayıcı oluşturma kodunda başvurulurStorageManagementClient.
Bu değişkenler atandıktan sonra yerel olarak bir metin dosyası oluşturun. Uç nokta dağıtıldığında puanlama betiği, uç nokta oluşturulduktan sonra oluşturulan sistem tarafından atanan yönetilen kimliği kullanarak bu metin dosyasına erişir.
Şimdi çalışma alanına bir tanıtıcı alın ve konumunu alın:
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
Depolama hesabı oluşturmak için bu değeri kullanın.
Çalışma alanı ve dağıtımla ilgili değişkenler için değerler atayın:
Ardından blob depolama hesabınızı, blob kapsayıcınızı ve dosyanızı adlandırmak istediğiniz adı belirtin. Bu değişken adları burada tanımlanır ve ve ContainerClienttarafından depolama hesabı ve kapsayıcı oluşturma kodunda başvurulurStorageManagementClient.
Bu değişkenler atandıktan sonra yerel olarak bir metin dosyası oluşturun. Uç nokta dağıtıldığında puanlama betiği, uç nokta oluşturulduktan sonra oluşturulan kullanıcı tarafından atanan yönetilen kimliği kullanarak bu metin dosyasına erişir.
Kullanıcı kimliği adınızın adına karar verin:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Şimdi çalışma alanına bir tanıtıcı alın ve konumunu alın:
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
Depolama hesabı oluşturmak için bu değeri kullanın.
CLI ile çevrimiçi uç nokta dağıtmak için yapılandırmayı bir YAML dosyasında tanımlamanız gerekir. YAML şeması hakkında daha fazla bilgi için çevrimiçi uç nokta YAML başvuru belgesine bakın.
Aşağıdaki örneklerde yer alan YAML dosyaları, çevrimiçi uç noktalar oluşturmak için kullanılır.
Aşağıdaki YAML örneği uç noktalarda /çevrimiçi/yönetilen/yönetilen-kimlikler/1-sai-create-endpoint konumundadır. Dosya,
uç noktasına my-sai-endpointbaşvurmak istediğiniz adı tanımlar.
uç noktasına auth-mode: keyerişmek için kullanılacak yetkilendirme türünü belirtir.
CLI ile çevrimiçi uç nokta dağıtmak için yapılandırmayı bir YAML dosyasında tanımlamanız gerekir. YAML şeması hakkında daha fazla bilgi için çevrimiçi uç nokta YAML başvuru belgesine bakın.
Aşağıdaki örneklerde yer alan YAML dosyaları, çevrimiçi uç noktalar oluşturmak için kullanılır.
Aşağıdaki YAML örneği uç noktalarda /çevrimiçi/yönetilen/yönetilen-kimlikler/1-uai-create-endpoint konumundadır. Dosya,
uç noktasına my-uai-endpointbaşvurmak istediğiniz adı tanımlar.
uç noktasına auth-mode: keyerişmek için kullanılacak yetkilendirme türünü belirtir.
Python SDK'sı (v2) ile çevrimiçi uç nokta dağıtmak için aşağıdaki yapılandırmayı tanımlamak için nesneler kullanılabilir. Alternatif olarak, YAML dosyaları yöntemi kullanılarak .load yüklenebilir.
Aşağıdaki Python uç noktası nesnesi:
uç noktasına başvurmak istediğiniz adı değişkenine endpoint_nameatar.
uç noktasına auth-mode="key"erişmek için kullanılacak yetkilendirme türünü belirtir.
Python SDK'sı (v2) ile çevrimiçi uç nokta dağıtmak için aşağıdaki yapılandırmayı tanımlamak için nesneler kullanılabilir. Alternatif olarak, YAML dosyaları yöntemi kullanılarak .load yüklenebilir.
Kullanıcı tarafından atanan kimlik için, kullanıcı tarafından atanan yönetilen kimlik oluşturulduktan sonra uç nokta yapılandırmasını tanımlarsınız.
Bu dağıtım nesnesi:
Oluşturmak istediğiniz dağıtım türünün sınıfı aracılığıyla olduğunu ManagedOnlineDeployment belirtir.
Uç noktanın adlı blueilişkili bir dağıtımı olduğunu gösterir.
ve gibi dağıtımın ayrıntılarını yapılandırıyor nameinstance_count
Satır içinde daha fazla nesne tanımlar ve bunları dağıtımıyla Modelilişkilendirir,CodeConfiguration ve Environment.
Kullanıcı tarafından atanan yönetilen kimliğin depolama alanına erişmesi için gereken ortam değişkenlerini içerir.
için UAI_CLIENT_ID, bu yapılandırmayı gerçekten dağıtmadan önce ve oluşturduktan sonra eklenen bir yer tutucu ortam değişkeni ekler.
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",
},
)
Yönetilen kimliği oluşturma
Azure kaynaklarına erişmek için, çevrimiçi uç noktanız için sistem tarafından atanan veya kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.
Çevrimiçi uç nokta oluşturduğunuzda, sistem tarafından atanan yönetilen kimlik sizin için otomatik olarak oluşturulur, bu nedenle ayrı bir tane oluşturmanız gerekmez.
Kullanıcı tarafından atanan yönetilen kimlik oluşturmak için aşağıdaki komutu kullanın:
az identity create --name $UAI_NAME
Çevrimiçi uç nokta oluşturduğunuzda, sistem tarafından atanan yönetilen kimlik sizin için otomatik olarak oluşturulur, bu nedenle ayrı bir tane oluşturmanız gerekmez.
Kullanıcı tarafından atanan bir yönetilen kimlik oluşturmak için önce öğesine ManagedServiceIdentityClientbir tanıtıcı alın:
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
credential = AzureCliCredential()
msi_client = ManagedServiceIdentityClient(
subscription_id=subscription_id,
credential=credential,
)
Bu örnek için bir blob depolama hesabı ve blob kapsayıcısı oluşturun ve daha önce oluşturulan metin dosyasını blob kapsayıcısına yükleyin. Bu depolama hesabına ve blob kapsayıcısına çevrimiçi uç nokta ve yönetilen kimlik erişimi verirsiniz.
Ardından, ile ContainerClientkapsayıcıya bir blob yükleyin:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Çevrimiçi uç nokta oluşturma
Aşağıdaki kod, dağıtım belirtmeden çevrimiçi bir uç nokta oluşturur.
Uyarı
Uç noktanın kimliği sabittir. Uç nokta oluşturma sırasında, bunu sistem tarafından atanan bir kimlik (varsayılan) veya kullanıcı tarafından atanan bir kimlikle ilişkilendirebilirsiniz. Uç nokta oluşturulduktan sonra kimliği değiştiremezsiniz.
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
Çevrimiçi uç noktalar için kapsayıcı kayıt defteri için Azure Container Registry çekme izni, AcrPull izni ve çalışma alanının varsayılan veri deposu için Depolama Blob Veri Okuyucusu izni gerekir.
Çevrimiçi uç nokta izninin depolama alanınıza sistem tarafından atanan yönetilen kimliği aracılığıyla erişmesine izin verebilir veya kullanıcı tarafından atanan yönetilen kimliğe önceki bölümde oluşturulan depolama hesabına erişim izni verebilirsiniz.
Uç noktanız için oluşturulan sistem tarafından atanan yönetilen kimliği alın.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Buradan, sistem tarafından atanan yönetilen kimliğe depolama alanınıza erişme izni verebilirsiniz.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Kullanıcı tarafından atanan yönetilen kimlik istemci kimliğini alın.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Kullanıcı tarafından atanan yönetilen kimlik kimliğini alın.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Çalışma alanıyla ilişkili kapsayıcı kayıt defterini alın.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Çalışma alanının varsayılan depolama alanını alma.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Depolama hesabı için kullanıcı tarafından atanan yönetilen kimliğe izin verin.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Kullanıcı tarafından atanan yönetilen kimliğe kapsayıcı kayıt defteri izni verin.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Kullanıcı tarafından atanan yönetilen kimliğe varsayılan çalışma alanı depolama izni verin.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
İlk olarak, rol tanımlarını listelemek için bir AuthorizationManagementClient oluşturun:
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",
)
Ardından, Depolama Blobu Veri Okuyucusu rolünü uç noktaya atayın. Rol tanımı ada göre alınır ve uç noktanın Asıl Kimliği ile birlikte geçirilir. Rol, yukarıda oluşturulan depolama hesabının kapsamında uygulanır ve uç noktanın dosyayı okumasına izin verir.
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
),
)
İlk olarak, rol tanımlarını listelemek için bir AuthorizationManagementClient oluşturun:
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",
)
Ardından, kullanıcı tarafından atanan yönetilen kimliğin asıl kimliğini ve istemci kimliğini alın. Rolleri atamak için yalnızca asıl kimlik gereklidir. Ancak, dağıtımı oluşturmadan önce yer tutucu ortam değişkenini UAI_CLIENT_ID doldurmak için istemci kimliğini kullanırsınız.
Ardından, Depolama Blobu Veri Okuyucusu rolünü uç noktaya atayın. Rol tanımı ada göre alınır ve uç noktanın asıl kimliğiyle birlikte geçirilir. Rol, uç noktanın dosyayı okumasına izin vermek için yukarıda oluşturulan depolama hesabının kapsamında uygulanır.
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",
),
)
Sonraki iki izin için çalışma alanı ve kapsayıcı kayıt defteri nesneleri gerekir:
Ardından AcrPull rolünü kullanıcı tarafından atanan kimliğe atayın. Bu rol, görüntülerin Azure Container Registry'den çekilmesini sağlar. Kapsam, çalışma alanıyla ilişkili kapsayıcı kayıt defteri düzeyinde uygulanır.
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",
),
)
Son olarak, Depolama Blobu Veri Okuyucusu rolünü çalışma alanı depolama hesabı kapsamındaki uç noktaya atayın. Bu rol ataması, uç noktanın hem çalışma alanı depolama hesabındaki blobları hem de yeni oluşturulan depolama hesabını okumasına olanak tanır.
Rol, yukarıda atanan ilk rolle aynı ada ve özelliklere sahiptir, ancak farklı bir kapsama uygulanır ve farklı bir kimliğe sahiptir.
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",
),
)
Azure kaynağına erişmek için puanlama betiği
Bu senaryoda, önceki bölümlerde oluşturulan depolama hesabı olan Azure kaynaklarına erişmek için kimlik belirtecinizi nasıl kullanacağınızı anlamak için aşağıdaki betiği inceleyin.
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()
Yapılandırmanızla dağıtım oluşturma
Çevrimiçi uç noktayla ilişkili bir dağıtım oluşturun. Çevrimiçi uç noktalara dağıtma hakkında daha fazla bilgi edinin.
Uyarı
Bu dağıtım, temel alınan ortamın/görüntünün ilk kez derlenip derlenmediğine bağlı olarak yaklaşık 8-14 dakika sürebilir. Aynı ortamı kullanan sonraki dağıtımlar daha hızlı olacaktır.
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
Not
Bağımsız değişkeninin --name değeri YAML dosyasının name içindeki anahtarı geçersiz kılabilir.
Dağıtım durumunu denetleyin.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Yukarıdaki sorguyu yalnızca belirli verileri döndürecek şekilde daraltmak için bkz . Azure CLI komut çıkışını sorgulama.
Not
Puanlama betiğindeki init yöntemi, sistem tarafından atanan yönetilen kimlik belirtecini kullanarak dosyayı depolama hesabınızdan okur.
Init yöntemi çıkışını denetlemek için aşağıdaki kodu içeren dağıtım günlüğüne bakın.
# 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
Not
Bağımsız değişkeninin --name değeri YAML dosyasının name içindeki anahtarı geçersiz kılabilir.
Komut yürütülürken dağıtımın durumunu de kontrol edebilirsiniz.
az ml online-endpoint show --name $ENDPOINT_NAME
Yukarıdaki sorguyu yalnızca belirli verileri döndürecek şekilde daraltmak için bkz . Azure CLI komut çıkışını sorgulama.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Not
Puanlama betiğindeki init yöntemi, kullanıcı tarafından atanan yönetilen kimlik belirtecini kullanarak depolama hesabınızdan dosyayı okur.
Init yöntemi çıkışını denetlemek için aşağıdaki kodu içeren dağıtım günlüğüne bakın.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Dağıtımınız tamamlandığında model, ortam ve uç nokta Azure Machine Learning çalışma alanınıza kaydedilir.
Uç noktayı test edin
Çevrimiçi uç noktanız dağıtıldıktan sonra, bir istekle işlemini test edin ve onaylayın. Çıkarım ayrıntıları modelden modele farklılık gösterir. Bu kılavuz için JSON sorgu parametreleri şöyle görünür:
Dağıtılan çevrimiçi uç noktayı ve depolama alanını kullanmaya devam etmek istemiyorsanız maliyetleri azaltmak için bunları silin. Uç noktayı sildiğinizde, tüm ilişkili dağıtımları da silinir.