ar ar ar ar ar ar ar ar ar ar ar ar en ar ar ar ar ar ar ar ar ar ar ar ar fa ar ar ar ar ar ar ar fr ar fr en ar ar ar ar ar ar ja en en en ar ar ar ja en en en en en ar ar ar ar en en ar ar ar ar en ar en ar en ar en ar en ar en ar ar ar ar en ar en ar ar ar ar ar ar ar ar ar ar ar ar ar ar ur ar ar ar ar ar ar ar ar en ar ar ur ar ar ar ar ar ar ar ar en
في هذه المقالة، ستتعلم كيفية إنشاء مساحة عمل التعلم الآلي من Microsoft Azure وإدارتها باستخدام ملفات تكوين Terraform. تمكّنك ملفات التكوين المستندة إلى القوالب الخاصة بـ Terraformمن تحديد موارد Azure وإنشائها وتكوينها بطريقة قابلة للتكرار ويمكن التنبؤ بها. يتتبع Terraform حالة الموارد وهو قادر على تنظيف الموارد وتدميرها.
توصيف Terraform هو مستند يحدد الموارد اللازمة للتوزيع. قد تحدد أيضاً متغيرات التوزيع. يتم استخدام المتغيرات لتوفير قيم الإدخال عند استخدام التكوين.
اشتراك Azure. إذا لم يكن لديك واحد، فجرّب الإصدار المجاني أو المدفوع من التعلم الآلي من Microsoft Azure من Microsoft Azure.
إصدار مثبت من Azure CLI.
تكوين Terraform: اتبع الإرشادات الواردة في هذه المقالة ومقال Terraform وتكوين الوصول إلى Azure.
يمكنك عند إنشاء مساحة عمل جديدة إما إنشاء الخدمات التي تحتاجها مساحة العمل تلقائياً أو استخدام الخدمات الموجودة. إذا كنت تريد استخدام خدمات موجودة من اشتراك Azure مختلف عن مساحة العمل، فيجب عليك تسجيل مساحة اسم التعلم الآلي من Microsoft Azure في الاشتراك الذي يحتوي على تلك الخدمات. على سبيل المثال، عند إنشاء مساحة عمل في الاشتراك أ يستخدم حساب تخزين من الاشتراك ب، يجب تسجيل مساحة اسم التعلم الآلي من Microsoft Azure في الاشتراك ب قبل أن تتمكن من استخدام حساب التخزين مع مساحة العمل.
موفّر الموارد للتعلم الآلي من Microsoft Azure هو Microsoft.MachineLearningServices. للحصول على معلومات عن كيفية معرفة إذا ما كان مسجلاً وكيفية تسجيله، راجع مقالة موفري الموارد من Azure والأنواع.
وينطبق ذلك فقط على الموارد المتوفرة أثناء إنشاء مساحة العمل؛ حسابات تخزين Azure وAzure Container Register وAzure Key Vault وApplication Insights.
يتم إنشاء مثيل Azure Application Insights عند إنشاء مساحة العمل. يمكنك حذف مثيل Application Insights بعد إنشاء نظام المجموعة إذا كنت تريد ذلك. يؤدي حذفه إلى الحد من المعلومات التي تم جمعها من مساحة العمل، وقد يزيد من صعوبة استكشاف المشكلات وإصلاحها. إذا حذفت مثيل Application Insights الذي تم إنشاؤه بواسطة مساحة العمل، فلا يمكنك إعادة إنشائه دون حذف مساحة العمل وإعادة إنشائها.
لمزيد من المعلومات عن استخدام مثيل Application Insights هذا، راجع مراقبة وجمع البيانات من نقاط نهاية خدمة ويب التعلم الآلي.
قم بإنشاء ملف تكوين Terraform الذي يعلن عن موفر Azure:
إنشاء ملف جديد يسمى main.tf. إذا كنت تعمل مع Azure Cloud Shell، فاستخدم bash:
الصق التعليمة البرمجية التالي في المحرر:
terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "=2.76.0" } } } provider "azurerm" { features {} } data "azurerm_client_config" "current" {} resource "azurerm_resource_group" "default" { name = "rg-${var.name}-${var.environment}" location = var.location }
احفظ الملف ( S) واخرج من المحرر ( Q).
قم بتوزيع مساحة عمل
يمكن استخدام تكوينات Terraform التالية لإنشاء مساحة عمل التعلم الآلي. عند إنشاء مساحة عمل التعلم الآلي، هناك حاجة إلى خدمات أخرى متنوعة كاعتماديات. يحدد القالب أيضاً هذه الموارد المرتبطة بمساحة العمل. بناءً على احتياجاتك، يمكنك اختيار استخدام القالب الذي يُنشئ موارد مع اتصال شبكة عامة أو خاصة.
تتطلب بعض الموارد في Azure أسماء فريدة بشكل عام. قبل توزيع مواردك باستخدام القوالب التالية، اضبط المتغير name على قيمة فريدة.
variable "name" { type = string description = "Name of the deployment" } variable "environment" { type = string description = "Name of the environment" default = "dev" } variable "location" { type = string description = "Location of the resources" default = "East US" }
# Dependent resources for Azure Machine Learning resource "azurerm_application_insights" "default" { name = "appi-${var.name}-${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name application_type = "web" } resource "azurerm_key_vault" "default" { name = "kv-${var.name}-${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "premium" purge_protection_enabled = false } resource "azurerm_storage_account" "default" { name = "st${var.name}${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name account_tier = "Standard" account_replication_type = "GRS" } resource "azurerm_container_registry" "default" { name = "cr${var.name}${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name sku = "Premium" admin_enabled = true } # Machine Learning workspace resource "azurerm_machine_learning_workspace" "default" { name = "mlw-${var.name}-${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name application_insights_id = azurerm_application_insights.default.id key_vault_id = azurerm_key_vault.default.id storage_account_id = azurerm_storage_account.default.id container_registry_id = azurerm_container_registry.default.id identity { type = "SystemAssigned" } }
ينشئ التكوين أدناه مساحة عمل في بيئة شبكة معزولة باستخدام نقاط نهاية Private Link لـ Azure. تم تضمينمناطق DNS الخاصة بحيث يمكن حل أسماء المجالات داخل الشبكة الظاهرية.
تتطلب بعض الموارد في Azure أسماء فريدة بشكل عام. قبل توزيع مواردك باستخدام القوالب التالية، اضبط المتغير resourceprefix على قيمة فريدة.
عند استخدام نقاط نهاية Private Linkة لكل من Azure Container Registry والتعلم الآلي، لا يمكن استخدام مهام Azure Container Registry لإنشاء صور البيئة. بدلاً من ذلك، يمكنك إنشاء صور باستخدام مجموعة حساب التعلم الآلي. لتكوين اسم المجموعة المستخدم، قم بتعيين وسيطة image_build_compute_name. يمكنك التكوين للسماح بالوصول العام إلى مساحة عمل بها نقطة نهاية ارتباط خاص باستخدام الوسيطة public_network_access_enabled.
variable "name" { type = string description = "Name of the deployment" } variable "environment" { type = string description = "Name of the environment" default = "dev" } variable "location" { type = string description = "Location of the resources" default = "East US" } variable "vnet_address_space" { type = list(string) description = "Address space of the virtual network" default = ["10.0.0.0/16"] } variable "training_subnet_address_space" { type = list(string) description = "Address space of the training subnet" default = ["10.0.1.0/24"] } variable "aks_subnet_address_space" { type = list(string) description = "Address space of the aks subnet" default = ["10.0.2.0/23"] } variable "ml_subnet_address_space" { type = list(string) description = "Address space of the ML workspace subnet" default = ["10.0.0.0/24"] } variable "dsvm_subnet_address_space" { type = list(string) description = "Address space of the DSVM subnet" default = ["10.0.4.0/24"] } variable "bastion_subnet_address_space" { type = list(string) description = "Address space of the bastion subnet" default = ["10.0.5.0/24"] } variable "image_build_compute_name" { type = string description = "Name of the compute cluster to be created and set to build docker images" default = "image-builder" } # DSVM Variables variable "dsvm_name" { type = string description = "Name of the Data Science VM" default = "vmdsvm01" } variable "dsvm_admin_username" { type = string description = "Admin username of the Data Science VM" default = "azureadmin" } variable "dsvm_host_password" { type = string description = "Password for the admin username of the Data Science VM" sensitive = true }
# Dependent resources for Azure Machine Learning resource "azurerm_application_insights" "default" { name = "appi-${var.name}-${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name application_type = "web" } resource "azurerm_key_vault" "default" { name = "kv-${var.name}-${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "premium" purge_protection_enabled = true network_acls { default_action = "Deny" bypass = "AzureServices" } } resource "azurerm_storage_account" "default" { name = "st${var.name}${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name account_tier = "Standard" account_replication_type = "GRS" network_rules { default_action = "Deny" bypass = ["AzureServices"] } } resource "azurerm_container_registry" "default" { name = "cr${var.name}${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name sku = "Premium" admin_enabled = true network_rule_set { default_action = "Deny" } public_network_access_enabled = false } # Machine Learning workspace resource "azurerm_machine_learning_workspace" "default" { name = "mlw-${var.name}-${var.environment}" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name application_insights_id = azurerm_application_insights.default.id key_vault_id = azurerm_key_vault.default.id storage_account_id = azurerm_storage_account.default.id container_registry_id = azurerm_container_registry.default.id identity { type = "SystemAssigned" } # Args of use when using an Azure Private Link configuration public_network_access_enabled = false image_build_compute_name = var.image_build_compute_name depends_on = [ azurerm_private_endpoint.kv_ple, azurerm_private_endpoint.st_ple_blob, azurerm_private_endpoint.storage_ple_file, azurerm_private_endpoint.cr_ple, azurerm_subnet.snet-training ] } # Private endpoints resource "azurerm_private_endpoint" "kv_ple" { name = "ple-${var.name}-${var.environment}-kv" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name subnet_id = azurerm_subnet.snet-workspace.id private_dns_zone_group { name = "private-dns-zone-group" private_dns_zone_ids = [azurerm_private_dns_zone.dnsvault.id] } private_service_connection { name = "psc-${var.name}-kv" private_connection_resource_id = azurerm_key_vault.default.id subresource_names = ["vault"] is_manual_connection = false } } resource "azurerm_private_endpoint" "st_ple_blob" { name = "ple-${var.name}-${var.environment}-st-blob" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name subnet_id = azurerm_subnet.snet-workspace.id private_dns_zone_group { name = "private-dns-zone-group" private_dns_zone_ids = [azurerm_private_dns_zone.dnsstorageblob.id] } private_service_connection { name = "psc-${var.name}-st" private_connection_resource_id = azurerm_storage_account.default.id subresource_names = ["blob"] is_manual_connection = false } } resource "azurerm_private_endpoint" "storage_ple_file" { name = "ple-${var.name}-${var.environment}-st-file" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name subnet_id = azurerm_subnet.snet-workspace.id private_dns_zone_group { name = "private-dns-zone-group" private_dns_zone_ids = [azurerm_private_dns_zone.dnsstoragefile.id] } private_service_connection { name = "psc-${var.name}-st" private_connection_resource_id = azurerm_storage_account.default.id subresource_names = ["file"] is_manual_connection = false } } resource "azurerm_private_endpoint" "cr_ple" { name = "ple-${var.name}-${var.environment}-cr" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name subnet_id = azurerm_subnet.snet-workspace.id private_dns_zone_group { name = "private-dns-zone-group" private_dns_zone_ids = [azurerm_private_dns_zone.dnscontainerregistry.id] } private_service_connection { name = "psc-${var.name}-cr" private_connection_resource_id = azurerm_container_registry.default.id subresource_names = ["registry"] is_manual_connection = false } } resource "azurerm_private_endpoint" "mlw_ple" { name = "ple-${var.name}-${var.environment}-mlw" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name subnet_id = azurerm_subnet.snet-workspace.id private_dns_zone_group { name = "private-dns-zone-group" private_dns_zone_ids = [azurerm_private_dns_zone.dnsazureml.id, azurerm_private_dns_zone.dnsnotebooks.id] } private_service_connection { name = "psc-${var.name}-mlw" private_connection_resource_id = azurerm_machine_learning_workspace.default.id subresource_names = ["amlworkspace"] is_manual_connection = false } } # Compute cluster for image building required since the workspace is behind a vnet. # For more details, see https://docs.microsoft.com/en-us/azure/machine-learning/tutorial-create-secure-workspace#configure-image-builds. resource "azurerm_machine_learning_compute_cluster" "image-builder" { name = var.image_build_compute_name location = azurerm_resource_group.default.location vm_priority = "LowPriority" vm_size = "Standard_DS2_v2" machine_learning_workspace_id = azurerm_machine_learning_workspace.default.id subnet_resource_id = azurerm_subnet.snet-training.id scale_settings { min_node_count = 0 max_node_count = 3 scale_down_nodes_after_idle_duration = "PT15M" # 15 minutes } identity { type = "SystemAssigned" } }
# Virtual Network resource "azurerm_virtual_network" "default" { name = "vnet-${var.name}-${var.environment}" address_space = var.vnet_address_space location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name } resource "azurerm_subnet" "snet-training" { name = "snet-training" resource_group_name = azurerm_resource_group.default.name virtual_network_name = azurerm_virtual_network.default.name address_prefixes = var.training_subnet_address_space enforce_private_link_endpoint_network_policies = true } resource "azurerm_subnet" "snet-aks" { name = "snet-aks" resource_group_name = azurerm_resource_group.default.name virtual_network_name = azurerm_virtual_network.default.name address_prefixes = var.aks_subnet_address_space enforce_private_link_endpoint_network_policies = true } resource "azurerm_subnet" "snet-workspace" { name = "snet-workspace" resource_group_name = azurerm_resource_group.default.name virtual_network_name = azurerm_virtual_network.default.name address_prefixes = var.ml_subnet_address_space enforce_private_link_endpoint_network_policies = true } # ... # For full reference, see: https://github.com/Azure/terraform/blob/master/quickstart/201-machine-learning-moderately-secure/network.tf
توجد عدة خيارات للاتصال بمساحة عمل نقطة نهاية Private Linkة. لمعرفة المزيد حول هذه الخيارات، راجع الاتصال الآمن بمساحة العمل الخاصة بك.
عند إنشاء مساحة عمل التعلم الآلي من Microsoft Azure، أو مورد تستخدمه مساحة العمل، قد تتلقى خطأ مشابهاً للرسائل الآتية:
No registered resource provider found for location {location}
The subscription is not registered to use namespace {resource-provider-namespace}
يُسجّل معظم موفري الموارد تلقائياً، ولكن ليس جميعهم. إذا استلمت هذه الرسالة، فأنت بحاجة إلى تسجيل الموفّر المذكور.
يحتوي الجدول التالي على قائمة بموفّري الموارد المطلوبين من التعلم الآلي من Microsoft Azure:
إنشاء مِساحة عمل التعلم الآلي من Azure.
يستخدم حساب التخزين في Azure كتخزين افتراضي لمساحة العمل.
تستخدم مساحة العمل Azure Container Registry لإنشاء صور Docker.
تستخدم مساحة العمل Azure Key Vault لتخزين البيانات السرية.
دفاتر ملاحظات متكامل على مثيل حساب التعلم الآلي من Microsoft Azure.
إذا كنت تخطط لتوزيع النماذج المُدربة على خدمات Azure Kubernetes.
في حال كنت تخطط لاستخدام مفتاح مُدار بواسطة العميل مع التعلم الآلي من Microsoft Azure، فيجب تسجيل موفري الخدمة التاليين:
مثيل Azure CosmosDB الذي يسجل بيانات التعريف لمساحة العمل.
يوفر البحث في Azure إمكانات الفهرسة لمساحة العمل.
للحصول على معلومات بشأن تسجيل موفري الموارد، راجع حل الأخطاء لتسجيل موفر المورد.
لمعرفة المزيد حول دعم Terraform على Azure، راجع Terraform في وثائق Azure.
للحصول على تفاصيل حول موفر Terraform Azure ووحدة التعلم الآلي، راجع Terraform Registry Azure Resource Manager Provider.
للعثور على أمثلة لقوالب "التشغيل السريع" لـ Terraform، راجع قوالب Azure Terraform التشغيل السريع:
101: مساحة عمل التعلم الآلي والحساب - الحد الأدنى من مجموعة الموارد اللازمة لبدء استخدام Azure ML.
201: مساحة عمل التعلم الآلي، والحساب، ومجموعة من مكونات الشبكة لعزل الشبكة - جميع الموارد اللازمة لإنشاء بيئة إنتاج تجريبية للاستخدام مع بيانات HBI.
202: مشابه لـ 201، لكن مع خيار جلب مكونات الشبكة الحالية..
301: مساحة عمل التعلم الآلي (Secure Hub and Spoke with Firewall).
لمعرفة المزيد حول خيارات تكوين الشبكة، راجع تأمين موارد مساحة عمل التعلم الآلي من Azure باستخدام الشبكات الظاهرية (VNets).
بالنسبة لعمليات التوزيع البديلة المستندة إلى قالب Azure Resource Manager، راجع توزيع الموارد باستخدام قوالب إدارة الموارد وواجهة برمجة تطبيقات REST لمدير الموارد.
للحصول على معلومات حول كيفية إبقاء التعلم الآلي من Azure محدثا بأحدث تحديثات الأمان، راجع إدارة الثغرات الأمنية.