Поделиться через


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

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

Дополнительные сведения см. в статье "Развертывание приложения с помощью шаблона Azure Resource Manager".

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

Ограничения

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

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

    Внимание

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

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

    Совет

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

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

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

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

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

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

Сведения о шаблоне Resource Manager

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

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

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

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

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

  • Параметр location, определяющий место создания ресурсов.

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

  • Это workspaceName, которое является понятным именем рабочей области для Машинного обучения в 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"

После завершения развертывания убедитесь, что рабочая область существует с помощью Azure CLI. Команда az ml workspace show требует установки расширения Машинного обучения Azure (az extension add --name ml) и возвращает provisioningState типа Succeeded после завершения развертывания.

az ml workspace show \
  --name "exampleworkspace" \
  --resource-group "examplegroup" \
  --output table

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

  • workspaceName: задает понятное имя рабочей области Машинного обучения Azure.
  • location: указывает регион для метаданных рабочей области и зависимых служб.
  • storageAccountOption: выберите new или existing, чтобы контролировать, подготавливает ли шаблон хранилище.
  • storageAccountName: укажите имя при ссылке на существующую учетную запись хранения.
  • privateEndpointType: Установите значение AutoApproval или ManualApproval при развертывании с частными конечными точками.
  • vnetOption: Выберите new или existing, чтобы решить, как рабочая область подключается к виртуальной сети.
  • vnetName: укажите имя виртуальной сети при интеграции с виртуальной сетью.

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

Внимание

Если вы хотите использовать существующую учетную запись хранения Azure, это не может быть учетная запись уровня "Премиум" (Premium_LRS или Premium_GRS). Он также не может иметь иерархическое пространство имен (которое используется с Azure Data Lake Storage 2-го поколения). Ни хранилище класса 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 для получения ключей, управляемых клиентом. Управляемые клиентом ключи используются для создания нового экземпляра Azure Cosmos DB для рабочей области.

Внимание

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

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

Внимание

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

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

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

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

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

    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 Machine Learning, если вы еще не создали кластеры в своей подписке. Если вы ранее создали кластер в подписке, создайте запрос в службу поддержки для включения шифрования временного диска для ваших вычислительных кластеров.

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

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

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

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

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

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

Внимание

Для реестра контейнеров поддерживается только номер SKU класса Premium.

Внимание

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

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

Если ваши связанные ресурсы не находятся за виртуальной сетью, вы можете установить параметр privateEndpointType на AutoApproval или 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. Выполните действия, описанные в разделе "Развертывание ресурсов из пользовательского шаблона". Когда вы перейдете на панель пользовательского развертывания, выберите шаблон быстрого запуска.

  2. В списке шаблонов Quickstart выберите quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet. Наконец, выберите "Выбрать шаблон".

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

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

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

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

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

При создании рабочей области Машинного обучения 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 Cosmos DB записывает метаданные для рабочей области.
Microsoft.Search Служба "Поиск Azure" предоставляет возможности индексирования для рабочей области.

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

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

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

При использовании вами шаблона Resource Manager для создания рабочей области и связанных ресурсов (включая 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:

      "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 при запуске шаблона. Затем шаблон повторно использует хранилище ключей, задавая в свойство рабочей области его идентификатор.

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

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

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

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