Aracılığıyla paylaş


Microsoft Fabric'te PREDICT ile makine öğrenmesi modeli puanlaması

Microsoft Fabric, kullanıcıların herhangi bir işlem altyapısında toplu puanlama desteği sunan PREDICT adlı ölçeklenebilir bir işlevle makine öğrenmesi modellerini kullanıma hazır hale getirmesine olanak tanır. Kullanıcılar toplu tahminleri doğrudan bir Microsoft Fabric not defterinden veya belirli bir ML modelinin öğe sayfasından oluşturabilir.

Bu makalede, kendiniz kod yazma konusunda daha rahat olmanız veya toplu puanlamayla başa çıkabilmek için kılavuzlu kullanıcı arabirimi deneyimi kullanmanız fark etmeksizin, PREDICT uygulamasının her iki yolu da nasıl uygulayacağınızı öğreneceksiniz.

Önkoşullar

Sınırlamalar

  • PREDICT işlevi şu anda aşağıdakiler dahil sınırlı sayıda ML modeli için desteklenmektedir:
    • PyTorch
    • Sklearn
    • Spark
    • TensorFlow
    • ONNX
    • XGBoost
    • LightGBM
    • CatBoost
    • İstatistik modelleri
    • Peygamber
    • Keras
  • PREDICT, ML modellerinin imzaları doldurularak MLflow biçiminde kaydedilmesini gerektirir.
  • PREDICT, çok tensörlü girişlere veya çıkışlara sahip ML modellerini desteklemez.

Not defterinden PREDICT çağrısı

PREDICT, Microsoft Fabric kayıt defterinde MLflow paketli modelleri destekler. Çalışma alanınızda zaten eğitilmiş ve kayıtlı bir ML modeli varsa 2. adıma atlayabilirsiniz. Aksi takdirde, 1. adım örnek bir lojistik regresyon modelini eğitme konusunda size yol gösterecek örnek kod sağlar. Yordamın sonunda toplu tahminler oluşturmak için bu modeli kullanabilirsiniz.

  1. Ml modelini eğitin ve MLflow'a kaydedin. Aşağıdaki örnek kod, makine öğrenmesi denemesi oluşturmak ve scikit-learn lojistik regresyon modeli için bir MLflow çalıştırması başlatmak için MLflow API'sini kullanır. Model sürümü daha sonra Microsoft Fabric kayıt defterinde depolanır ve kaydedilir. Kendi modellerinizi eğitmek ve denemeleri izlemek hakkında daha fazla bilgi edinmek için scikit-learn ile ML modellerini eğitmeyi öğrenin.

    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. Test verilerini Spark DataFrame olarak yükleyin. Önceki adımda eğitilen ML modelini kullanarak toplu tahminler oluşturmak için Spark DataFrame biçiminde test verilerine ihtiyacınız vardır. Aşağıdaki koddaki değişkenin test değerini kendi verilerinizle değiştirebilirsiniz.

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. Çıkarım için ML modelini yüklemek için bir MLFlowTransformer nesne oluşturun. Toplu tahminler oluşturmaya yönelik bir MLFlowTransformer nesne oluşturmak için aşağıdaki eylemleri gerçekleştirmeniz gerekir:

    • Model girişi olarak DataFrame'den test hangi sütunlara ihtiyacınız olduğunu belirtin (bu örnekte bunların tümü),
    • yeni çıkış sütunu için bir ad seçin (bu örnekte , predictions) ve
    • bu tahminleri oluşturmak için doğru model adını ve model sürümünü sağlayın.

    Kendi ML modelinizi kullanıyorsanız giriş sütunları, çıkış sütunu adı, model adı ve model sürümü değerlerini değiştirin.

    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 işlevini kullanarak tahminler oluşturun. PREDICT işlevini çağırmak için Transformer API'sini, Spark SQL API'sini veya PySpark kullanıcı tanımlı işlevini (UDF) kullanabilirsiniz. Aşağıdaki bölümlerde, PREDICT çağırmak için farklı yöntemler kullanılarak önceki adımlarda tanımlanan test verileri ve ML modeliyle toplu tahminlerin nasıl oluşturulacağı gösterilmektedir.

Transformer API ile PREDICT

Aşağıdaki kod Transformer API'siyle PREDICT işlevini çağırır. Kendi ML modelinizi kullanıyorsanız, model ve test verileri için değerleri değiştirin.

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

Spark SQL API'siyle PREDICT

Aşağıdaki kod Spark SQL API'siyle PREDICT işlevini çağırır. Kendi ML modelinizi kullanıyorsanız , model_versionve değerlerini model_namemodel adınız, model sürümünüz ve features özellik sütunlarınızla değiştirin.

Not

Tahmin oluşturmak için Spark SQL API'sini kullanmak için yine de bir MLFlowTransformer nesne oluşturmanız gerekir (3. adımda olduğu gibi).

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()

Kullanıcı tanımlı bir işlevle PREDICT

Aşağıdaki kod, PySpark UDF ile PREDICT işlevini çağırır. Kendi ML modelinizi kullandıysanız model ve özelliklerin değerlerini değiştirin.

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()

ML modelinin öğe sayfasından PREDICT kodu oluşturma

