Развертывание расширения Машинное обучение Azure в кластере Kubernetes с поддержкой Azure Kubernetes Service (AKS) или Azure Arc

Чтобы кластер Azure Kubernetes Service (AKS) или кластер Kubernetes с поддержкой Azure Arc мог выполнять задания обучения или задачи инференса, сначала установите расширение Машинное обучение Azure. Расширение Машинное обучение Azure — это стандартное расширение кластера для AKS и расширение кластера для Kubernetes с поддержкой Azure Arc. Вы можете управлять жизненным циклом с помощью Azure CLI k8s-extension.

В этой статье вы узнаете:

  • Предварительные требования
  • Ограничения
  • Просмотр параметров конфигурации расширения Машинного обучения Azure
  • Варианты развертывания расширения Машинного обучения Azure
  • Подтверждение развертывания расширения Машинного обучения Azure
  • Знакомство с компонентами расширения Машинного обучения Azure
  • Управление расширением Машинного обучения Azure

Предварительные требования

Ограничения

Просмотр параметров конфигурации расширения Машинного обучения Azure

Используйте команду Azure CLI az k8s-extension create для развертывания расширения Машинное обучение Azure. Команда az k8s-extension create принимает настройки конфигурации в виде разделённых пробелами пар key=value через параметр --config или --config-protected. В следующей таблице перечислены доступные параметры конфигурации, которые можно указать во время развертывания.

