Оценка модели с помощью PREDICT в Microsoft Fabric

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

Важно!

Microsoft Fabric находится в предварительной версии.

В этой статье вы узнаете, как применять PREDICT обоими способами, независимо от того, удобнее ли вам писать код самостоятельно или использовать интерактивный интерфейс пользовательского интерфейса для обработки пакетной оценки.

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

Ограничения

  • Функция PREDICT в настоящее время поддерживается для ограниченного набора моделей, включая PyTorch, Sklearn, Spark, TensorFlow, ONNX, XGBoost, LightGBM, CatBoost и Statsmodels.
  • Predict требует, чтобы модели сохранялись в формате MLflow с заполненными сигнатурами.
  • PREDICT не поддерживает модели с многотензорными входными или выходными данными.

Вызов PREDICT из записной книжки

PREDICT поддерживает модели, упакованные в MLflow, в реестре Microsoft Fabric. Если вы уже обучили и зарегистрировали модель в рабочей области, можно перейти к шагу 2 ниже. В противном случае шаг 1 предоставляет пример кода, который поможет вам обучить пример модели логистической регрессии. Эту модель можно использовать для создания пакетных прогнозов в конце процедуры.

  1. Обучить модель и зарегистрировать ее в MLflow. В следующем примере кода используется API MLflow для создания эксперимента машинного обучения и запуска запуска MLflow для модели логистической регрессии scikit-learn. Затем версия модели сохраняется и регистрируется в реестре Microsoft Fabric. Узнайте , как обучать модели с помощью scikit-learn , чтобы узнать больше о моделях обучения и отслеживании собственных экспериментов.

    import mlflow
    import numpy as np 
    from sklearn.linear_model import LogisticRegression 
    from sklearn.datasets import load_diabetes
    from mlflow.models.signature import infer_signature 
    
    mlflow.set_experiment("diabetes-demo")
    with mlflow.start_run() as run:
        lr = LogisticRegression()
        data = load_diabetes(as_frame=True)
        lr.fit(data.data, data.target) 
        signature = infer_signature(data.data, data.target) 
    
        mlflow.sklearn.log_model(
            lr,
            "diabetes-model",
            signature=signature,
            registered_model_name="diabetes-model"
        ) 
    
  2. Загрузка тестовых данных в виде кадра данных Spark. Для создания пакетных прогнозов с помощью модели, обученной на предыдущем шаге, необходимы тестовые данные в виде кадра данных Spark. Значение переменной в следующем коде test можно заменить собственными данными.

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. Создайте MLFlowTransformer объект для загрузки модели для вывода. Чтобы создать MLFlowTransformer объект для создания пакетных прогнозов, необходимо сделать следующее:

    • укажите, какие столбцы из кадра test данных требуются в качестве входных данных модели (в данном случае все).
    • выберите имя нового выходного столбца (в данном случае — predictions), и
    • укажите правильное имя модели и версию модели для создания этих прогнозов.

    Если вы используете собственную модель, замените значения входных столбцов, имени выходного столбца, имени модели и версии модели.

    from synapse.ml.predict import MLFlowTransformer
    
    # You can substitute values below for your own input columns,
    # output column name, model name, and model version
    model = MLFlowTransformer(
        inputCols=test.columns,
        outputCol='predictions',
        modelName='diabetes-model',
        modelVersion=1
    )
    
  4. Создание прогнозов с помощью функции PREDICT. Чтобы вызвать функцию PREDICT, можно использовать API преобразователя, API Spark SQL или определяемую пользователем функцию PySpark (UDF). В следующих разделах показано, как создавать пакетные прогнозы с использованием тестовых данных и модели, определенных на предыдущих шагах, с помощью различных методов вызова PREDICT.

PREDICT с помощью API преобразователя

Следующий код вызывает функцию PREDICT с помощью API преобразователя. Если вы использовали собственную модель, замените значения для модели и тестовых данных.

# You can substitute "model" and "test" below with values  
# for your own model and test data 
model.transform(test).show()

PREDICT с помощью API SQL Spark

Следующий код вызывает функцию PREDICT с помощью API Spark SQL. Если вы уже использовали собственную модель, замените значения , model_namemodel_versionи features столбцами имени модели, версии модели и признаков.

Примечание

Использование API Spark SQL для создания прогнозов по-прежнему требует создания MLFlowTransformer объекта (как на шаге 3).

from pyspark.ml.feature import SQLTransformer 

# You can substitute "model_name," "model_version," and "features" 
# with values for your own model name, model version, and feature columns
model_name = 'diabetes-model'
model_version = 1
features = test.columns

