تعرف على كيفية الوصول إلى موارد Azure من البرنامج النصي لتسجيل النقاط باستخدام نقطة نهاية عبر الإنترنت وهوية مُدارة مُعيَّنة من قبل النظام أو هوية مُدارة يعينها المستخدم.
تسمح كل من نقاط النهاية المدارة ونقاط نهاية Kubernetes ل Azure التعلم الآلي بإدارة عبء توفير مورد الحساب ونشر نموذج التعلم الآلي. عادة ما يحتاج النموذج الخاص بك إلى الوصول إلى موارد Azure مثل Azure Container Registry أو تخزين الكائن الثنائي كبير الحجم للاستدلال؛ باستخدام هوية مدارة، يمكنك الوصول إلى هذه الموارد دون الحاجة إلى إدارة بيانات الاعتماد في التعليمات البرمجية الخاصة بك. تعرف على المزيد بشأن الهويات المدارة.
يفترض هذا الدليل أنه ليس لديك هوية مدارة أو حساب تخزين أو نقطة نهاية عبر الإنترنت. إذا كان لديك هذه المكونات بالفعل، فانتقل إلى قسم منح إذن الوصول إلى الهوية المدارة.
تحتاج مجموعة موارد Azure، التي تحتاج فيها (أو كيان الخدمة الذي تستخدمه) إلى وصول المستخدم مسؤول istrator ووصول المساهم. لديك مجموعة موارد إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
مساحة عمل للتعلم الآلي من Microsoft Azure. لديك بالفعل مساحة عمل إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
يُعد نموذج تدريب التعلم الآلي جاهز للتسجيل والنشر. إذا كنت تتابع مع العينة، يتم توفير نموذج.
إذا لم تكن قد قمت بالفعل بتعيين الإعدادات الافتراضية لـAzure CLI، فاحفظ الإعدادات الافتراضية. لتجنب تمرير قيم اشتراكك، ومساحة العمل، ومجموعة الموارد عدة مرات، قم بتشغيل هذا التعليمة البرمجية:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
للمتابعة مع العينة، قم باستنساخ مستودع العينات ثم قم بتغيير الدليل إلى cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
تحتاج مجموعة موارد Azure، التي تحتاج فيها (أو كيان الخدمة الذي تستخدمه) إلى وصول المستخدم مسؤول istrator ووصول المساهم. لديك مجموعة موارد إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
مساحة عمل للتعلم الآلي من Microsoft Azure. لديك مساحة عمل إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة أعلاه.
يُعد نموذج تدريب التعلم الآلي جاهز للتسجيل والنشر. إذا كنت تتابع مع العينة، يتم توفير نموذج.
إذا لم تكن قد قمت بالفعل بتعيين الإعدادات الافتراضية لـAzure CLI، فاحفظ الإعدادات الافتراضية. لتجنب تمرير قيم اشتراكك، ومساحة العمل، ومجموعة الموارد عدة مرات، قم بتشغيل هذا التعليمة البرمجية:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
للمتابعة مع العينة، قم باستنساخ مستودع العينات ثم قم بتغيير الدليل إلى cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
تحتاج مجموعة موارد Azure، التي تحتاج فيها (أو كيان الخدمة الذي تستخدمه) إلى وصول المستخدم مسؤول istrator ووصول المساهم. لديك مجموعة موارد إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
مساحة عمل للتعلم الآلي من Microsoft Azure. لديك بالفعل مساحة عمل إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
يُعد نموذج تدريب التعلم الآلي جاهز للتسجيل والنشر. إذا كنت تتابع مع العينة، يتم توفير نموذج.
استنساخ مستودع العينات، ثم تغيير الدليل.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
تحتاج مجموعة موارد Azure، التي تحتاج فيها (أو كيان الخدمة الذي تستخدمه) إلى وصول المستخدم مسؤول istrator ووصول المساهم. لديك مجموعة موارد إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
مساحة عمل للتعلم الآلي من Microsoft Azure. لديك بالفعل مساحة عمل إذا قمت بتكوين ملحق التعلم الآلي الخاص بك وفقا للمقالة السابقة.
يُعد نموذج تدريب التعلم الآلي جاهز للتسجيل والنشر. إذا كنت تتابع مع العينة، يتم توفير نموذج.
استنساخ مستودع العينات.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
هوية نقطة النهاية غير قابلة للتغيير. أثناء إنشاء نقطة النهاية، يمكنك إقرانها بالهوية المعينة من قبل النظام (افتراضياً) أو بالهوية المعينة من قبل المستخدم. لا يمكنك تغيير الهوية بعد إنشاء نقطة النهاية.
إذا تم تكوين تخزين ARC وكائن ثنائي كبير الحجم كخاص، أي خلف شبكة ظاهرية، فيجب أن يكون الوصول من نقطة نهاية Kubernetes عبر الارتباط الخاص بغض النظر عما إذا كانت مساحة العمل الخاصة بك عامة أو خاصة. مزيد من التفاصيل حول إعداد الارتباط الخاص، راجع كيفية تأمين شبكة ظاهرية لمساحة العمل.
تكوين المتغيرات للتوزيع
قم بتكوين أسماء المتغيرات لمساحة العمل وموقع مساحة العمل ونقطة النهاية التي تريد إنشاءها للاستخدام مع التوزيع الخاص بك.
بعد ذلك، تحديد تسمية حساب تخزين blob وحاوية blob والملف. تعريف الأسماء المتغيرة هنا، ويشار إليها في az storage account createaz storage container create والأوامر في القسم التالي.
يُصدر التعليمات البرمجية التالية القيم كمتغيرات البيئة:
بعد تصدير هذه المتغيرات، إنشاء ملف نصي محليا. عند نشر نقطة النهاية، يصل البرنامج النصي لتسجيل النقاط إلى هذا الملف النصي باستخدام الهوية المدارة المعينة من قبل النظام التي تم إنشاؤها عند إنشاء نقطة النهاية.
حدد اسم نقطة النهاية ومساحة العمل وموقع مساحة العمل، ثم قم بتصدير هذه القيمة كمتغير بيئة:
بعد ذلك، تحديد تسمية حساب تخزين blob وحاوية blob والملف. تعريف الأسماء المتغيرة هنا، ويشار إليها في az storage account createaz storage container create والأوامر في القسم التالي.
بعد تصدير هذه المتغيرات، إنشاء ملف نصي محليا. عند نشر نقطة النهاية، يصل البرنامج النصي لتسجيل النقاط إلى هذا الملف النصي باستخدام الهوية المدارة المعينة من قبل المستخدم المستخدمة في نقطة النهاية.
حدد اسم هوية المستخدم الخاصة بك، وقم بتصدير تلك القيمة كمتغير بيئة:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
تعيين قيم لمساحة العمل والمتغيرات المتعلقة بالنشر:
بعد ذلك، تحديد تسمية حساب تخزين blob وحاوية blob والملف. يتم تعريف أسماء المتغيرات هذه هنا، ويشار إليها في حساب التخزين ورمز إنشاء الحاوية StorageManagementClient بواسطة و ContainerClient.
بعد تعيين هذه المتغيرات، قم بإنشاء ملف نصي محليا. عند نشر نقطة النهاية، يصل البرنامج النصي لتسجيل النقاط إلى هذا الملف النصي باستخدام الهوية المدارة المعينة من قبل النظام التي تم إنشاؤها عند إنشاء نقطة النهاية.
الآن، احصل على مؤشر إلى مساحة العمل واسترد موقعها:
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
استخدم هذه القيمة لإنشاء حساب تخزين.
تعيين قيم لمساحة العمل والمتغيرات المتعلقة بالنشر:
بعد ذلك، تحديد تسمية حساب تخزين blob وحاوية blob والملف. يتم تعريف أسماء المتغيرات هذه هنا، ويشار إليها في حساب التخزين ورمز إنشاء الحاوية StorageManagementClient بواسطة و ContainerClient.
بعد تعيين هذه المتغيرات، قم بإنشاء ملف نصي محليا. عند نشر نقطة النهاية، يصل البرنامج النصي لتسجيل النقاط إلى هذا الملف النصي باستخدام الهوية المدارة المعينة من قبل المستخدم التي تم إنشاؤها عند إنشاء نقطة النهاية.
حدد اسم هوية المستخدم:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
الآن، احصل على مؤشر إلى مساحة العمل واسترد موقعها:
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
لتوزيع نقطة نهاية عبر الإنترنت باستخدام واجهة مستوى الاستدعاء (Azure CLI)، تحتاج إلى تحديد التكوين في ملف YAML. لمزيد من المعلومات حول مخطط YAML، يُرجى الرجوع إلى مستند مرجع YAML لنقطة النهاية عبر الإنترنت .
تُستخدم ملفات YAML في الأمثلة التالية لإنشاء نقاط نهاية على الإنترنت.
يقع مثال YAML التالي في نقاط النهاية/عبر الإنترنت/المدارة/الهويات المدارة/1-sai-create-endpoint. الملف،
يحدد الاسم الذي تريد أن تشير به إلى نقطة النهاية، my-sai-endpoint.
يحدد نوع التخويل لاستخدامه للوصول إلى نقطة النهاية، auth-mode: key.
لتوزيع نقطة نهاية عبر الإنترنت باستخدام واجهة مستوى الاستدعاء (Azure CLI)، تحتاج إلى تحديد التكوين في ملف YAML. لمزيد من المعلومات حول مخطط YAML، يُرجى الرجوع إلى مستند مرجع YAML لنقطة النهاية عبر الإنترنت .
تُستخدم ملفات YAML في الأمثلة التالية لإنشاء نقاط نهاية على الإنترنت.
يقع مثال YAML التالي في نقاط النهاية/عبر الإنترنت/المدارة/الهويات المدارة/1-uai-create-endpoint. الملف،
يحدد الاسم الذي تريد أن تشير به إلى نقطة النهاية، my-uai-endpoint.
يحدد نوع التخويل لاستخدامه للوصول إلى نقطة النهاية، auth-mode: key.
يشير إلى نوع الهوية المطلوب استخدامه، type: user_assigned
لنشر نقطة نهاية عبر الإنترنت باستخدام Python SDK (v2)، يمكن استخدام الكائنات لتعريف التكوين التالي. بدلا من ذلك، يمكن تحميل ملفات YAML باستخدام .load الأسلوب .
كائن نقطة نهاية Python التالي:
تعيين الاسم الذي تريد من خلاله الرجوع إلى نقطة النهاية إلى المتغير endpoint_name.
يحدد نوع التخويل الذي يجب استخدامه للوصول إلى نقطة auth-mode="key"النهاية .
لنشر نقطة نهاية عبر الإنترنت باستخدام Python SDK (v2)، يمكن استخدام الكائنات لتعريف التكوين التالي. بدلا من ذلك، يمكن تحميل ملفات YAML باستخدام .load الأسلوب .
بالنسبة للهوية المعينة من قبل المستخدم، يمكنك تحديد تكوين نقطة النهاية بعد إنشاء الهوية المدارة المعينة من قبل المستخدم.
كائن التوزيع هذا:
يحدد أن نوع التوزيع الذي تريد إنشاءه ManagedOnlineDeployment هو عبر الفئة .
يشير إلى أن نقطة النهاية لها عملية توزيع مرتبطة تسمى blue.
تكوين تفاصيل النشر مثل name و instance_count
تعريف المزيد من الكائنات المضمنة وربطها بنشر و ModelCodeConfigurationوEnvironment.
يتضمن متغيرات البيئة المطلوبة للهوية المدارة المعينة من قبل المستخدم للوصول إلى التخزين.
إضافة متغير بيئة عنصر نائب ل UAI_CLIENT_ID، والذي تتم إضافته بعد إنشاء واحد وقبل نشر هذا التكوين فعليا.
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",
},
)
قم بإنشاء الهوية المُدارة
للوصول إلى موارد Azure، قم بإنشاء هوية مُدارة معينة من قبل النظام أو من قبل المستخدم لنقطة النهاية الخاصة بك على الإنترنت.
في هذا المثال، قم بإنشاء حساب تخزين عنصر ثنائي كبير الحجم (blob) وحاوية عنصر ثنائي كبير الحجم (blob)، ثم قم بتحميل الملف النصي الذي تم إنشاؤه مسبقاً إلى حاوية العنصر الثنائي كبير الحجم (blob). يمكنك منح نقطة النهاية عبر الإنترنت والوصول إلى الهوية المدارة إلى حساب التخزين هذا وحاوية blob.
ثم قم بتحميل كائن ثنائي كبير الحجم إلى الحاوية باستخدام ContainerClient:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
قم بإنشاء نقطة نهاية على الإنترنت
يُنشئ التعليمة البرمجية التالي نقطة نهاية عبر الإنترنت دون تحديد عملية توزيع.
تحذير
هوية نقطة النهاية غير قابلة للتغيير. أثناء إنشاء نقطة النهاية، يمكنك إقرانها بالهوية المعينة من قبل النظام (افتراضياً) أو بالهوية المعينة من قبل المستخدم. لا يمكنك تغيير الهوية بعد إنشاء نقطة النهاية.
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
تتطلب نقاط النهاية عبر الإنترنت إذن سحب Azure Container Registry، إذن AcrPull، إلى سجل الحاوية وأذن Storage Blob Data Reader إلى مخزن البيانات الافتراضي لمساحة العمل.
يمكنك السماح لإذن نقطة النهاية عبر الإنترنت بالوصول إلى مساحة التخزين الخاصة بك عبر الهوية المُدارة المخصصة من قبل النظام أو منح الإذن للهوية المُدارة المعينة من قِبل المستخدم للوصول إلى حساب التخزين الذي تم إنشاؤه في القسم السابق.
استرجع الهوية المُدارة المعينة من قبل النظام والتي تم إنشاؤها لنقطة النهاية الخاصة بك.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
من هنا، يُمكن منح إذن الهوية المُدارة المعين من قبل النظام للوصول إلى التخزين.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
استرجع معرف عميل الهوية المُدار الذي عيّنه المستخدم.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
استرجع معرّف الهوية المُدار الذي عيّنه المستخدم.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
احصل على سجل الحاوية المرتبط بمساحة العمل.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
استرجع التخزين الافتراضي لمساحة العمل.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
امنح إذن حساب التخزين للهوية المُدارة التي عيّنها المستخدم.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
امنح الإذن بالتخزين الافتراضي لمساحة العمل للهوية المُدارة المعينة من قبل المستخدم.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
بعد ذلك، قم بتعيين دور Storage Blob Data Reader إلى نقطة النهاية. يتم استرداد تعريف الدور بالاسم وتم تمريره مع المعرف الأساسي لنقطة النهاية. يتم تطبيق الدور في نطاق حساب التخزين الذي تم إنشاؤه أعلاه ويسمح لنقطة النهاية بقراءة الملف.
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
),
)
ثم احصل على المعرف الأساسي ومعرف العميل للهوية المدارة المعينة من قبل المستخدم. لتعيين الأدوار، تحتاج فقط إلى المعرف الأساسي. ومع ذلك، يمكنك استخدام معرف العميل لملء UAI_CLIENT_ID متغير بيئة العنصر النائب قبل إنشاء النشر.
بعد ذلك، قم بتعيين دور Storage Blob Data Reader إلى نقطة النهاية. يتم استرداد تعريف الدور بالاسم وتم تمريره مع المعرف الأساسي لنقطة النهاية. يتم تطبيق الدور في نطاق حساب التخزين الذي تم إنشاؤه أعلاه للسماح لنقطة النهاية بقراءة الملف.
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",
),
)
للحصول على الإذنين التاليين، تحتاج إلى مساحة العمل وعناصر سجل الحاوية:
بعد ذلك، قم بتعيين دور AcrPull إلى الهوية المعينة من قبل المستخدم. يسمح هذا الدور بسحب الصور من Azure Container Registry. يتم تطبيق النطاق على مستوى سجل الحاوية المقترن بمساحة العمل.
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",
),
)
وأخيرا، قم بتعيين دور Storage Blob Data Reader إلى نقطة النهاية في نطاق حساب تخزين مساحة العمل. يسمح تعيين الدور هذا لنقطة النهاية بقراءة الكائنات الثنائية كبيرة الحجم في حساب تخزين مساحة العمل بالإضافة إلى حساب التخزين الذي تم إنشاؤه حديثا.
الدور له نفس الاسم والقدرات مثل الدور الأول المعين أعلاه، ومع ذلك يتم تطبيقه في نطاق مختلف ولديه معرف مختلف.
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
ارجع إلى البرنامج النصي التالي لفهم كيفية استخدام رمز الهوية الخاص بك للوصول إلى موارد Azure، في هذا السيناريو، حساب التخزين الذي تم إنشاؤه في الأقسام السابقة.
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()
قد تستغرق عملية النشر حوالي 8-14 دقيقة اعتماداً على ما إذا كانت البيئة/ الصورة الأساسية يجري إنشائها لأول مرة. نقل عمليات النشر اللاحقة باستخدام نفس البيئة بشكل أسرع.
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
إشعار
قد تتجاوز قيمة الوسيطة --name المفتاح name داخل ملف YAML.
تحقق من حالة النشر.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
يقرأ أسلوب init في البرنامج النصي لتسجيل النقاط الملف من حساب التخزين الخاص بك باستخدام رمز الهوية المدار المعين من قبل النظام.
للتحقق من ناتج أسلوب init، يُرجى مراجعة سجل التوزيع مع التعليمات البرمجية التالية.
# 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
إشعار
قد تتجاوز قيمة الوسيطة --name المفتاح name داخل ملف YAML.
عند اكتمال التوزيع، يتم تسجيل النموذج والبيئة ونقطة النهاية في مساحة عمل التعلم الآلي من Microsoft Azure.
اختبار نقطة النهاية
بمجرد نشر نقطة النهاية عبر الإنترنت، اختبر وتأكد من عمليتها بطلب. تختلف تفاصيل الاستدلال من نموذج لآخر. بالنسبة لهذا الدليل، تبدو معلمات استعلام JSON كما يلي:
إذا كنت لا تخطط للاستمرار في استخدام نقطة النهاية والتخزين عبر الإنترنت التي تم توزيعها، فاحذفها لتقليل التكاليف. عند حذف نقطة النهاية، يتم حذف كافة عمليات النشر المتصلة أيضاً.