Имя ключа настройки конфигурации Описание Обучение Инференс Обучение и вывод
enableTraining True или False, по умолчанию False. Необходимо установить значение True для развертывания расширения Машинное обучение Azure с поддержкой обучения моделей машинного обучения и пакетного оценивания. Н/П
enableInference True или False, по умолчанию False. Должно быть задано значение True для развертывания расширения Машинное обучение Azure с поддержкой логического вывода модели. Н/П
allowInsecureConnections True или False, по умолчанию False. Можно установить значение True, чтобы использовать HTTP-эндпоинты для инференса в целях разработки или тестирования. Н/П Необязательно Необязательно
inferenceRouterServiceType loadBalancer, nodePort или clusterIP. Обязательно, если enableInference=True. Н/П
internalLoadBalancerProvider Сейчас эта конфигурация может быть применена только к кластеру Службы Azure Kubernetes (AKS). Задайте значение azure, чтобы разрешить маршрутизатору вывода использовать внутреннюю подсистему балансировки нагрузки. Н/П Необязательно Необязательно
sslSecret Имя секрета Kubernetes в пространстве имен azureml. Этот параметр конфигурации используется для хранения cert.pem (сертификата TLS/SSL в кодировке PEM) и key.pem (ключа TLS/SSL в кодировке PEM), которые необходимы для поддержки HTTPS-конечных точек инференса, если для allowInsecureConnections задано значение False. Пример определения sslSecretYAML см. в разделе "Настройка sslSecret". Используйте эту конфигурацию или комбинацию защищённых параметров конфигурации sslCertPemFile и sslKeyPemFile. Н/П Необязательно Необязательно
sslCname Tls/SSL CNAME используется конечной точкой HTTPS вывода. Обязательно, если allowInsecureConnections=False. Н/П Необязательно Необязательно
inferenceRouterHA True или False, по умолчанию True. По умолчанию расширение Машинное обучение Azure развертывает три реплики маршрутизатора инференса для обеспечения высокой доступности, что требует наличия в кластере как минимум трех рабочих узлов. Установите значение False, если в вашем кластере менее трёх рабочих узлов; в этом случае развертывается только одна служба маршрутизации вывода. Н/П Необязательно Необязательно
nodeSelector По умолчанию развернутые ресурсы kubernetes и рабочие нагрузки машинного обучения развертываются случайным образом на одном или нескольких узлах кластера, а ресурсы DaemonSet развертываются на всех узлах. Если вы хотите ограничить развертывание расширения и рабочие нагрузки обучения и вывода определёнными узлами с метками key1=value1 и key2=value2, используйте nodeSelector.key1=value1 и nodeSelector.key2=value2 соответственно. Необязательно Необязательно Необязательно
installNvidiaDevicePlugin True или False, по умолчанию False. Для задач машинного обучения на графических процессорах NVIDIA требуется NVIDIA Device Plugin. По умолчанию развертывание расширения Машинное обучение Azure не устанавливает плагин устройств NVIDIA, независимо от того, есть ли в кластере Kubernetes графические процессоры (GPU) или нет. Для установки пользователь может указать для этого параметра значение True, но обязательно выполните необходимые требования. Необязательно Необязательно Необязательно
installPromOp True или False, по умолчанию True. Расширению Машинное обучение Azure требуется оператор Prometheus для управления Prometheus. Установите значение False, чтобы повторно использовать существующий оператор Prometheus. Дополнительные сведения об повторном использовании существующего оператора prometheus см. в статье о повторном использовании оператора prometheus Необязательно Необязательно Необязательно
installVolcano True или False, по умолчанию True. Расширению Машинное обучение Azure требуется планировщик Volcano для планирования задания. Установите значение в False, чтобы повторно использовать существующий планировщик Volcano. Дополнительные сведения об повторном использовании существующего планировщика вулканов см. в статье о повторном использовании планировщика вулканов Необязательно Н/П Необязательно
installDcgmExporter True или False, по умолчанию False. Dcgm-exporter может публиковать метрики GPU для рабочих нагрузок Машинное обучение Azure, которые можно отслеживать в портале Azure. Задайте для параметра installDcgmExporter значение True, чтобы установить dcgm-exporter. Но если вы хотите использовать собственный dcgm-экспортер, см . статью "Экспортер DCGM" Необязательно Необязательно Необязательно
Имя ключа защищенных параметров конфигурации Описание Обучение Инференс Обучение и вывод
sslCertPemFile, sslKeyPemFile Путь к TLS/SSL-сертификату и файлу ключа (в кодировке PEM), необходимый для развертывания расширения Машинное обучение Azure с поддержкой конечной точки HTTPS для вывода, если для allowInsecureConnections задано значение False. Примечание. PEM-файл, защищенный парольной фразой, не поддерживается. Н/П Необязательно Необязательно

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

  • Для задания обучения и задачи пакетного вывода укажите enableTraining=True.
  • Только для рабочей нагрузки вывода укажите enableInference=True.
  • Для всех видов рабочей нагрузки машинного обучения укажите enableTraining=True и enableInference=True.

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

  • Для поддержки инференса в реальном времени требуется служба маршрутизатора azureml-fe, и необходимо указать параметр конфигурации inferenceRouterServiceType для azureml-fe. azureml-fe можно развернуть с использованием одного из следующих вариантов inferenceRouterServiceType:
    • Введите loadBalancer. Предоставляет внешний доступ к azureml-fe с помощью подсистемы балансировки нагрузки поставщика облачных служб. Чтобы указать это значение, убедитесь, что ваш кластер поддерживает создание балансировщика нагрузки. Обратите внимание, что большинство локальных кластеров Kubernetes могут не поддерживать внешнюю подсистему балансировки нагрузки.
    • Введите nodePort. Предоставляет доступ к azureml-fe по IP-адресу каждого узла через статический порт. Вы можете получить доступ к azureml-fe извне кластера, запросив <NodeIP>:<NodePort>. Использование nodePort также позволяет настроить собственное решение балансировки нагрузки и завершение сеанса TLS/SSL для azureml-fe. Дополнительные сведения о том, как настроить собственный ingress, см. в разделе Интеграция другого ingress-контроллера с расширением Машинное обучение Azure через HTTP или HTTPS.
    • Введите clusterIP. Предоставляет доступ к azureml-fe по внутреннему IP-адресу кластера и делает azureml-fe доступным только из кластера. Чтобы azureml-fe мог обслуживать запросы вывода, поступающие из-за пределов кластера, необходимо настроить собственное решение балансировки нагрузки и завершение сеанса TLS/SSL для azureml-fe. Дополнительные сведения о том, как настроить собственный Ingress, см. в разделе Интеграция других контроллеров Ingress с расширением Машинное обучение Azure через HTTP или HTTPS.
  • Чтобы обеспечить высокую доступность службы маршрутизации azureml-fe, развертывание расширения Машинное обучение Azure по умолчанию создает три реплики azureml-fe для кластеров, содержащих три или более узла. Если кластер имеет менее 3 узлов, задайте значение inferenceRouterHA=False.
  • Можно также использовать протокол HTTPS для ограничения доступа к конечным точкам модели и защиты данных, отправляемых клиентами. Для этого необходимо указать либо параметр конфигурации sslSecret, либо комбинацию параметров конфигурации sslKeyPemFile и sslCertPemFile, защищённых конфигурацией.
  • По умолчанию развертывание расширения Машинное обучение Azure ожидает параметров конфигурации для поддержки HTTPS. Для разработки или тестирования поддержка HTTP удобно обеспечивается с помощью параметра конфигурации allowInsecureConnections=True.

