Создание рабочей области для Машинного обучения Azure с помощью шаблона Azure Resource Manager.

В этой статье мы рассмотрим несколько способов создания рабочей области Машинного обучения Azure с помощью шаблонов Azure Resource Manager. Шаблон Resource Manager позволяет легко создать все ресурсы в отдельной скоординированной операции. Шаблон представляет собой документ JSON, в котором определены необходимые для развертывания ресурсы. Также здесь можно указать параметры развертывания. Эти параметры позволят предоставить входные значения при использовании шаблона.

Узнайте подробнее о развертывании приложения с помощью шаблона диспетчера ресурсов Azure.

Необходимые компоненты

Ограничения

  • При создании рабочей области можно либо автоматически создать службы, необходимые для рабочей области, либо использовать существующие службы. Если вы хотите использовать существующие службы из подписки Azure, отличной от рабочей области, необходимо зарегистрировать пространство имен Машинного обучения Azure в подписке, которая содержит эти службы. Например, при создании рабочей области в подписке A, которая использует учетную запись хранения из подписки B, пространство имен Машинного обучения Azure должно быть зарегистрировано в подписке B, прежде чем можно будет использовать учетную запись хранения с рабочей областью.

    Поставщик ресурсов для Машинного обучения Azure — Microsoft.MachineLearningServices. Сведения о том, как проверить регистрацию поставщика и зарегистрировать его, см. в разделе Поставщики и типы ресурсов Azure.

    Важно!

    Это относится только к ресурсам, предоставленным при создании рабочей области: учетные записи хранения Azure, реестр контейнеров Azure, Azure Key Vault и Application Insights.

  • Пример шаблона не всегда может использовать последнюю версию API для Машинное обучение Azure. Прежде чем использовать шаблон, рекомендуется изменить его для использования последних версий API. Сведения о последних версиях API для Машинное обучение Azure см. в Машинное обучение Azure REST API.

    Совет

    Каждая служба Azure имеет собственный набор версий API. Сведения об API для конкретной службы проверка сведения о службе в справочнике по REST API Azure.

    Чтобы обновить версию API, найдите "apiVersion": "YYYY-MM-DD" запись для типа ресурса и обновите ее до последней версии. Ниже приведен пример записи для Машинное обучение Azure:

    "type": "Microsoft.MachineLearningServices/workspaces",
    "apiVersion": "2023-10-01",
    

Несколько рабочих областей в одной виртуальной сети

Шаблон не поддерживает несколько рабочих областей Машинного обучения Azure, развернутых в одной виртуальной сети. Это обусловлено тем, что шаблон создает новые зоны DNS во время развертывания.

Если вы хотите создать шаблон, который развертывает несколько рабочих областей в одной виртуальной сети, настройте это вручную (с помощью портала Azure или интерфейса командной строки), а затем используйте портал Azure для создания шаблона.

Шаблон Resource Manager для рабочей области

Используемый в этом документе шаблон Azure Resource Manager можно найти в каталоге microsoft.machineleaerningservices/machine-learning-workspace-vnet репозитория шаблонов быстрого запуска для Azure на сайте GitHub.

Этот шаблон создает следующие ресурсы Azure:

  • Учетная запись хранения Azure
  • Azure Key Vault
  • Azure Application Insights
  • Реестр контейнеров Azure
  • Рабочая область службы "Машинное обучение Azure"

Группа ресурсов выполняет функции контейнера, который содержит службы. Для рабочего пространства Службы машинного обучения Azure нужно несколько служб.

Этот пример шаблона принимает два обязательных параметра:

  • location обозначает расположение, в котором будут созданы ресурсы.

    Этот шаблон будет использовать выбранное расположение для большинства ресурсов. Исключением является служба Application Insights, которая доступна не во всех тех расположениях, в которых доступны другие службы. Если вы выберете расположение, где эта служба не доступна, ее экземпляр будет создан в регионе "центрально-южная часть США".

  • workspaceName обозначает имя рабочего пространства Машинного обучения Azure в удобном для чтения формате.

    Примечание.

    В имени рабочей области не учитывается регистр.

    Имена для всех остальных служб создаются случайным образом.

Совет

