Отслеживайте эксперименты ML Azure Databricks с помощью MLflow и Машинного обучения Azure

MLflow — это библиотека с открытым кодом для управления жизненным циклом экспериментов машинного обучения. Вы можете использовать MLflow для интеграции Azure Databricks с Машинное обучение Azure, чтобы обеспечить лучшие возможности обоих продуктов.

В этой статье вы узнаете следующее:

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

Примеры записных книжек

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

Установка библиотек

Чтобы установить библиотеки в кластере, перейдите на вкладку библиотек и нажмите кнопку Install New (Установить новую).

mlflow with azure databricks

В поле Пакет введите azureml-mlflow и нажмите кнопку "Установить". Повторите этот шаг, чтобы установить другие дополнительные пакеты в кластер для своего эксперимента, если это требуется.

Azure DB install mlflow library

Отслеживание выполнений Azure Databricks с использованием MLflow

Azure Databricks можно настроить для отслеживания экспериментов с помощью MLflow в двух режимах:

По умолчанию при подключении рабочей области Azure Databricks настраивается двойное отслеживание.

Двойное отслеживание в Azure Databricks и Машинном обучении Azure

Связав рабочую область ADB с рабочей областью Машинного обучения Azure, вы сможете одновременно отслеживать данные эксперимента в рабочей области Машинного обучения Azure и рабочей области Azure Databricks. Это называется двойным отслеживанием.

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

Двойное отслеживание не поддерживается в Microsoft Azure, работающей на данный момент 21Vianet. Настройте монопольное отслеживание с помощью рабочей области Машинного обучения Azure.

Чтобы связать рабочую область ADB с новой или существующей рабочей областью Машинного обучения Azure, выполните следующие действия.

  1. Войдите на портал Azure.
  2. Перейдите на страницу обзора рабочей области ADB.
  3. Нажмите кнопку Link Azure Machine Learning workspace (Связать с рабочей областью Машинного обучения Azure), расположенную внизу справа.

Link Azure DB and Azure Machine Learning workspaces

После связывания рабочей области Azure Databricks с рабочей областью службы "Машинное обучение Azure" отслеживание MLflow автоматически настраивается для отслеживания в следующих местах:

  • в связанной рабочей области Машинного обучения Azure;
  • в вашей исходной рабочей области ADB.

После этого MLflow можно использовать в Azure Databricks так же, как и раньше. В следующем примере задается имя эксперимента, как это обычно делается в Azure Databricks, и начинается регистрация некоторых параметров.

import mlflow 

experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}" 
mlflow.set_experiment(experimentName) 

with mlflow.start_run():
   mlflow.log_param('epochs', 20)
   pass

Примечание.

В отличие от отслеживания, реестры моделей не поддерживают одновременную регистрацию моделей как в Машинном обучении Azure, так и в Azure Databricks. Необходимо использовать либо одно, либо другое. Дополнительные сведения см. в разделе Регистрация моделей в реестре с помощью MLflow.

Отслеживание исключительно в рабочей области Машинного обучения Azure

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

Необходимо настроить URI отслеживания MLflow, чтобы он указывал исключительно на Машинное обучение Azure, как показано в следующем примере:

Настройка URI отслеживания

  1. Получите URI отслеживания для рабочей области:

    ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

    1. Войдите и настройте рабочую область:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. URI отслеживания можно получить с помощью az ml workspace команды:

      az ml workspace show --query mlflow_tracking_uri
      
  2. Настройка URI отслеживания:

    Затем метод set_tracking_uri() указывает этот URI в качестве URI отслеживания MLFLow.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Совет

    При работе с общими средами, например в кластере Azure Databricks, кластере Azure Synapse Analytics или аналогичном, рекомендуется настроить переменную MLFLOW_TRACKING_URI среды на уровне кластера, чтобы автоматически настроить URI отслеживания MLflow, чтобы указывать на Машинное обучение Azure для всех сеансов, выполняемых в кластере, а не для каждого сеанса.

    Configure the environment variables in an Azure Databricks cluster

    После настройки переменной среды все эксперименты, выполняемые в таком кластере, будут отслеживаться в Машинное обучение Azure.

Настройка проверки подлинности

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

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

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

Интерактивная проверка подлинности браузера блокирует выполнение кода при запросе учетных данных. Это не подходящий вариант для проверки подлинности в автоматических средах, таких как задания обучения. Рекомендуется настроить другой режим проверки подлинности.

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

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

Совет

При работе с общими средами рекомендуется настроить эти переменные среды на вычислительных ресурсах. Рекомендуется управлять ими в качестве секретов в экземпляре Azure Key Vault по возможности. Например, в Azure Databricks можно использовать секреты в переменных среды, как показано в конфигурации кластера. AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}} См . ссылку на секрет в переменной среды, чтобы узнать, как это сделать в Azure Databricks или обратиться к аналогичной документации на платформе.

Имена экспериментов в Машинном обучении Azure

Если MLflow настроен исключительно на отслеживание экспериментов в рабочей области Машинного обучения Azure, соглашение об именовании эксперимента должно соответствовать соглашению, используемому Машинным обучением Azure. В Azure Databricks экспериментам присваивается имя с указанием пути сохранения эксперимента, например /Users/alice@contoso.com/iris-classifier. Однако в Машинном обучении Azure необходимо указать имя эксперимента напрямую. Как и в предыдущем примере, тот же эксперимент будет назван непосредственно iris-classifier:

mlflow.set_experiment(experiment_name="experiment-name")

Отслеживание параметров, метрик и артефактов

После этого MLflow можно использовать в Azure Databricks так же, как и раньше. Дополнительные сведения см. в разделе "Журнал и просмотр метрик" и файлов журналов.

Ведение журналов моделей с помощью MLflow

После обучения модели можно вести ее журнал на сервере отслеживания с помощью метода mlflow.<model_flavor>.log_model(). <model_flavor> относится к структуре, связанной с моделью. Узнайте, какие разновидности модели поддерживаются. В следующем примере регистрируется модель, созданная с помощью библиотеки Spark MLLib:

mlflow.spark.log_model(model, artifact_path = "model")

Стоит отметить, что вариант spark не означает, что мы обучаем модель в кластере Spark. Этот вариант связан с используемой платформой обучения (вы можете прекрасно обучать модель с помощью TensorFlow на Spark, и, следовательно, вариантом для использования будет tensorflow).

Ведение журналов моделей осуществляется внутри отслеживаемого запуска. Это означает, что модели доступны как в Azure Databricks, так и в Машинном обучении Azure (по умолчанию) или исключительно в Машинном обучении Azure, если вы настроили URI отслеживания так, чтобы он указывал на него.

Важно!

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

Регистрация моделей в реестре с помощью MLflow

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

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

mlflow.spark.log_model(model, artifact_path = "model", 
                       registered_model_name = 'model_name')  
  • Если зарегистрированная модель с указанным именем не существует, этот метод регистрирует новую модель, создает для нее версию 1 и возвращает объект ModelVersion MLflow.

  • Если зарегистрированная модель с таким именем уже существует, метод создает новую версию модели и возвращает объект Version.

Использование реестра Машинного обучения Azure с MLflow

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

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

mlflow.set_registry_uri(azureml_mlflow_uri)

Примечание.

Значение azureml_mlflow_uri было получено так же, как это было продемонстрировано в разделе Настройка отслеживания MLflow для отслеживания только в рабочей области Машинного обучения Azure

Полный пример этого сценария проверка примеры моделей обучения в Azure Databricks и их развертывание в Машинное обучение Azure.

Развертывание и использование моделей, зарегистрированных в Машинном обучении Azure

Модели, зарегистрированные в службе "Машинное обучение Azure" с помощью MLflow, могут использоваться следующим образом:

  • Конечная точка Машинного обучения Azure (для использования в режиме реального времени и в пакетном режиме): это развертывание позволяет использовать возможности развертывания Машинного обучения Azure для получения вывода как в режиме реального времени, так и в пакетном режиме в Экземплярах контейнеров Azure (ACI), Azure Kubernetes (AKS) или управляемых конечных точках вывода (MIR).

  • Объекты модели MLFlow или определяемые пользователем функции Pandas, которые можно использовать в записных книжках Azure Databricks в конвейерах потоковой передачи или пакетных конвейерах.

Развертывание моделей в конечных точках Машинного обучения Azure

Вы можете использовать подключаемый модуль azureml-mlflow для развертывания модели в рабочей области Машинного обучения Azure. Подробную информацию о том, как развернуть модели MLflow в разных целевых объектах, смотрите на странице Развертывание моделей MLflow.

Важно!

Чтобы развернуть модели, их необходимо зарегистрировать в реестре Машинного обучения Azure. Если ваши модели зарегистрированы в экземпляре MLflow в Azure Databricks, вам придется снова зарегистрировать их в Машинном обучении Azure. Если это так, проверка примеры моделей обучения в Azure Databricks и их развертывание на Машинное обучение Azure

Развертывание моделей в ADB для пакетной оценки с использованием пользовательских функций

Для пакетной оценки можно выбрать кластеры Azure Databricks. Используя Mlflow, вы можете разрешить любую модель из реестра, к которому вы подключены. Обычно используется один из следующих двух методов:

  • Если модель была обучена и создана с помощью библиотек Spark (например MLLib, используется mlflow.pyfunc.spark_udf для загрузки модели и используется в качестве UDF Spark Pandas для оценки новых данных.
  • Если модель не была обучена или создана с помощью библиотек Spark, либо для mlflow.pyfunc.load_modelmlflow.<flavor>.load_model загрузки модели в драйвере кластера. Обратите внимание, что таким образом все параллельные или рабочие распределения, которые необходимо выполнить в кластере, должны быть организованы вами. Кроме того, обратите внимание, что MLflow не устанавливает библиотеку, которую требуется запустить. Эти библиотеки необходимо установить в кластере перед его запуском.

В следующем примере показано, как загрузить модель из реестра с именем uci-heart-classifier и использовать ее в качестве UDF Spark Pandas для оценки новых данных.

from pyspark.sql.types import ArrayType, FloatType 

model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

Совет

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

После загрузки модели можно использовать для оценки новых данных:

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

Очистка ресурсов

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

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

  1. На портале Azure выберите Группы ресурсов в левой части окна.

    Delete in the Azure portal

  2. В списке выберите созданную группу ресурсов.

  3. Выберите команду Удалить группу ресурсов.

  4. Введите имя группы ресурсов. Затем выберите Удалить.

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