Развертывание расширения Машинного обучения Azure: примеры с использованием CLI и портала Azure

Чтобы развернуть расширение Машинное обучение Azure с помощью интерфейса командной строки, используйте команду az k8s-extension create и укажите значения обязательных параметров.

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

  • Использовать кластер AKS в Azure для быстрого подтверждения концепции выполнения всех видов рабочих нагрузок машинного обучения, например для запуска заданий обучения или развертывания моделей в виде сетевых и пакетных конечных точек

    Для развертывания расширений Машинное обучение Azure в кластере AKS укажите значение managedClusters для параметра --cluster-type. Выполните следующую команду Azure CLI, чтобы развернуть расширение Машинное обучение Azure:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=loadBalancer allowInsecureConnections=True inferenceRouterHA=False --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Используйте кластер Kubernetes с поддержкой Azure Arc за пределами Azure для быстрого proof-of-concept и только для выполнения заданий обучения

    Для развертывания расширения Машинное обучение Azure в кластере Kubernetes с поддержкой Azure Arc-enabled Kubernetes укажите значение connectedClusters для параметра --cluster-type. Выполните следующую команду Azure CLI, чтобы развернуть расширение Машинное обучение Azure:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Включите кластер AKS в Azure для рабочих нагрузок производственного обучения и вывода Для развертывания расширения Машинное обучение Azure в AKS укажите значение managedClusters для параметра --cluster-type. Предположим, что кластер имеет более трех узлов, и вы используете общедоступную подсистему балансировки нагрузки Azure и HTTPS для поддержки рабочей нагрузки вывода. Выполните следующую команду Azure CLI, чтобы развернуть расширение Машинное обучение Azure:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=loadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Активировать кластер Kubernetes с поддержкой Azure Arc в любом месте для производственной нагрузки обучения и инференса с использованием GPU NVIDIA

    При развертывании расширения Машинное обучение Azure в кластере Azure Arc-enabled Kubernetes укажите значение connectedClusters для параметра --cluster-type. Если кластер имеет более трех узлов, вы используете тип службы NodePort и HTTPS для поддержки рабочей нагрузки вывода, выполните следующую команду Azure CLI для развертывания расширения Машинное обучение Azure:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=nodePort sslCname=<ssl cname> installNvidiaDevicePlugin=True installDcgmExporter=True --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    

Подтверждение развертывания расширения Машинного обучения Azure

  1. Выполните соответствующую команду CLI, чтобы проверить сведения о расширении машинного обучения Azure:

    AKS

    az k8s-extension show --name <extension-name> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <resource-group>
    

    Kubernetes с поддержкой Azure Arc

    az k8s-extension show --name <extension-name> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group>
    
  2. В ответе найдите "name" и "provisioningState": "Succeeded". В первые несколько минут может отображаться "provisioningState": "Pending".

  3. Если значение provisioningState — Succeeded, выполните следующую команду на своей машине, используя файл kubeconfig, указывающий на ваш кластер, чтобы убедиться, что все поды в пространстве имен azureml находятся в состоянии Running:

     kubectl get pods -n azureml
    

Знакомство с компонентом расширения Машинного обучения Azure

По завершении развертывания расширения Машинное обучение Azure используйте kubectl get deployments -n azureml, чтобы просмотреть список ресурсов, созданных в кластере. Список обычно состоит из подмножества следующих ресурсов в зависимости от заданных параметров конфигурации.