Хотя шаблон, связанный с этим документом, создает новый Реестр контейнеров Azure, вы можете создать рабочую область и без реестра контейнеров. Он будет создан автоматически при выполнении любой операции, для которой реестр контейнеров обязателен. Например, при обучении или развертывании модели.

Вы также можете указать в шаблоне Azure Resource Manager существующий реестр контейнеров или учетную запись хранения, а не создавать новые. При этом необходимо использовать управляемое удостоверение (предварительная версия) или включить учетную запись администратора для реестра контейнеров.

Предупреждение

После создания реестра контейнеров Azure для рабочей области не удаляйте его. В противном случае будет нарушена функциональность рабочей области машинного обучения Azure.

Дополнительные сведения о шаблонах вы найдете в следующих статьях.

Развертывание шаблона

Чтобы развернуть шаблон, нужно создать группу ресурсов.

Если вы предпочитаете использовать графический пользовательский интерфейс, ознакомьтесь с разделом об использовании портала Azure.

az group create --name "examplegroup" --location "eastus"

После успешного создания группы ресурсов разверните шаблон с помощью следующей команды:

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" location="eastus"

По умолчанию при развертывании шаблона всегда создаются новые ресурсы. Но у вас также есть возможность использовать уже существующие ресурсы. Чтобы использовать существующие ресурсы, передайте в шаблон дополнительные параметры. Например, если вы хотите использовать существующую учетную запись хранения, задайте для параметра storageAccountOption значение existing (существующая) и укажите имя учетной записи хранения в параметре storageAccountName.

Важно!

Если вы намерены использовать существующую учетную запись хранения Azure, она не может быть учетной записью "Премиум" (Premium_LRS и Premium_GRS). Она также не может иметь иерархическое пространство имен (используется с Azure Data Lake Storage 2-го поколения). Ни хранилища класса Premium, ни иерархическое пространство имен не поддерживаются для стандартной учетной записи хранения рабочей области. Ни хранилища класса Premium, ни иерархическое пространство имен не поддерживаются в учетной записи хранения по умолчанию рабочей области. Вы можете использовать хранилище класса Premium или иерархическое пространство имен с учетными записями хранения, не являющимися учетными записями по умолчанию.

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      storageAccountOption="existing" \
      storageAccountName="existingstorageaccountname"

Развертывание зашифрованной рабочей области

Создание рабочей области с тремя параметрами показано в следующем примере шаблона:

  • Настройка параметров высокой конфиденциальности для рабочей области. При этом создается новый экземпляр Azure Cosmos DB.
  • Включение шифрования для рабочей области.
  • Здесь используется существующий экземпляр Azure Key Vault для извлечения ключей, управляемых клиентом. Управляемые клиентом ключи используются для создания нового экземпляра Azure Cosmos DB для рабочей области.

Важно!

После создания рабочей области вы не сможете изменить параметры для конфиденциальных данных, шифрования, идентификатора хранилища ключей или идентификаторов ключей. Чтобы изменить эти значения, придется создать новую рабочую область с новыми значениями.

Дополнительные сведения см. в разделе Ключи, управляемые клиентом.

Важно!

Чтобы использовать этот шаблон, ваша подписка должна соответствовать некоторым дополнительным требованиям.

  • Должен существовать хранилище Azure Key Vault с ключом шифрования.
  • Хранилище Azure Key Vault должно размещаться в том же регионе, где вы намерены создать рабочую область Машинного обучения Azure.
  • Необходимо указать идентификатор Azure Key Vault и универсальный код ресурса (URI) для ключа шифрования.

Инструкции по созданию хранилища и ключа см. в разделе Настройка ключей, управляемых клиентом.

Чтобы получить значения для параметров cmk_keyvault (идентификатор Key Vault) и resource_cmk_uri (URI ключа), которые нужны в этом шаблоне, выполните следующие действия.

  1. Чтобы получить идентификатор Key Vault, используйте следующую команду:

    az keyvault show --name <keyvault-name> --query 'id' --output tsv    
    

    Эта команда возвращает значение следующего вида: /subscriptions/{subscription-guid}/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>.

  2. Чтобы получить значение URI для управляемого клиентом ключа, используйте следующую команду:

    az keyvault key show --vault-name <keyvault-name> --name <key-name> --query 'key.kid' --output tsv    
    

