Оценка модели с помощью PREDICT в Microsoft Fabric
Microsoft Fabric позволяет пользователям вводить в эксплуатацию модели машинного обучения с помощью масштабируемой функции PREDICT, которая поддерживает пакетную оценку в любом вычислительном механизме. Пользователи могут создавать пакетные прогнозы непосредственно из записной книжки Microsoft Fabric или на странице элемента данной модели.
Важно!
Microsoft Fabric находится в предварительной версии.
В этой статье вы узнаете, как применять PREDICT обоими способами, независимо от того, удобнее ли вам писать код самостоятельно или использовать интерактивный интерфейс пользовательского интерфейса для обработки пакетной оценки.
Предварительные требования
Подписка Power BI Premium. Если у вас ее нет, см. раздел Как приобрести Power BI Premium.
Рабочая область Power BI с назначенной емкостью Premium. Если у вас нет рабочей области, выполните действия, описанные в разделе Создание рабочей области , чтобы создать ее и назначить ее емкости Premium.
Войдите в Microsoft Fabric.
Ограничения
- Функция PREDICT в настоящее время поддерживается для ограниченного набора моделей, включая PyTorch, Sklearn, Spark, TensorFlow, ONNX, XGBoost, LightGBM, CatBoost и Statsmodels.
- Predict требует, чтобы модели сохранялись в формате MLflow с заполненными сигнатурами.
- PREDICT не поддерживает модели с многотензорными входными или выходными данными.
Вызов PREDICT из записной книжки
PREDICT поддерживает модели, упакованные в MLflow, в реестре Microsoft Fabric. Если вы уже обучили и зарегистрировали модель в рабочей области, можно перейти к шагу 2 ниже. В противном случае шаг 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" )
Загрузка тестовых данных в виде кадра данных Spark. Для создания пакетных прогнозов с помощью модели, обученной на предыдущем шаге, необходимы тестовые данные в виде кадра данных Spark. Значение переменной в следующем коде
test
можно заменить собственными данными.# You can substitute "test" below with your own data test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
Создайте
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 )
- укажите, какие столбцы из кадра
Создание прогнозов с помощью функции 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_name
model_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 для создания и хранения результатов прогнозирования.
Чтобы воспользоваться интерактивным интерфейсом, выполните следующие действия:
Перейдите на страницу элемента для заданной версии модели.
Выберите Применить эту модель в мастере в раскрывающемся списке Применить модель .
При выборе откроется окно "Применить прогнозы модели" на шаге "Выбор входной таблицы".
Выберите входную таблицу из одного из lakehouses в текущей рабочей области.
Нажмите кнопку Далее , чтобы перейти к шагу "Сопоставление входных столбцов".
Сопоставьте имена столбцов из исходной таблицы с полями входных данных модели, которые были извлечены из сигнатуры модели. Необходимо указать входной столбец для всех обязательных полей модели. Кроме того, типы данных для исходных столбцов должны соответствовать ожидаемым типам данных модели.
Совет
Мастер предварительно заполняет это сопоставление, если имена столбцов входной таблицы совпадают с именами столбцов, зарегистрированных в сигнатуре модели.
Нажмите кнопку Далее , чтобы перейти к шагу "Создание выходной таблицы".
Укажите имя новой таблицы в выбранном Lakehouse текущей рабочей области. В этой выходной таблице будут храниться входные значения модели с добавленными значениями прогнозирования. По умолчанию выходная таблица будет создана в том же озере Lakehouse, что и входная таблица, но также доступна возможность изменить целевой lakehouse.
Нажмите кнопку Далее , чтобы перейти к шагу "Сопоставление выходных столбцов".
Используйте предоставленные текстовые поля, чтобы присвоить имена столбцам в выходной таблице, в которую будут храниться прогнозы модели.
Нажмите кнопку Далее , чтобы перейти к шагу "Настройка записной книжки".
Укажите имя для новой записной книжки, в которую будет выполняться созданный код PREDICT. На этом шаге мастер отобразит предварительный просмотр созданного кода. При желании можно скопировать код в буфер обмена и вставить его в существующую записную книжку.
Нажмите кнопку Далее , чтобы перейти к шагу "Проверка и завершение".
Просмотрите сведения на странице сводки и выберите Создать записную книжку , чтобы добавить новую записную книжку с созданным кодом в рабочую область. Вы перейдете непосредственно в эту записную книжку, где можно запустить код для создания и хранения прогнозов.
Использование настраиваемого шаблона кода
Чтобы использовать шаблон кода для создания пакетных прогнозов, выполните следующие действия.
- Перейдите на страницу элемента для заданной версии модели.
- Выберите Копировать код для применения в раскрывающемся списке Применить модель . Выбор позволяет скопировать настраиваемый шаблон кода.
Этот шаблон кода можно вставить в записную книжку для создания пакетных прогнозов с помощью модели. Чтобы успешно запустить шаблон кода, необходимо вручную заменить следующие значения:
<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>
)