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.

    Screenshot of the experience switcher menu, showing where to select Data Science.

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.

  1. 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"
        ) 
    
  2. 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))
    
  3. 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
    )
    
  4. 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_versioni 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,

  1. Przejdź do strony elementu dla danej wersji modelu.

  2. Wybierz pozycję Zastosuj ten model w kreatorze z listy rozwijanej Zastosuj model .

    Screenshot of the prompt to apply a model from its item page.

    Zaznaczenie otwiera okno "Zastosuj przewidywania modelu" w kroku "Wybierz tabelę wejściową".

  3. Wybierz tabelę wejściową z jednego z usług Lakehouse w bieżącym obszarze roboczym.

    Screenshot of the step to select an input table for model predictions.

  4. Wybierz przycisk Dalej , aby przejść do kroku "Mapuj kolumny wejściowe".

  5. 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.

    Screenshot of the step to map input columns for model predictions.

  6. Wybierz przycisk Dalej , aby przejść do kroku "Utwórz tabelę danych wyjściowych".

  7. 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.

    Screenshot of the step to create an output table for model predictions.

  8. Wybierz pozycję Dalej , aby przejść do kroku "Mapuj kolumny wyjściowe".

  9. Użyj podanych pól tekstowych, aby nazwać kolumny w tabeli wyjściowej, które będą przechowywać przewidywania modelu.

    Screenshot of the step to map output columns for model predictions.

  10. Wybierz przycisk Dalej , aby przejść do kroku "Konfigurowanie notesu".

  11. 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.

    Screenshot of the step to configure a notebook for model predictions.

  12. Wybierz przycisk Dalej , aby przejść do kroku "Przeglądanie i kończenie".

  13. 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ń.

    Screenshot of the review-and-finish step for model predictions.

Używanie dostosowywalnego szablonu kodu

Aby użyć szablonu kodu do generowania przewidywań wsadowych:

  1. Przejdź do strony elementu dla danej wersji modelu.
  2. 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

Screenshot of the copy-code template for model predictions.

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