Эта команда возвращает значение следующего вида: https://mykeyvault.vault.azure.net/keys/mykey/{guid}.

Важно!

После создания рабочей области вы не сможете изменить параметры для конфиденциальных данных, шифрования, идентификатора хранилища ключей или идентификаторов ключей. Чтобы изменить эти значения, придется создать новую рабочую область с новыми значениями.

Чтобы настроить использование ключей, управляемых клиентом, задайте при развертывании шаблона следующие параметры:

  • Encryption_status: Enabled.
  • cmk_keyvault: значение cmk_keyvault, полученное на предыдущих шагах.
  • resource_cmk_uri: значение resource_cmk_uri, полученное на предыдущих шагах.
az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      encryption_status="Enabled" \
      cmk_keyvault="/subscriptions/{subscription-guid}/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>" \
      resource_cmk_uri="https://mykeyvault.vault.azure.net/keys/mykey/{guid}" \

При использовании ключа, управляемого клиентом, Машинное обучение Azure создает вторичную группу ресурсов, содержащую экземпляр Azure Cosmos DB. Дополнительные сведения см. в статье "Шифрование неактивных данных" в Azure Cosmos DB.

Также вы можете настроить для данных дополнительную конфигурацию, указав для параметра confidential_data значение true. Этот параметр вносит следующие изменения:

  • Запускает шифрование локального временного диска в вычислительных кластерах Машинного обучения Azure, если вы еще не создали предыдущие кластеры в этой подписке. Если вы ранее уже создали кластер в подписке, отправьте запрос в службу поддержки для включения шифрования временного диска в этих кластерах.

  • Очищает локальный диск царапины между заданиями.

  • Безопасно передает учетные данные учетной записи хранения, реестра контейнеров и учетной записи SSH из слоя выполнения в вычислительные кластеры через хранилище ключей.

  • Включает IP-фильтрацию, чтобы базовые пулы пакетов невозможно было вызывать из внешних служб, кроме AzureMachineLearningService.

    Важно!

    После создания рабочей области вы не сможете изменить параметры для конфиденциальных данных, шифрования, идентификатора хранилища ключей или идентификаторов ключей. Чтобы изменить эти значения, придется создать новую рабочую область с новыми значениями.

    Дополнительные сведения см. в разделе Шифрование данных при хранении.

Развертывание рабочей области за виртуальной сетью

Задав для параметра vnetOption значение new или existing, вы можете создать ресурсы для использования рабочей областью, которая находится за виртуальной сетью.

Важно!

Для реестра контейнеров поддерживается только ценовая категория "Премиум".

Важно!

Application Insights не поддерживает развертывание за виртуальной сетью.

Развертывайте рабочую область только за частной конечной точкой.

Если связанные ресурсы не находятся за виртуальной сетью, можно задать для параметра privateEndpointType значение AutoAproval или ManualApproval, чтобы развернуть рабочую область за частной конечной точкой. Это можно сделать как для новых, так и для существующих рабочих областей. При обновлении существующей рабочей области заполните параметры шаблона данными для существующей рабочей области.

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      privateEndpointType="AutoApproval"

Использование новой виртуальной сети

Чтобы развернуть ресурс за новой виртуальной сетью, задайте для параметра vnetOption значение new (Новая) и укажите параметры виртуальной сети для соответствующего ресурса. В развертывании ниже показано, как развернуть рабочую область с ресурсом учетной записи хранения за новой виртуальной сетью.

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="new" \
      vnetName="examplevnet" \
      storageAccountBehindVNet="true"
      privateEndpointType="AutoApproval"

Кроме того, вы можете развернуть за виртуальной сетью все зависимые ресурсы или некоторую их часть.

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="new" \
      vnetName="examplevnet" \
      storageAccountBehindVNet="true" \
      keyVaultBehindVNet="true" \
      containerRegistryBehindVNet="true" \
      containerRegistryOption="new" \
      containerRegistrySku="Premium"
      privateEndpointType="AutoApproval"

Использование существующей виртуальной сети и ресурсов

Чтобы развернуть рабочую область с существующими связанными ресурсами, задайте для параметра vnetOption значение existing (Существующая) и настройте параметры подсети. При этом конечные точки службы в виртуальной сети необходимо создать для каждого ресурса перед развертыванием. Как и в случае с развертываниями новых виртуальных сетей, один или несколько ресурсов могут быть расположены за виртуальной сетью.