sqlt = SQLTransformer().setStatement( 
    f"SELECT PREDICT('{model_name}/{model_version}', {','.join(features)}) as predictions FROM __THIS__")

# You can substitute "test" below with your own test data
sqlt.transform(test).show()

PREDICT с помощью определяемой пользователем функции

Следующий код вызывает функцию PREDICT с определяемой пользователем функцией PySpark. Если вы использовали собственную модель, замените значения модели и компонентов.

from pyspark.sql.functions import col, pandas_udf, udf, lit

# You can substitute "model" and "features" below with your own values
my_udf = model.to_udf()
features = test.columns

test.withColumn("PREDICT", my_udf(*[col(f) for f in features])).show()

Создание кода PREDICT на странице элемента модели

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

  • Создание кода PREDICT с помощью интерактивного интерфейса
  • Копирование шаблона кода в записную книжку и настройка параметров самостоятельно

Использование интерактивного пользовательского интерфейса

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

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

  1. Перейдите на страницу элемента для заданной версии модели.

  2. Выберите Применить эту модель в мастере в раскрывающемся списке Применить модель .

    Снимок экрана: запрос на применение модели со страницы элементов.

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

  3. Выберите входную таблицу из одного из lakehouses в текущей рабочей области.

    Снимок экрана: шаг по выбору входной таблицы для прогнозов модели.

  4. Нажмите кнопку Далее , чтобы перейти к шагу "Сопоставление входных столбцов".

  5. Сопоставьте имена столбцов из исходной таблицы с полями входных данных модели, которые были извлечены из сигнатуры модели. Необходимо указать входной столбец для всех обязательных полей модели. Кроме того, типы данных для исходных столбцов должны соответствовать ожидаемым типам данных модели.

    Совет

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

    Снимок экрана: шаг для сопоставления входных столбцов для прогнозов модели.

  6. Нажмите кнопку Далее , чтобы перейти к шагу "Создание выходной таблицы".

  7. Укажите имя новой таблицы в выбранном Lakehouse текущей рабочей области. В этой выходной таблице будут храниться входные значения модели с добавленными значениями прогнозирования. По умолчанию выходная таблица будет создана в том же озере Lakehouse, что и входная таблица, но также доступна возможность изменить целевой lakehouse.

    Снимок экрана: шаг по созданию выходной таблицы для прогнозов модели.

  8. Нажмите кнопку Далее , чтобы перейти к шагу "Сопоставление выходных столбцов".

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

    Снимок экрана: шаг для сопоставления выходных столбцов для прогнозов модели.

  10. Нажмите кнопку Далее , чтобы перейти к шагу "Настройка записной книжки".

  11. Укажите имя для новой записной книжки, в которую будет выполняться созданный код PREDICT. На этом шаге мастер отобразит предварительный просмотр созданного кода. При желании можно скопировать код в буфер обмена и вставить его в существующую записную книжку.

    Снимок экрана: шаг по настройке записной книжки для прогнозирования модели.

  12. Нажмите кнопку Далее , чтобы перейти к шагу "Проверка и завершение".

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

    Снимок экрана: этап проверки и завершения для прогнозов модели.

Использование настраиваемого шаблона кода

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

  1. Перейдите на страницу элемента для заданной версии модели.
  2. Выберите Копировать код для применения в раскрывающемся списке Применить модель . Выбор позволяет скопировать настраиваемый шаблон кода.

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

  • <INPUT_TABLE>: путь к файлу для таблицы, которая будет предоставлять входные данные для модели.
  • <INPUT_COLS>: массив имен столбцов из входной таблицы для отправки в модель.
  • <OUTPUT_COLS>: имя нового столбца в выходной таблице, в который будут храниться прогнозы.
  • <MODEL_NAME>: имя модели, используемой для создания прогнозов.
  • <MODEL_VERSION>: версия модели, используемая для создания прогнозов.
  • <OUTPUT_TABLE>: путь к файлу для таблицы, в которую будут храниться прогнозы.

Снимок экрана: шаблон копирования кода для прогнозов модели.

import mlflow 
from synapse.ml.predict import MLFlowTransformer 
 
df = spark.read.format("delta").load( 
    <INPUT_TABLE> 
) 
 
model = MLFlowTransformer( 
    inputCols=<INPUT_COLS>, 
    outputCol=<OUTPUT_COLS>, 
    modelName=<MODEL_NAME>, 
    modelVersion=<MODEL_VERSION> 
) 
df = model.transform(df) 
 
df.write.format('delta').mode("overwrite").save( 
    <OUTPUT_TABLE> 
)  

Дальнейшие действия