Отслеживайте эксперименты ML Azure Databricks с помощью MLflow и Машинного обучения Azure
MLflow — это библиотека с открытым кодом для управления жизненным циклом экспериментов машинного обучения. Вы можете использовать MLflow для интеграции Azure Databricks с Машинное обучение Azure, чтобы обеспечить лучшие возможности обоих продуктов.
В этой статье вы узнаете следующее:
- Необходимые библиотеки, необходимые для использования MLflow с Azure Databricks и Машинное обучение Azure.
- Как отслеживать запуск Azure Databricks с помощью MLflow в Машинное обучение Azure.
- Как регистрировать модели с помощью MLflow, чтобы получить их зарегистрированы в Машинное обучение Azure.
- Развертывание и использование моделей, зарегистрированных в Машинное обучение Azure.
Необходимые компоненты
- Установите пакет
azureml-mlflow
, который обрабатывает подключение к Машинному обучению Azure, включая проверку подлинности. - Рабочее пространство и кластер Azure Databricks.
- Создайте рабочую область Машинного обучения Azure.
Примеры записных книжек
Модели обучения в Azure Databricks и их развертывание на Машинное обучение Azure демонстрирует обучение моделей в Azure Databricks и их развертывание в Машинное обучение Azure. Он также включает в себя обработку случаев, когда вы также хотите отслеживать эксперименты и модели с экземпляром MLflow в Azure Databricks и использовать Машинное обучение Azure для развертывания.
Установка библиотек
Чтобы установить библиотеки в кластере, перейдите на вкладку библиотек и нажмите кнопку Install New (Установить новую).
В поле Пакет введите azureml-mlflow и нажмите кнопку "Установить". Повторите этот шаг, чтобы установить другие дополнительные пакеты в кластер для своего эксперимента, если это требуется.
Отслеживание выполнений Azure Databricks с использованием MLflow
Azure Databricks можно настроить для отслеживания экспериментов с помощью MLflow в двух режимах:
- Подключение в рабочих областях Azure Databricks и Машинного обучения Azure (двойное отслеживание)
- Отслеживание исключительно в службе Машинного обучения Azure
По умолчанию при подключении рабочей области Azure Databricks настраивается двойное отслеживание.
Двойное отслеживание в Azure Databricks и Машинном обучении Azure
Связав рабочую область ADB с рабочей областью Машинного обучения Azure, вы сможете одновременно отслеживать данные эксперимента в рабочей области Машинного обучения Azure и рабочей области Azure Databricks. Это называется двойным отслеживанием.
Предупреждение
Двойное отслеживание в рабочей области Машинного обучения Azure с включенным приватным каналом сейчас не поддерживается. Настройте монопольное отслеживание с помощью рабочей области Машинного обучения Azure.
Предупреждение
Двойное отслеживание не поддерживается в Microsoft Azure, работающей на данный момент 21Vianet. Настройте монопольное отслеживание с помощью рабочей области Машинного обучения Azure.
Чтобы связать рабочую область ADB с новой или существующей рабочей областью Машинного обучения Azure, выполните следующие действия.
- Войдите на портал Azure.
- Перейдите на страницу обзора рабочей области ADB.
- Нажмите кнопку Link Azure Machine Learning workspace (Связать с рабочей областью Машинного обучения Azure), расположенную внизу справа.
После связывания рабочей области 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.
Предупреждение
Для рабочей области Машинного обучения Azure с включенным приватным каналом необходимо развернуть Azure Databricks в собственной сети (внедрение виртуальной сети), чтобы обеспечить надлежащее подключение.
Необходимо настроить URI отслеживания MLflow, чтобы он указывал исключительно на Машинное обучение Azure, как показано в следующем примере:
Настройка URI отслеживания
Получите URI отслеживания для рабочей области:
ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)
Войдите и настройте рабочую область:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
URI отслеживания можно получить с помощью
az ml workspace
команды:az ml workspace show --query mlflow_tracking_uri
Настройка 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 для всех сеансов, выполняемых в кластере, а не для каждого сеанса.После настройки переменной среды все эксперименты, выполняемые в таком кластере, будут отслеживаться в Машинное обучение 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_model
mlflow.<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.
Если вы не планируете использовать зарегистрированные метрики и артефакты в рабочей области, то вам нужно знать, что удалять такие ресурсы по отдельности в настоящее время нельзя. Вместо этого вам нужно удалить группу ресурсов, содержащую учетную запись хранения и рабочую область, и таким образом избежать ненужных расходов.
На портале Azure выберите Группы ресурсов в левой части окна.
В списке выберите созданную группу ресурсов.
Выберите команду Удалить группу ресурсов.
Введите имя группы ресурсов. Затем выберите Удалить.