Важно!

Подсеть должна иметь конечную точку службы Microsoft.Storage

Важно!

Подсети не допускают создание частных конечных точек. Отключите закрытую конечную точку, чтобы включить подсеть.

  1. Включите конечные точки службы для ресурсов.

    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.Storage"
    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.KeyVault"
    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.ContainerRegistry"
    
  2. Развертывание рабочей области

    az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="existing" \
      vnetName="examplevnet" \
      vnetResourceGroupName="examplegroup" \
      storageAccountBehindVNet="true" \
      keyVaultBehindVNet="true" \
      containerRegistryBehindVNet="true" \
      containerRegistryOption="new" \
      containerRegistrySku="Premium" \
      subnetName="examplesubnet" \
      subnetOption="existing"
      privateEndpointType="AutoApproval"
    

Использование портала Azure

  1. Выполните инструкции из раздела Развертывание ресурсов с помощью настраиваемого шаблона. Когда откроется экран Выбор шаблона выберите запись quickstarts (краткие руководства). Выберите ссылку "Щелкните здесь, чтобы открыть репозиторий шаблонов", когда она появится. Эта ссылка ведет к каталогу quickstarts в репозитории шаблонов быстрого запуска Azure.

  2. В списке шаблонов быстрого запуска выберите microsoft.machinelearningservices. Наконец, нажмите Deploy to Azure.

  3. Когда откроется шаблон, укажите следующие обязательные сведения и другие параметры в зависимости от сценария развертывания.

    • Подписка. Выберите подписку Azure, используемую для этих ресурсов.
    • Группа ресурсов: выберите или создайте группу ресурсов для хранения служб.
    • Регион: выберите регион Azure, где будут создаваться ресурсы.
    • Имя рабочей области: имя, которое будет использоваться для созданной рабочей области Машинное обучение Azure. Для имени рабочего пространства допускается длина от 3 до 33 символов. Имя может содержать только буквы, цифры и дефис ("-").
    • Расположение. Выберите расположение, в котором будут созданы ресурсы.
  4. Выберите Review + create (Просмотреть и создать).

  5. На экране Просмотр и создание подтвердите приведенные условия и щелкните Создать.

Дополнительные сведения см. в разделе Развертывание ресурсов с помощью настраиваемого шаблона.

Устранение неполадок

Ошибки поставщика ресурсов

При создании рабочей области машинного обучения Azure или ресурса, используемого рабочей областью, может появиться сообщение об ошибке, аналогичное приведенному ниже.

  • No registered resource provider found for location {location}
  • The subscription is not registered to use namespace {resource-provider-namespace}

Многие, но не все поставщики ресурсов регистрируются автоматически. При появлении этого сообщения необходимо зарегистрировать упомянутый поставщик.

В следующей таблице содержится список поставщиков ресурсов, необходимых для Машинного обучения Azure:

Поставщик ресурсов Роль
Microsoft.MachineLearningServices Создание рабочей области машинного обучения Azure.
Microsoft.Storage Учетная запись службы хранилища Azure используется в качестве хранилища данных по умолчанию для рабочей области.
Microsoft.ContainerRegistry Реестр контейнеров Azure используется рабочей областью для создания образов Docker.
Microsoft.KeyVault Azure Key Vault используется рабочей областью для хранения секретов.
Microsoft.Notebooks Интегрированные записные книжки в вычислительном экземпляре машинного обучения Azure.
Microsoft.ContainerService Если вы планируете развертывать обученные модели в службах Azure Kubernetes.

Если вы планируете использовать ключ, управляемый клиентом, для машинного обучения Azure, необходимо зарегистрировать следующих поставщиков услуг:

Поставщик ресурсов Роль
Microsoft.DocumentDB Экземпляр Azure CosmosDB, который регистрирует метаданные для рабочей области.
Microsoft.Search Служба "Поиск Azure" предоставляет возможности индексирования для рабочей области.

Если вы планируете использовать управляемую виртуальную сеть с Машинное обучение Azure, необходимо зарегистрировать поставщика ресурсов Microsoft.Network. Этот поставщик ресурсов используется рабочей областью при создании частных конечных точек для управляемой виртуальной сети.

