Aracılığıyla paylaş


SQL makine öğrenmesi ile PREDICT T-SQL işlevini kullanarak yerel puanlama

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri Azure SQL Yönetilen ÖrneğiAzure Synapse Analytics

Yeni veri girişleri için neredeyse gerçek zamanlı tahmin değerleri oluşturmak için PREDICT T-SQL işleviyle yerel puanlama kullanmayı öğrenin. Doğal puanlama yapabilmek için önceden eğitilmiş bir modele sahip olmanız gerekir.

İşlev, PREDICTSQL makine öğrenmesindeki yerel C++ uzantısı özelliklerini kullanır. Bu metodoloji, Açık Sinir Ağı Değişimi ( yalnızca Azure Synapse Analytics) biçimindeki (yalnızca Azure Synapse Analytics) veya RevoScaleR ve revoscalepy paketleri kullanılarak eğitilen modellerde tahmin ve tahmin iş yüklerinin ve destek modellerinin mümkün olan en hızlı işleme hızını sunar.

Yerel puanlama nasıl çalışır?

Yerel puanlama, ONNX veya önceden tanımlanmış ikili biçimdeki modelleri okuyabilen ve sağladığınız yeni veri girişleri için puanlar oluşturabilen kitaplıkları kullanır. Model eğitildiğinden, dağıtıldığından ve depolandığından, R veya Python yorumlayıcısını çağırmak zorunda kalmadan puanlama için kullanılabilir. Bu, birden çok işlem etkileşiminin yükünün azalarak daha hızlı tahmin performansına neden olduğu anlamına gelir.

Yerel puanlama kullanmak için T-SQL işlevini çağırın PREDICT ve aşağıdaki gerekli girişleri geçirin:

  • Desteklenen bir modeli ve algoritmayı temel alan uyumlu bir model.
  • Giriş verileri, genellikle T-SQL sorgusu olarak tanımlanır.

İşlev, geçiş yapmak istediğiniz kaynak veri sütunlarıyla birlikte giriş verileri için tahminler döndürür.

Önkoşullar

PREDICT şu tarihinde kullanılabilir:

  • Windows ve Linux'ta SQL Server 2017 ve sonraki sürümlerin tümü
  • Azure SQL Yönetilen Varlık
  • Azure Synapse Analytics

İşlev varsayılan olarak etkindir. R veya Python yüklemeniz veya ek özellikleri etkinleştirmeniz gerekmez.

Desteklenen modeller

İşlev tarafından PREDICT desteklenen model biçimleri, yerel puanlama yaptığınız SQL platformuna bağlıdır. Hangi platformda hangi model biçimlerinin desteklendiğine bakmak için aşağıdaki tabloya bakın.

Platform ONNX model biçimi RevoScale model biçimi
SQL Server Hayı Yes
Azure SQL Yönetilen Varlık Hayı Yes
Azure Synapse Analytics Yes Hayı

ONNX modelleri

Modelin Açık Sinir Ağı Değişimi (ONNX) model biçiminde olması gerekir.

RevoScale modelleri

Model, RevoScaleR veya revoscalepy paketi kullanılarak aşağıda listelenen desteklenen rx algoritmalarından biri kullanılarak önceden eğitilmelidir.

R için rxSerialize ve Python için rx_serialize_model kullanarak modeli seri hale getirme. Bu serileştirme işlevleri, hızlı puanlama desteği için iyileştirilmiştir.

Desteklenen RevoScale algoritmaları

Revoscalepy ve RevoScaleR'da aşağıdaki algoritmalar desteklenir.

MicrosoftML veya microsoftml'den bir algoritma kullanmanız gerekiyorsa , sp_rxPredict ile gerçek zamanlı puanlama kullanın.

Desteklenmeyen model türleri aşağıdaki türleri içerir:

  • Diğer dönüştürmeleri içeren modeller
  • rxGlm veya rxNaiveBayes algoritmalarını kullanan RevoScaleR veya revoscalepy eşdeğerlerindeki modeller
  • PMML modelleri
  • Diğer açık kaynak veya üçüncü taraf kitaplıkları kullanılarak oluşturulan modeller

Örnekler

ONNX modeliyle PREDICT gerçekleştirin

Bu örnekte, yerel puanlama için tabloda depolanan bir ONNX modelinin dbo.models nasıl kullanılacağı gösterilmektedir.

DECLARE @model VARBINARY(max) = (
        SELECT DATA
        FROM dbo.models
        WHERE id = 1
        );