Имя ресурса Тип ресурса Обучение Инференс Обучение и вывод Описание Обмен данными с облаком
ретрансляторный сервер Развертывание Kubernetes При развертывании создается сервер ретрансляции только для кластеров Kubernetes с поддержкой Azure Arc, а не для кластеров AKS. Сервер ретрансляции работает с Azure Relay для взаимодействия с облачными службами. Получение запроса на создание задания, развертывание модели из облачной службы; синхронизация состояния задания с облачной службой.
шлюз Развертывание Kubernetes Шлюз используется для взаимодействия и обмена данными. Отправка сведений об узлах и ресурсах кластера в облачные службы.
AML-оператор Развертывание Kubernetes Н/П Управляйте жизненным циклом задач обучения. Обмен токенами с облачной службой токенов для проверки подлинности и авторизации Реестра контейнеров Azure.
менеджер контроллера метрик Развертывание Kubernetes Управление конфигурацией для Prometheus Н/П
{EXTENSION-NAME}-kube-state-metrics Развертывание Kubernetes Экспортируйте метрики, связанные с кластером, в Prometheus. Н/П
{EXTENSION-NAME}-prometheus-operator Развертывание Kubernetes Необязательно Необязательно Необязательно Обеспечить нативное для Kubernetes развертывание и управление Prometheus и связанными компонентами мониторинга. Н/П
amlarc-identity-controller Развертывание Kubernetes Н/П Запрос и продление токена Azure Blob/Реестра контейнеров Azure через управляемое удостоверение. Обмен токенами с облачной службой токенов для проверки подлинности и авторизации Реестра контейнеров Azure и BLOB-объекта Azure, используемых при выводе или развертывании модели.
amlarc-identity-proxy Развертывание Kubernetes Н/П Запрос и обновление токена Azure Blob/Реестр контейнеров Azure с использованием управляемого удостоверения. Обмен токенами с облачной службой токенов для аутентификации и авторизации Реестр контейнеров Azure и Azure Blob, используемых при инференсе или развертывании модели.
azureml-fe-v2 Развертывание Kubernetes Н/П Интерфейсный компонент, который направляет входящие запросы вывода в развернутые службы. Отправить журналы службы в Azure Blob.
инференс-оператор-менеджер контроллеров Развертывание Kubernetes Н/П Управление жизненным циклом конечных точек вывода. Н/П
вулкан-прием Развертывание Kubernetes Необязательно Н/П Необязательно Веб-перехватчик приема Volcano. Н/П
контроллеры вулканов Развертывание Kubernetes Необязательно Н/П Необязательно Управление жизненным циклом подов заданий обучения Машинное обучение Azure. Н/П
планировщик вулканов Развертывание Kubernetes Необязательно Н/П Необязательно Используется для планирования заданий кластера. Н/П
fluent-bit Набор управляющих программ Kubernetes Соберите системный журнал компонентов. Отправка системного журнала компонентов в облако.
{EXTENSION-NAME}-dcgm-exporter Набор управляющих программ Kubernetes Необязательно Необязательно Необязательно dcgm-exporter предоставляет метрики GPU для Prometheus. Н/П
nvidia-device-plugin-daemonset Набор управляющих программ Kubernetes Необязательно Необязательно Необязательно nvidia-device-plugin-daemonset делает графические процессоры (GPU) доступными на каждом узле вашего кластера Н/П
prometheus-prom-prometheus StatefulSet Kubernetes Сбор и отправка метрик задания в облако. Отправка метрик задания, таких как использование ЦП, GPU и памяти, в облако.

Внимание

  • Ресурс Azure Relay находится в той же группе ресурсов, что и ресурс кластера Arc. Он используется для взаимодействия с кластером Kubernetes. Изменение этого объекта нарушает работу подключенных целевых вычислительных ресурсов.
  • По умолчанию ресурсы развертывания развертываются случайным образом на одном или нескольких узлах кластера, а ресурсы управляющей программы развертываются на всех узлах. Чтобы ограничить развертывание расширения определенными узлами, используйте nodeSelector параметр конфигурации, описанный в таблице параметров конфигурации.

Примечание.

  • {EXTENSION-NAME}: это имя расширения, указанное az k8s-extension create --name с помощью команды CLI.

Управление расширением Машинного обучения Azure

Обновление, перечисление, отображение и удаление расширения Машинное обучение Azure.

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