Сведения о регистрации поставщиков ресурсов см. в статье Устранение ошибок регистрации поставщика ресурсов.

Политики доступа Azure Key Vault и шаблоны Azure Resource Manager

Шаблон Azure Resource Manager можно многократно применять для создания рабочей области и связанных с ней ресурсов (в том числе Azure Key Vault). Например, шаблон можно многократно применять с одинаковыми параметрами в составе конвейера непрерывной интеграции и развертывания.

Большинство операций создания ресурсов с использованием шаблонов являются идемпотентными, но Key Vault удаляет политики доступа каждый раз при использовании шаблона. Очистка политик доступа нарушает доступ к Key Vault из любой существующей рабочей области, которая его использует. Например, могут не выполняться функции остановки и создания для виртуальных машин Записных книжек Azure.

Чтобы избежать этой проблемы, примените один из следующих подходов.

  • Не развертывайте шаблон более одного раза с одинаковыми параметрами. Удаляйте существующие ресурсы перед тем, как создавать их повторно с помощью шаблона.

  • Изучите политики доступа к Key Vault, а затем примените их для настройки свойства accessPolicies в шаблоне. Для просмотра политик доступа можно выполнить следующую команду Azure CLI.

    az keyvault show --name mykeyvault --resource-group myresourcegroup --query properties.accessPolicies
    

    Дополнительные сведения об использовании раздела accessPolicies шаблона см. в разделе Объект AccessPolicyEntry справочника.

  • Проверьте, существует ли ресурс Key Vault. Если существует, его не следует создавать повторно с помощью шаблона. Например, внесите следующие изменения в шаблон, чтобы использовать существующий ресурс Key Vault вместо создания нового:

    • Добавьте параметр, который принимает значение идентификатора существующего ресурса Key Vault:

      "keyVaultId":{
        "type": "string",
        "metadata": {
          "description": "Specify the existing Key Vault ID."
        }
      }
      
    • Удалите раздел, который создает ресурс Key Vault:

      {
        "type": "Microsoft.KeyVault/vaults",
        "apiVersion": "2018-02-14",
        "name": "[variables('keyVaultName')]",
        "location": "[parameters('location')]",
        "properties": {
          "tenantId": "[variables('tenantId')]",
          "sku": {
            "name": "standard",
            "family": "A"
          },
          "accessPolicies": [
          ]
        }
      },
      
    • Удалите строку "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]", из раздела dependsOn для рабочей области. Кроме того, измените запись keyVault в разделе properties для рабочей области, включив в нее ссылку на параметр keyVaultId:

      {
        "type": "Microsoft.MachineLearningServices/workspaces",
        "apiVersion": "2019-11-01",
        "name": "[parameters('workspaceName')]",
        "location": "[parameters('location')]",
        "dependsOn": [
          "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
          "[resourceId('Microsoft.Insights/components', variables('applicationInsightsName'))]"
        ],
        "identity": {
          "type": "systemAssigned"
        },
        "sku": {
          "tier": "[parameters('sku')]",
          "name": "[parameters('sku')]"
        },
        "properties": {
          "friendlyName": "[parameters('workspaceName')]",
          "keyVault": "[parameters('keyVaultId')]",
          "applicationInsights": "[resourceId('Microsoft.Insights/components',variables('applicationInsightsName'))]",
          "storageAccount": "[resourceId('Microsoft.Storage/storageAccounts/',variables('storageAccountName'))]"
        }
      }
      

    После этих изменений вы сможете указать идентификатор существующего ресурса Key Vault при запуске шаблона. Тогда этот шаблон применит указанное хранилище ключей, присвоив его идентификатор свойству keyVault рабочей области.

    Чтобы получить идентификатор Key Vault, можно ссылаться на выходные данные исходного задания шаблона или использовать Azure CLI. Следующая команда является примером использования Azure CLI для получения идентификатора ресурса Key Vault.

    az keyvault show --name mykeyvault --resource-group myresourcegroup --query id
    

    Эта команда возвращает значение следующего вида:

    /subscriptions/{subscription-guid}/resourceGroups/myresourcegroup/providers/Microsoft.KeyVault/vaults/mykeyvault
    

Следующие шаги