Herhangi bir ML modelinin öğe sayfasında, PREDICT ile belirli bir model sürümü için toplu tahminler oluşturmaya başlamak için aşağıdaki seçeneklerden birini belirleyebilirsiniz.

  • PREDICT kodu oluşturmak için kılavuzlu kullanıcı arabirimi deneyimi kullanma
  • Not defterine kod şablonu kopyalama ve parametreleri kendiniz özelleştirme

Kılavuzlu kullanıcı arabirimi deneyimi kullanma

Kılavuzlu kullanıcı arabirimi deneyimi, aşağıdaki adımlarda size yol gösterir:

  • Puanlama için kaynak verileri seçme
  • Verileri ML modelinizin girişleriyle doğru eşleme
  • Modelinizin çıkışları için hedefi belirtin
  • Tahmin sonuçları oluşturmak ve depolamak için PREDICT kullanan bir not defteri oluşturma

Destekli deneyimi kullanmak için

  1. Belirli bir ML modeli sürümü için öğe sayfasına gidin.

  2. Bu sürümü uygula açılan listesinden Sihirbazda bu modeli uygula'yı seçin.

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

    Seçim, "Giriş tablosunu seçin" adımında "ML modeli tahminlerini uygula" penceresini açar.

  3. Geçerli çalışma alanınızdaki göl evleri arasından bir giriş tablosu seçin.

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

  4. "Giriş sütunlarını eşle" adımına gitmek için İleri'yi seçin.

  5. Kaynak tablodaki sütun adlarını, modelin imzasından çekilen ML modelinin giriş alanlarıyla eşleyin. Modelin tüm gerekli alanları için bir giriş sütunu sağlamanız gerekir. Ayrıca, kaynak sütunların veri türlerinin modelin beklenen veri türleriyle eşleşmesi gerekir.

    İpucu

    Giriş tablosunun sütunlarının adları ML modeli imzasında günlüğe kaydedilen sütun adlarla eşleşiyorsa sihirbaz bu eşlemeyi önceden doldurulur.

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

  6. "Çıkış tablosu oluştur" adımına gitmek için İleri'yi seçin.

  7. Geçerli çalışma alanınızın seçili lakehouse içindeki yeni tablo için bir ad belirtin. Bu çıkış tablosu, tahmin değerlerinin eklendiği ML modelinizin giriş değerlerini depolar. Varsayılan olarak, çıkış tablosu giriş tablosuyla aynı lakehouse'da oluşturulur, ancak hedef lakehouse'un değiştirilmesi seçeneği de kullanılabilir.

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

  8. "Çıkış sütunlarını eşle" adımına gitmek için İleri'yi seçin.

  9. Ml modelinin tahminlerini depolayan çıkış tablosundaki sütunları adlandırmak için sağlanan metin alanlarını kullanın.

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

  10. "Not defterini yapılandır" adımına gitmek için İleri'yi seçin.

  11. Oluşturulan PREDICT kodunu çalıştıracak yeni bir not defteri için bir ad sağlayın. Sihirbaz, bu adımda oluşturulan kodun önizlemesini görüntüler. İsterseniz kodu panonuza kopyalayabilir ve mevcut bir not defterine yapıştırabilirsiniz.

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

  12. "Gözden geçir ve bitir" adımına gitmek için İleri'yi seçin.

  13. Özet sayfasındaki ayrıntıları gözden geçirin ve oluşturulan kodu içeren yeni not defterini çalışma alanınıza eklemek için Not defteri oluştur'u seçin. Doğrudan bu not defterine yönlendirilirsiniz; burada tahminleri oluşturmak ve depolamak için kodu çalıştırabilirsiniz.

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

Özelleştirilebilir kod şablonu kullanma

Toplu tahminler oluşturmak için bir kod şablonu kullanmak için:

  1. Belirli bir ML modeli sürümü için öğe sayfasına gidin.
  2. Bu sürümü uygula açılan listesinden Uygulamak için Kodu kopyala'yı seçin. Seçim, özelleştirilebilir bir kod şablonunu kopyalamanıza olanak tanır.

ML modelinizle toplu tahminler oluşturmak için bu kod şablonunu bir not defterine yapıştırabilirsiniz. Kod şablonunu başarıyla çalıştırmak için aşağıdaki değerleri el ile değiştirmeniz gerekir:

  • <INPUT_TABLE>: ML modeline giriş sağlayan tablonun dosya yolu
  • <INPUT_COLS>: ML modeline beslemek için giriş tablosundan sütun adları dizisi
  • <OUTPUT_COLS>: Çıkış tablosunda tahminleri depolayan yeni bir sütunun adı
  • <MODEL_NAME>: Tahmin oluşturmak için kullanılacak ML modelinin adı
  • <MODEL_VERSION>: Tahmin oluşturmak için kullanılacak ML modelinin sürümü
  • <OUTPUT_TABLE>: Tahminleri depolayan tablonun dosya yolu

Screenshot of the copy-code template for ML model predictions.

import mlflow 
from synapse.ml.predict import MLFlowTransformer 
 
df = spark.read.format("delta").load( 
    <INPUT_TABLE> # Your input table filepath here
) 
 
model = MLFlowTransformer( 
    inputCols=<INPUT_COLS>, # Your input columns here
    outputCol=<OUTPUT_COLS>, # Your new column name here
    modelName=<MODEL_NAME>, # Your ML model name here
    modelVersion=<MODEL_VERSION> # Your ML model version here
) 
df = model.transform(df) 
 
df.write.format('delta').mode("overwrite").save( 
    <OUTPUT_TABLE> # Your output table filepath here
)