Assegnare punteggi ai modelli di Machine Learning con PREDICT

Il pool SQL dedicato offre la possibilità di assegnare punteggi ai modelli di Machine Learning usando il familiare linguaggio T-SQL. Con la funzione T-SQL PREDICT è possibile usare i modelli di Machine Learning esistenti di cui è stato effettuato il training con dati cronologici e assegnare loro punteggi all'interno dei limiti sicuri del data warehouse. La funzione PREDICT accetta un modello ONNX (Open Neural Network Exchange) e dati come input. Questa funzionalità elimina il passaggio di spostamento di dati preziosi al di fuori del data warehouse per l'assegnazione di punteggi. Mira a consentire ai professionisti dei dati di distribuire facilmente modelli di Machine Learning con l'interfaccia T-SQL familiare, nonché di collaborare senza problemi con i data scientist che lavorano con il framework appropriato per l'attività.

Nota

Questa funzionalità non è attualmente supportata nel pool SQL serverless.

La funzionalità richiede che il modello venga sottoposto a training all'esterno di Synapse SQL. Dopo aver compilato il modello, caricarlo nel data warehouse e assegnare un punteggio alla sintassi T-SQL Predict per ottenere informazioni dettagliate dai dati.

predictoverview

Training del modello

Il pool SQL dedicato prevede un modello con training preliminare. Tenere presenti i fattori seguenti quando si esegue il training di un modello di Machine Learning usato per eseguire stime nel pool SQL dedicato.

  • Il pool SQL dedicato supporta solo modelli in formato ONNX. ONNX è un formato di modello open source che consente di scambiare modelli tra diversi framework per assicurare l'interoperabilità. È possibile convertire i modelli esistenti in formato ONNX usando framework che lo supportano in modo nativo o che dispongono di pacchetti di conversione disponibili. Ad esempio, il pacchetto sklearn-onnx convertire i modelli scikit-learn in ONNX. Il repository GitHub ONNX fornisce un elenco di framework ed esempi supportati.

    Se si usa ML automatizzato per il training, assicurarsi di impostare il parametro enable_onnx_compatible_models su TRUE per produrre un modello in formato ONNX. Notebook di Machine Learning automatizzato illustra un esempio di come usare il Machine Learning automatizzato per creare un modello di Machine Learning in formato ONNX.

  • Per i dati di input sono supportati i tipi di dati seguenti:

    • int, bigint, real, float
    • char, varchar, nvarchar
  • I dati di assegnazione dei punteggi devono essere nello stesso formato dei dati di training. I tipi di dati complessi, ad esempio matrici multidimensionali, non sono supportati da PREDICT. Pertanto, per il training assicurarsi che ogni input del modello corrisponda a una singola colonna della tabella di assegnazione dei punteggi anziché passare una singola matrice contenente tutti gli input.

  • Assicurarsi che i nomi e i tipi di dati degli input del modello corrispondano ai nomi delle colonne e ai tipi di dati dei nuovi dati di stima. La visualizzazione di un modello ONNX con vari strumenti open source disponibili online può essere utile per il debug.

Caricamento del modello

Il modello viene archiviato in una tabella utente del pool SQL dedicato come stringa esadecimale. È possibile aggiungere altre colonne, ad esempio ID e descrizione, nella tabella del modello per identificare il modello. Usare varbinary(max) come tipo di dati della colonna del modello. Ecco un esempio di codice per una tabella che può essere usata per archiviare modelli:

-- Sample table schema for storing a model and related data
CREATE TABLE [dbo].[Models]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Model] [varbinary](max) NULL,
    [Description] [varchar](200) NULL
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    HEAP
)
GO

Dopo aver convertito il modello come stringa esadecimale e aver specificato la definizione della tabella, usare il comando COPY o PolyBase per caricare il modello nella tabella del pool SQL dedicato. L'esempio di codice seguente usa il comando Copy per caricare il modello.

-- Copy command to load hexadecimal string of the model from Azure Data Lake storage location
COPY INTO [Models] (Model)
FROM '<enter your storage location>'
WITH (
    FILE_TYPE = 'CSV',
    CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<enter your storage key here>')
)

Assegnazione di un punteggio al modello

Una volta caricati i dati e il modello nel data warehouse, usare la funzione T-SQL PREDICT per assegnare un punteggio al modello. Assicurarsi che i nuovi dati di input siano nello stesso formato dei dati di training usati per la compilazione del modello. T-SQL PREDICT accetta due input: modello e nuovi dati di input di assegnazione dei punteggi e genera nuove colonne per l'output. Il modello può essere specificato come variabile, un valore letterale o una sub_query scalare. Usare WITH common_table_expression per specificare un set di risultati denominato per il parametro Data.

L'esempio seguente mostra una query di esempio usando la funzione di stima. Viene creata una colonna aggiuntiva con nome Punteggio e tipo di dati float contenente i risultati della stima. Tutte le colonne di dati di input e le colonne di stima di output sono disponibili per la visualizzazione con l'istruzione SELECT. Per altre informazioni, vedere PREDICT (Transact-SQL).

-- Query for ML predictions
SELECT d.*, p.Score
FROM PREDICT(MODEL = (SELECT Model FROM Models WHERE Id = 1),
DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH (Score float) AS p;

Passaggi successivi

Per altre informazioni sulla funzione PREDICT, vedere PREDICT (Transact-SQL).