本文介紹了建立模型、上傳模型、模型評估以及模型推理等功能的文法、參數說明及其樣本內容。
PolarDB for AI模型簡介
使用內建模型
PolarDB for AI內建了兩大機器學習模型:NL2SQL大模型和通義千問大模型。您無需進行額外的模型配置,即可使用這個兩大機器學習模型提供的PolarDB for AI功能。
具體請參見:
構建自訂模型
在客戶的實際業務情境中,模型經過演算法調優後,模型結構可能會根據業務效果進行調整,內建的機器學習模型可能無法滿足使用者的實際業務需求。因此,PolarDB for AI還支援構建自訂模型的功能,並支援將模型運行在機密容器中,進一步保障了客戶模型中資料的安全。
您可按照如下流程構建並使用自訂模型:
載入外部模型
此外,基於PolarDB for AI的MLOps能力,您也可以直接將外部訓練好的模型上傳和部署在PolarDB中,並使用外部模型,如如基於Sklearn架構的LightGBM、GBDT,或者基於TensorFlow/PyTorch架構下的深度學習演算法等。
您可按照如下流程載入外部模型:
建立模型
建立一個機器學習模型。機器學習模型的訓練過程是非同步,需要通過查詢模型狀態來判斷該模型是否訓練完成。
文法說明
CREATE MODEL model_name WITH ( model_class = '', x_cols = '', y_cols='',model_parameter=()) AS (SELECT select_expr [, select_expr] ... FROM table_reference)
參數說明
參數 | 說明 |
model_name | 模型名稱。 |
model_class | 模型的類型。取值如下:
|
x_cols | 模型訓練輸入列。 說明 多個列名之間使用英文逗號(,)分隔。 |
y_cols | 模型訓練輸出資料行。 |
model_parameter | 模型訓練參數。
|
select_expr | 列名。 |
table_reference | 表名。 |
樣本
建立airlines_gbm
模型。
/*polar4ai*/CREATE MODEL airlines_gbm WITH (model_class='lightgbm', x_cols ='Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay',model_parameter=(boosting_type='gbdt', n_estimators=100, max_depth=8, num_leaves=256)) as (SELECT * FROM db4ai.airlines_train)
執行結果如下:
Query OK, 0 rows affected (0.79 sec)
上傳模型
PolarDB for AI支援上傳自訂機器學習模型,您可以將離線訓練好的模型上傳至PolarDB for AI,後續可以藉助該平台來管理上傳的模型。PolarDB for AI支援的模型格式有PMML、ONNX、Checkpoint(適用於Tensorflow、PyTorch平台)。
文法說明
UPLOAD MODEL model_name WITH (model_location = '', req_location = '')
參數說明
參數 | 說明 |
model_name | 模型名稱。 |
model_location | 模型檔案地址。 |
req_location | 模型運行依賴的檔案地址。 |
樣本
將建立好的模型my_model
上傳至PolarDB for AI平台。
/*polar4ai*/UPLOAD MODEL my_model WITH (model_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/model.pkl?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx', req_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/requirements.txt?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx');
返回結果如下:
Query OK, 0 rows affected (0.29 sec)
執行以下命令,查看模型狀態。
/*polar4ai*/ SHOW MODEL my_model;
返回結果如下:
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| modelStatus | modelPath |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| saved | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.23 sec)
modelStatus
顯示為saved
,即表示模型上傳成功。
部署模型
您可以將上傳後的模型部署在PolarDB for AI平台上,部署成功後,模型為線上狀態,後續調用模型進行模型推理時,速度會更快。
文法說明
DEPLOY MODEL model_name
參數說明
參數 | 說明 |
model_name | 模型名稱。 |
樣本
將模型my_model
部署在PolarDB for AI平台。
/*polar4ai*/ DEPLOY MODEL my_model;
返回結果如下:
Query OK, 0 rows affected (0.29 sec)
執行如下命令,查看模型狀態:
/*polar4ai*/ SHOW MODEL my_model;
返回結果如下:
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| modelStatus | modelPath |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| serving | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.23 sec)
modelStatus
顯示為serving
,表示模型部署成功。
查看模型
查看模型列表
查看當前叢集下的所有模型。
文法說明
SHOW MODELS
樣本
/*polar4ai*/SHOW MODELS
執行結果如下:
+-----------------------+-----------------+--------------+
| model_name | model_class | model_status |
+-----------------------+-----------------+--------------+
| airline_rfr | randomforestreg | saved |
| gbrt1 | gbrt | saved |
| airline_deepfm | deepfm | saved |
| airlines_gbm | lightgbm | saved |
| lgbm1 | lightgbm | saved |
| blackfriday_linearreg | linearreg | saved |
+-----------------------+-----------------+--------------+
6 rows in set (0.24 sec)
查看模型狀態
查看模型的目前狀態。建立模型之後使用該文法來查看模型是否訓練完成。模型狀態主要有以下幾種:
training:模型訓練中。
loading_data:模型在載入資料中。
trained:模型已經完成訓練。
saved:模型已經被儲存。
serving:模型正在服務中。
deleted:模型已經被刪除。
文法說明
SHOW MODEL model_name
參數說明
參數 | 說明 |
model_name | 模型名稱。 |
樣本
查看airlines_gbm
模型的目前狀態。
/*polar4ai*/SHOW MODEL airlines_gbm;
執行結果如下:
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| modelStatus | modelPath |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| saved | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.23 sec)
modelPath
的有效時間為100分鐘,您可以通過modelPath
中的Expires
參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。
查看模型詳情
文法說明
DESCRIBE MODEL model_name
參數說明
參數 | 說明 |
model_name | 模型名稱。 |
樣本
查看airlines_gbm
模型的詳細資料。
/*polar4ai*/DESCRIBE MODEL airlines_gbm;
執行結果如下:
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| model_name | model_description |
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| airlines_gbm | basic information:model_name:airlines_gbm model_class:lightgbm feature important:features,imp_gain,imp_splitAirline,0.3327,0.0376 AirportFrom,0.2178,0.1842 Time,0.1893,0.1999 AirportTo,0.1668,0.187 DayOfWeek,0.0384,0.1236 Length,0.0307,0.1269 Flight,0.0242,0.1408 |
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.65 sec)
模型評估
評估已經訓練好的模型的效果。
文法說明
SELECT select_expr [, select_expr] ... FROM EVALUATE (MODEL model_name, SELECT select_expr_for_prediction [, select_expr_for_prediction] ... FROM table_reference ) WITH (x_cols = '', y_cols='', metrics='')
參數說明
參數 | 說明 |
select_expr | 模型評估結果中展示的列名。 |
model_name | 模型名稱。 |
select_expr_for_prediction | 用於進行模型評估的列名。 |
table_reference | 表名。 |
x_cols | 模型訓練輸入列。多個列名之間使用英文逗號(,)分隔。 |
y_cols | 模型訓練輸出資料行。 |
metrics | 模型評估指標。取值如下:
|
樣本
使用已經訓練完成的
airlines_gbm
模型進行模型評估。/*polar4ai*/SELECT Delay FROM evaluate(MODEL airlines_gbm, SELECT * FROM db4ai.airlines_test) WITH (x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay', metrics='acc');
執行結果如下:
+--------------------------------------+ | task_id | +--------------------------------------+ | df05244e-21f7-11ed-be66-xxxxxxxxxxxx | +--------------------------------------+ 1 row in set (0.95 sec)
執行如下命令,查看任務狀態。
/*polar4ai*/SHOW TASK `df05244e-21f7-11ed-be66-xxxxxxxxxxxx`;
執行結果如下:
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+ | taskStatus | filePath | results | startTime | endTime | +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+ | finish | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/pc-xxxxxxx/airlines_gbm/xxxxx.csv?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | {"acc": 0.6694} | 2022-08-22 17:22:21.122101 | 2022-08-22 17:22:39.428811 | +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+ 1 row in set (0.24 sec)
說明filePath
的有效時間為100分鐘,您可以通過filePath
中的Expires
參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。
模型推理
使用已經訓練好的模型進行線上推理或離線推理。
文法說明
SELECT select_expr [, select_expr] ... FROM PREDICT (MODEL model_name, SELECT select_expr_for_prediction [, select_expr_for_prediction] ... FROM table_reference LIMIT row_count) WITH (x_cols= '')
參數說明
參數 | 說明 |
select_expr | 模型推理結果中展示的列名。 |
model_name | 模型名稱。 |
select_expr_for_prediction | 模型推理時使用的列名。 |
table_reference | 表名。 |
mode | 模式。填寫async時,表示離線推理;不填時表示線上推理。 |
row_count | 推理的樣本數量。 |
x_cols | 模型訓練輸入列。多個列名之間使用英文逗號(,)分隔。 |
樣本
線上推理。
使用已經建立好的模型
airlines_gbm
進行線上推理。/*polar4ai*/SELECT Delay FROM PREDICT(MODEL airlines_gbm, SELECT * FROM db4ai.airlines_test LIMIT 10) WITH (x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay');
執行結果如下:
+-------+-------------------+ | Delay | predicted_results | +-------+-------------------+ | 1 | 0 | | 0 | 0 | | 0 | 0 | | 0 | 0 | | 0 | 0 | | 0 | 0 | | 1 | 0 | | 0 | 0 | | 0 | 0 | | 1 | 0 | +-------+-------------------+ 10 rows in set (0.74 sec)
離線推理。
當推理樣本數量大於1000時,PolarDB for AI會提示您採用離線任務:
ERROR 9050 (HY000): Please limit the SQL selected data length to less than '1000' or convert to offline prediction
建立離線任務如下:
/*polar4ai*/SELECT Delay FROM predict(MODEL airlines_gbm, SELECT * FROM db4ai.airlines_test) WITH (x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay', mode='async');
執行結果如下:
+--------------------------------------+ | task_id | +--------------------------------------+ | bd0c1722-21e7-11ed-94a8-xxxxxxxxxxxx | +--------------------------------------+ 1 row in set (0.75 sec)
以上查詢結果返回該任務的
task_id
,您可以通過該任務ID查詢任務狀態以及對應結果的下載地址。/*polar4ai*/SHOW TASK `bd0c1722-21e7-11ed-94a8-xxxxxxxxxxxx`
執行結果如下:
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+ | taskStatus | filePath | results | startTime | endTime | +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+ | finish | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/pc-xxxxxxx/airlines_gbm/xxxxx.csv?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | | 2022-08-22 14:57:51.355240 | 2022-08-22 14:58:18.316818 | +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+ 1 row in set (0.24 sec)
說明filePath
的有效時間為100分鐘,您可以通過filePath
中的Expires
參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。
離線評估與離線推理任務
查看離線工作清單
查看當前叢集下的所有離線任務。
離線任務是指已耗用時間長,且無法即時擷取結果的批處理任務,任務類型包括離線評估和離線推理兩種類型。
文法說明
SHOW TASKS
樣本
執行以下命令,查看當前叢集下的所有離線任務。
/*polar4ai*/SHOW TASKS;
執行結果如下:
+--------------------------------------+------------+-------------+----------------------------+----------------------------+
| task_id | task_type | task_status | start_timestr | end_timestr |
+--------------------------------------+------------+-------------+----------------------------+----------------------------+
| 2cba0c74-1f8f-11ed-934a-xxxxxxxxxxxx | prediction | finish | 2022-08-19 15:18:51.206829 | |
| 77b3a186-1f94-11ed-8eaa-xxxxxxxxxxxx | evaluation | finish | 2022-08-19 15:56:44.465594 | |
| 972547a4-1fa3-11ed-9c6b-xxxxxxxxxxxx | evaluation | finish | 2022-08-19 17:44:59.790353 | 2022-08-19 17:45:23.750100 |
| bd0c1722-21e7-11ed-94a8-xxxxxxxxxxxx | prediction | finish | 2022-08-22 14:57:51.355240 | 2022-08-22 14:58:18.316818 |
| df05244e-21f7-11ed-be66-xxxxxxxxxxxx | evaluation | finish | 2022-08-22 16:53:20.381577 | 2022-08-22 16:53:37.189953 |
| ec956db8-21fb-11ed-8400-xxxxxxxxxxxx | evaluation | finish | 2022-08-22 17:22:21.122101 | 2022-08-22 17:22:39.428811 |
+--------------------------------------+------------+-------------+----------------------------+----------------------------+
9 rows in set (0.18 sec)
查看離線任務狀態
查看離線任務的目前狀態。任務狀態主要有以下幾種:
init:任務初始化。
running:任務執行中。
finish:任務完成。
fail:任務失敗。
文法說明
SHOW TASK `task_id`
參數說明
參數 | 說明 |
task_id | 任務ID。 |
樣本
查看任務ID為df05244e-21f7-11ed-be66-xxxxxxxxxxxx
的任務狀態。
/*polar4ai*/SHOW TASK `df05244e-21f7-11ed-be66-xxxxxxxxxxxx`
執行結果如下:
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
| taskStatus | filePath | results | startTime | endTime |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
| finish | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/pc-xxxxxxx/airlines_gbm/xxxxx.csv?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | {"acc": 0.6694} | 2022-08-22 17:22:21.122101 | 2022-08-22 17:22:39.428811 |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
1 row in set (0.24 sec)
filePath
的有效時間為100分鐘,您可以通過filePath
中的Expires
參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。
刪除模型
當模型不再使用時,使用該文法刪除已經建立的模型。
文法說明
DROP MODEL model_name
參數說明
參數 | 說明 |
model_name | 模型名稱。 |
樣本
刪除airlines_gbm
模型。
/*polar4ai*/DROP MODEL airlines_gbm
執行結果顯示類似如下內容,表示已成功刪除airlines_gbm
模型:
Query OK, 0 rows affected (0.57 sec)
自訂模型最佳實務
接下來,我們將通過一個樣本,帶您瞭解自訂模型管理的完整鏈路。本最佳實務以模型的離線訓練和線上推理為例進行介紹。
離線訓練模型。
以LightGBM演算法為例,離線訓練指令碼如下:
# coding: utf-8 from pathlib import Path import pandas as pd from sklearn.metrics import mean_squared_error import lightgbm as lgb import joblib def train_model(): print('Loading data...') # load or create your dataset df_train = pd.read_csv('regression.train', header=None, sep='\t') df_test = pd.read_csv('regression.test', header=None, sep='\t') y_train = df_train[0] y_test = df_test[0] X_train = df_train.drop(0, axis=1) X_test = df_test.drop(0, axis=1) # create dataset for lightgbm lgb_train = lgb.Dataset(X_train, y_train) lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train) # specify your configurations as a dict params = { 'boosting_type': 'gbdt', 'objective': 'regression', 'metric': {'l2', 'l1'}, 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9, 'bagging_fraction': 0.8, 'bagging_freq': 5, 'verbose': 0 } print('Starting training...') # train gbm = lgb.train(params, lgb_train, num_boost_round=20, valid_sets=lgb_eval, callbacks=[lgb.early_stopping(stopping_rounds=5)]) print('Saving model...') # save model to file # gbm.save_model('model.txt') joblib.dump(gbm, 'lgb.pkl') print('Starting predicting...') # predict y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration) # eval rmse_test = mean_squared_error(y_test, y_pred) ** 0.5 print(f'The RMSE of prediction is: {rmse_test}')
其中,模型檔案匯出為
pkl
格式,並且調用predict
方法返回推理結果,同時還需要提供模型運行依賴的python檔案。檔案
requirements.txt
內容樣本如下:lightgbm==3.3.3
上傳模型。
執行以下命令,將模型上傳至PolarDB for AI。
/*polar4ai*/UPLOAD MODEL my_model WITH (model_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/model.pkl?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx', req_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/requirements.txt?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx')
其中,
model_location
和req_location
分別表示模型檔案地址以及模型運行時所依賴的檔案地址,您可以將這兩個檔案提前準備好,並上傳至自己的私人oss bucket,再通過以上命令上傳至PolarDB for AI平台。返回結果如下:
Query OK, 0 rows affected (0.29 sec)
執行以下命令,查看模型狀態。
/*polar4ai*/ SHOW my_model;
返回結果如下:
+-------------+-----------------------------------------------------------------------------------------------------------------------------+ | modelStatus | modelPath | +-------------+-----------------------------------------------------------------------------------------------------------------------------+ | saved | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | +-------------+-----------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.23 sec)
modelStatus
顯示為saved
,表示模型上傳成功。
部署模型。
執行以下命令,將模型部署在PolarDB for AI上。
/*polar4ai*/ DEPLOY MODEL my_model;
返回結果如下:
Query OK, 0 rows affected (0.29 sec)
執行以下命令,查看模型狀態。
/*polar4ai*/ SHOW MODEL my_model;
返回結果如下:
+-------------+-----------------------------------------------------------------------------------------------------------------------------+ | modelStatus | modelPath | +-------------+-----------------------------------------------------------------------------------------------------------------------------+ | serving | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | +-------------+-----------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.23 sec)
modelStatus
顯示為serving
,表示模型部署成功。
模型線上推理。
執行以下命令,執行模型線上推理任務。
/*polar4ai*/ SELECT Y FROM PREDICT(MODEL my_model, SELECT * FROM db4ai.regression_test LIMIT 10) WITH (x_cols = 'x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28', y_cols='');
返回結果如下:
+------+---------------------+ | Y | predicted_results | +------+---------------------+ | 1.0 | 0.6262147669037363 | | 0.0 | 0.5082804008241021 | | 0.0 | 0.37533158372209957 | | 1.0 | 0.461974928099089 | | 0.0 | 0.3777339456553666 | | 0.0 | 0.35045096227525735 | | 0.0 | 0.4178165504012342 | | 1.0 | 0.40869795422774036 | | 1.0 | 0.6826481286570045 | | 0.0 | 0.47021259543154736 | +------+---------------------+ 10 rows in set (0.95 sec)