WITH predict_input
AS (
    SELECT TOP (1000) [id]
        , CRIM
        , ZN
        , INDUS
        , CHAS
        , NOX
        , RM
        , AGE
        , DIS
        , RAD
        , TAX
        , PTRATIO
        , B
        , LSTAT
    FROM [dbo].[features]
    )
SELECT predict_input.id
    , p.variable1 AS MEDV
FROM PREDICT(MODEL = @model, DATA = predict_input, RUNTIME=ONNX) WITH (variable1 FLOAT) AS p;

Uyarı

PREDICT tarafından döndürülen sütunlar ve değerler model türüne göre farklılık gösterebileceğinden, döndürülen verilerin şemasını bir WITH yan tümcesi kullanarak tanımlamanız gerekir.

RevoScale modeli ile PREDICT

Bu örnekte R'de RevoScaleR kullanarak bir model oluşturacak ve ardından T-SQL'den gerçek zamanlı tahmin işlevini çağıracaksınız.

Adım 1. Modeli hazırlama ve kaydetme

Örnek veritabanını ve gerekli tabloları oluşturmak için aşağıdaki kodu çalıştırın.

CREATE DATABASE NativeScoringTest;
GO
USE NativeScoringTest;
GO
DROP TABLE IF EXISTS iris_rx_data;
GO
CREATE TABLE iris_rx_data (
    "Sepal.Length" float not null, "Sepal.Width" float not null
  , "Petal.Length" float not null, "Petal.Width" float not null
  , "Species" varchar(100) null
);
GO

Veri tablosunu iris veri kümesindeki verilerle doldurmak için aşağıdaki deyimi kullanın.

INSERT INTO iris_rx_data ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width" , "Species")
EXECUTE sp_execute_external_script
  @language = N'R'
  , @script = N'iris_data <- iris;'
  , @input_data_1 = N''
  , @output_data_1_name = N'iris_data';
GO

Şimdi modelleri depolamak için bir tablo oluşturun.

DROP TABLE IF EXISTS ml_models;
GO
CREATE TABLE ml_models ( model_name nvarchar(100) not null primary key
  , model_version nvarchar(100) not null
  , native_model_object varbinary(max) not null);
GO

Aşağıdaki kod , iris veri kümesini temel alan bir model oluşturur ve model adlı tabloya kaydeder.

DECLARE @model varbinary(max);
EXECUTE sp_execute_external_script
  @language = N'R'
  , @script = N'
    iris.sub <- c(sample(1:50, 25), sample(51:100, 25), sample(101:150, 25))
    iris.dtree <- rxDTree(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris[iris.sub, ])
    model <- rxSerializeModel(iris.dtree, realtimeScoringOnly = TRUE)
    '
  , @params = N'@model varbinary(max) OUTPUT'
  , @model = @model OUTPUT
  INSERT [dbo].[ml_models]([model_name], [model_version], [native_model_object])
  VALUES('iris.dtree','v1', @model) ;

Uyarı

Modeli kaydetmek için RevoScaleR'den rxSerializeModel işlevini kullandığınızdan emin olun. Standart R serialize işlevi gerekli biçimi oluşturamıyor.

Depolanan modeli ikili biçimde görüntülemek için aşağıdaki gibi bir deyimi çalıştırabilirsiniz:

SELECT *, datalength(native_model_object)/1024. as model_size_kb
FROM ml_models;

Adım 2. Modelde PREDICT çalıştırma

Aşağıdaki basit PREDICT deyimi, yerel skorlamayı kullanarak karar ağacı modelinden bir sınıflandırma elde eder. Sağladığınız özniteliklere, yaprakların uzunluğuna ve genişliğine göre iris türlerini tahmin eder.

DECLARE @model varbinary(max) = (
  SELECT native_model_object
  FROM ml_models
  WHERE model_name = 'iris.dtree'
  AND model_version = 'v1');
SELECT d.*, p.*
  FROM PREDICT(MODEL = @model, DATA = dbo.iris_rx_data as d)
  WITH(setosa_Pred float, versicolor_Pred float, virginica_Pred float) as p;
go

"PREDICT işlevinin yürütülmesi sırasında hata oluştu." Model bozuk veya geçersiz", bu genellikle sorgunuzun model döndürmediğini gösterir. Model adını doğru yazıp yazmadığınızdan veya modeller tablosunun boş olup olmadığını denetleyin.

Uyarı

PREDICT tarafından döndürülen sütunlar ve değerler model türüne göre farklılık gösterebileceğinden, döndürülen verilerin şemasını bir WITH yan tümcesi kullanarak tanımlamanız gerekir.