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
Microsoft Fabric aboneliği alın. Alternatif olarak, ücretsiz bir Microsoft Fabric deneme sürümüne kaydolun.
Synapse Veri Bilimi deneyimine geçmek için giriş sayfanızın sol tarafındaki deneyim değiştiriciyi kullanın.
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.
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" )
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))
Çıkarım için ML modelini yüklemek için bir
MLFlowTransformer
nesne oluşturun. Toplu tahminler oluşturmaya yönelik birMLFlowTransformer
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 )
- Model girişi olarak DataFrame'den
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_version
ve değerlerini model_name
model 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
Belirli bir ML modeli sürümü için öğe sayfasına gidin.
Bu sürümü uygula açılan listesinden Sihirbazda bu modeli uygula'yı seçin.
Seçim, "Giriş tablosunu seçin" adımında "ML modeli tahminlerini uygula" penceresini açar.
Geçerli çalışma alanınızdaki göl evleri arasından bir giriş tablosu seçin.
"Giriş sütunlarını eşle" adımına gitmek için İleri'yi seçin.
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.
"Çıkış tablosu oluştur" adımına gitmek için İleri'yi seçin.
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.
"Çıkış sütunlarını eşle" adımına gitmek için İleri'yi seçin.
Ml modelinin tahminlerini depolayan çıkış tablosundaki sütunları adlandırmak için sağlanan metin alanlarını kullanın.
"Not defterini yapılandır" adımına gitmek için İleri'yi seçin.
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.
"Gözden geçir ve bitir" adımına gitmek için İleri'yi seçin.
Ö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.
Özelleştirilebilir kod şablonu kullanma
Toplu tahminler oluşturmak için bir kod şablonu kullanmak için:
- Belirli bir ML modeli sürümü için öğe sayfasına gidin.
- 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
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
)