Ocenianie modelu za pomocą funkcji PREDICT w usłudze Microsoft Fabric
Usługa Microsoft Fabric umożliwia użytkownikom operacjonalizacja modeli uczenia maszynowego za pomocą skalowalnej funkcji o nazwie PREDICT, która obsługuje ocenianie wsadowe w dowolnym aucie obliczeniowym. Użytkownicy mogą generować przewidywania wsadowe bezpośrednio z notesu usługi Microsoft Fabric lub na stronie elementu danego modelu.
Ważne
Usługa Microsoft Fabric jest dostępna w wersji zapoznawczej.
W tym artykule dowiesz się, jak zastosować przewidywanie obu sposobów, niezależnie od tego, czy samodzielnie piszesz kod, czy używasz środowiska interfejsu użytkownika z przewodnikiem do obsługi oceniania wsadowego.
Wymagania wstępne
Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć bezpłatną wersję próbną usługi Microsoft Fabric (wersja zapoznawcza).
Zaloguj się do usługi Microsoft Fabric.
Przejdź do środowiska Nauka o danych przy użyciu ikony przełącznika środowiska po lewej stronie głównej.
Ograniczenia
- Funkcja PREDICT jest obecnie obsługiwana dla ograniczonego zestawu smaków modeli, w tym PyTorch, Sklearn, Spark, TensorFlow, ONNX, XGBoost, LightGBM, CatBoost i Statsmodels.
- Funkcja PREDICT wymaga zapisania modeli w formacie MLflow z wypełnionymi podpisami.
- Funkcja PREDICT nie obsługuje modeli z danymi wejściowymi lub wyjściowymi z wieloma tensorami.
Wywoływanie funkcji PREDICT z notesu
Funkcja PREDICT obsługuje modele spakowane przez platformę MLflow w rejestrze usługi Microsoft Fabric. Jeśli model został już wytrenowany i zarejestrowany w obszarze roboczym, możesz przejść do kroku 2 poniżej. Jeśli nie, krok 1 zawiera przykładowy kod, który przeprowadzi Cię przez trenowanie przykładowego modelu regresji logistycznej. Za pomocą tego modelu można wygenerować przewidywania wsadowe na końcu procedury.
Trenowanie modelu i rejestrowanie go za pomocą biblioteki MLflow. Poniższy przykładowy kod używa interfejsu API platformy MLflow do utworzenia eksperymentu uczenia maszynowego i uruchomienia biblioteki MLflow dla modelu regresji logistycznej scikit-learn. Wersja modelu jest następnie przechowywana i zarejestrowana w rejestrze usługi Microsoft Fabric. Zobacz , jak trenować modele za pomocą biblioteki scikit-learn, aby dowiedzieć się więcej na temat trenowania modeli i śledzenia własnych eksperymentów.
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" )
Załaduj dane testowe jako ramkę danych platformy Spark. Aby wygenerować przewidywania wsadowe przy użyciu modelu wytrenowanego w poprzednim kroku, potrzebne są dane testowe w postaci ramki danych Platformy Spark. Możesz zastąpić wartość zmiennej
test
w poniższym kodzie własnymi danymi.# You can substitute "test" below with your own data test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
MLFlowTransformer
Utwórz obiekt, aby załadować model na potrzeby wnioskowania. Aby utworzyćMLFlowTransformer
obiekt do generowania przewidywań wsadowych, należy wykonać następujące czynności:- określ kolumny z
test
ramki danych potrzebnej jako dane wejściowe modelu (w tym przypadku wszystkie z nich) - wybierz nazwę nowej kolumny danych wyjściowych (w tym przypadku
predictions
), i - podaj poprawną nazwę modelu i wersję modelu do generowania tych przewidywań.
Jeśli używasz własnego modelu, zastąp wartości kolumn wejściowych, nazwą kolumny wyjściowej, nazwą modelu i wersją modelu.
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 )
- określ kolumny z
Generowanie przewidywań przy użyciu funkcji PREDICT. Aby wywołać funkcję PREDICT, możesz użyć interfejsu API przekształcania, interfejsu API SQL platformy Spark lub funkcji zdefiniowanej przez użytkownika (UDF) PySpark. W poniższych sekcjach przedstawiono sposób generowania przewidywań wsadowych przy użyciu danych testowych i modelu zdefiniowanych w poprzednich krokach przy użyciu różnych metod wywoływania funkcji PREDICT.
PREDICT with the Transformer API
Poniższy kod wywołuje funkcję PREDICT za pomocą interfejsu API przekształcania. Jeśli używasz własnego modelu, zastąp wartości modelu i danych testowych.
# You can substitute "model" and "test" below with values
# for your own model and test data
model.transform(test).show()
PREDICT with the Spark SQL API
Poniższy kod wywołuje funkcję PREDICT za pomocą interfejsu API Spark SQL. Jeśli używasz własnego modelu, zastąp wartości kolumnami model_name
, model_version
i features
nazwą modelu, wersją modelu i kolumnami funkcji.
Uwaga
Generowanie przewidywań przy użyciu interfejsu API SQL platformy Spark nadal wymaga utworzenia MLFlowTransformer
obiektu (jak w kroku 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 with a user-defined function (PRZEWIDYWANIE za pomocą funkcji zdefiniowanej przez użytkownika)
Poniższy kod wywołuje funkcję PREDICT z funkcją UDF PySpark. Jeśli używasz własnego modelu, zastąp wartości modelu i funkcji.
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()
Generowanie kodu PREDICT na podstawie strony elementu modelu
Na stronie elementu dowolnego modelu możesz wybrać jedną z następujących opcji, aby rozpocząć generowanie przewidywań wsadowych dla określonej wersji modelu z funkcją PREDICT.
- Generowanie kodu PREDICT za pomocą interfejsu użytkownika z przewodnikiem
- Kopiowanie szablonu kodu do notesu i samodzielne dostosowywanie parametrów
Korzystanie z interfejsu użytkownika z przewodnikiem
Środowisko interfejsu użytkownika z przewodnikiem przeprowadzi Cię przez kroki służące do wybierania danych źródłowych na potrzeby oceniania, mapowania danych poprawnie na dane wejściowe modelu, określania miejsca docelowego dla danych wyjściowych modelu i tworzenia notesu, który używa funkcji PREDICT do generowania i przechowywania wyników przewidywania.
Aby użyć środowiska z przewodnikiem,
Przejdź do strony elementu dla danej wersji modelu.
Wybierz pozycję Zastosuj ten model w kreatorze z listy rozwijanej Zastosuj model .
Zaznaczenie otwiera okno "Zastosuj przewidywania modelu" w kroku "Wybierz tabelę wejściową".
Wybierz tabelę wejściową z jednego z usług Lakehouse w bieżącym obszarze roboczym.
Wybierz przycisk Dalej , aby przejść do kroku "Mapuj kolumny wejściowe".
Zamapuj nazwy kolumn z tabeli źródłowej na pola wejściowe modelu, które zostały pobrane z podpisu modelu. Musisz podać kolumnę wejściową dla wszystkich wymaganych pól modelu. Ponadto typy danych dla kolumn źródłowych muszą być zgodne z oczekiwanymi typami danych modelu.
Napiwek
Kreator wstępnie wypełni to mapowanie, jeśli nazwy kolumn tabeli wejściowej są zgodne z nazwami kolumn zarejestrowanych w podpisie modelu.
Wybierz przycisk Dalej , aby przejść do kroku "Utwórz tabelę danych wyjściowych".
Podaj nazwę nowej tabeli w wybranej usłudze Lakehouse bieżącego obszaru roboczego. Ta tabela danych wyjściowych będzie przechowywać wartości wejściowe modelu z dołączonymi wartościami przewidywania. Domyślnie tabela wyjściowa zostanie utworzona w tej samej usłudze Lakehouse co tabela wejściowa, ale dostępna jest również opcja zmiany docelowej usługi Lakehouse.
Wybierz pozycję Dalej , aby przejść do kroku "Mapuj kolumny wyjściowe".
Użyj podanych pól tekstowych, aby nazwać kolumny w tabeli wyjściowej, które będą przechowywać przewidywania modelu.
Wybierz przycisk Dalej , aby przejść do kroku "Konfigurowanie notesu".
Podaj nazwę nowego notesu, który będzie uruchamiał wygenerowany kod PREDICT. Kreator wyświetla podgląd wygenerowanego kodu w tym kroku. Jeśli wolisz, możesz skopiować kod do schowka i wkleić go do istniejącego notesu.
Wybierz przycisk Dalej , aby przejść do kroku "Przeglądanie i kończenie".
Przejrzyj szczegóły na stronie podsumowania i wybierz pozycję Utwórz notes , aby dodać nowy notes z wygenerowanym kodem do obszaru roboczego. Nastąpi przekierowanie bezpośrednio do tego notesu, w którym można uruchomić kod w celu wygenerowania i przechowywania przewidywań.
Używanie dostosowywalnego szablonu kodu
Aby użyć szablonu kodu do generowania przewidywań wsadowych:
- Przejdź do strony elementu dla danej wersji modelu.
- Wybierz pozycję Kopiuj kod, który ma być stosowany z listy rozwijanej Zastosuj model . Wybór umożliwia skopiowanie dostosowywalnego szablonu kodu.
Możesz wkleić ten szablon kodu do notesu, aby wygenerować przewidywania wsadowe za pomocą modelu. Aby pomyślnie uruchomić szablon kodu, należy ręcznie zastąpić następujące wartości:
<INPUT_TABLE>
: ścieżka pliku dla tabeli, która będzie dostarczać dane wejściowe do modelu<INPUT_COLS>
: tablica nazw kolumn z tabeli wejściowej do źródła danych do modelu<OUTPUT_COLS>
: nazwa nowej kolumny w tabeli wyjściowej, która będzie przechowywać przewidywania<MODEL_NAME>
: nazwa modelu, który ma być używany do generowania przewidywań<MODEL_VERSION>
: wersja modelu do użycia do generowania przewidywań<OUTPUT_TABLE>
: ścieżka pliku dla tabeli, która będzie przechowywać przewidywania
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>
)
Następne kroki
Opinia
Prześlij i wyświetl opinię dla