共用方式為


使用 PREDICT 對機器學習模型進行評分

專用的 SQL 集區可讓您使用熟悉的 T-SQL 語言來對機器學習模型進行評分。 透過 T-SQL PREDICT,您可以使用透過歷史資料訓練的現有機器學習模型,並在您資料倉儲的安全界限內進行評分。 PREDICT 函式接受 ONNX (Open Neutral Network Exchange) 模型和資料作為輸入。 這項功能免去了將重要資料移出資料倉儲以進行評分的步驟。 它的目標是要讓資料專業人員能夠輕鬆地使用熟悉的 T-SQL 介面部署機器學習模型,以及使用適合其工作的架構與資料科學家完美地共同作業。

注意

無伺服器 SQL 集區目前不支援此功能。

必須在 Synapse SQL 之外訓練模型,才能使用這項功能。 在建置模型之後,請將其載入資料倉儲,並使用 T-SQL Predict 語法對其進行評分,以從資料中取得見解。

predictoverview

訓練模型

專用 SQL 集區要求預先定型的模型。 訓練用來在專用 SQL 集區中執行預測的機器學習模型時,請記住下列因素。

  • 專用 SQL 集區只支援 ONNX 格式模型。 ONNX 是一種開放原始碼的模型格式,可讓您在各種架構之間交換模型,以實現互通性。 您可以將現有模型轉換成 ONNX 格式,方法是使用以原生方式支援其的架構,或提供轉換套件的架構。 例如,sklearn-onnx 套件會將 scikit-learn-學習模型轉換為 ONNX。 ONNX GitHub 存放庫提供支援的架構和範例清單。

    如果您是使用自動化 ML 進行訓練,請務必將 enable_onnx_compatible_models 參數設為 TRUE,以產生 ONNX 格式模型。 自動機器學習筆記本示範如何使用自動化 ML 來建立 ONNX 格式的機器學習模型。

  • 輸入資料支援下列資料類型:

    • int、bigint、real、float
    • char、varchar、nvarchar
  • 評分資料須與訓練資料同一格式。 PREDICT 不支援複雜資料類型 (例如多維陣列)。 因此,如需進行訓練,請確定模型的每個輸入都對應到評分資料表的單一資料行,而不是傳遞包含所有輸入的單一陣列。

  • 確定模型輸入的名稱和資料類型符合新預測資料的資料行名稱和資料類型。 使用線上提供的各種開放原始碼工具來視覺化 ONNX 模型,可進一步協助進行偵錯。

載入模型

模型會以十六進位字串的形式儲存在專用的 SQL 集區使用者資料表中。 您可以在模型資料表中新增其他資料行 (例如識別碼和描述) 以識別模型。 使用 varbinary(max) 作為模型資料行的資料類型。 以下是可用於儲存模型的資料表程式碼範例:

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

模型轉換為十六進位字串和指定的資料表定義後,請使用 COPY 命令或 Polybase 將模型載入專用的 SQL 集區資料表中。 下列程式碼範例會使用 Copy 命令來載入模型。

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

為模型評分

在資料倉儲中載入模型和資料後,請使用 T-SQL PREDICT 函式來為模型評分。 確定新的輸入資料與用於建置模型的訓練資料同一格式。 T-SQL PREDICT 會採取兩個輸入:模型和新評分輸入資料,並為輸出產生新的資料行。模型可以指定為變數、常值或純量 sub_query。 使用 WITH common_table_expression 指定資料參數的具名結果集。

下列範例顯示使用預測函數的範例查詢。 系統會建立包含預測結果的額外資料行,其名稱為 Score,資料類型為 float。 您可以使用 select 陳述式,來顯示所有輸入資料的資料行以及輸出預測資料行。 如需詳細資訊,請參閱 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;

下一步

若要深入了解 PREDICT 函數,請參閱 PREDICT (Transact-SQL)