暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss数据库AI特性之Predictor详解

原创 M.r李 2020-12-25
1543

Predictor是基于机器学习且具有在线学习能力的查询时间预测工具。通过不断学习数据库内收集的历史执行信息,实现计划的执行时间预测功能。
本特性需要拉起python进程AIEngine,用于模型的训练和推理。

环境部署

前提条件
需要保证openGauss处于正常状态,用户通过身份验证成功登录openGauss;用户执行的SQL语法正确无报错,且不会导致数据库异常等;历史性能数据窗口内openGauss并发量稳定,表结构、表数量不变,数据量无突变,涉及查询性能的guc参数不变;进行预测时,需要保证模型已训练并收敛;AiEngine运行环境稳定。
请求样例
AiEngine进程与内核进程使用https发送请求进行通信,请求样例如下:
curl -X POST -d ‘{“modelName”:“modelname”}’ -H ‘Content-Type: application/json’ ‘https://IP-address:port/request-API’
AI-Engine对外接口
Request-API 功能
/check 检查模型是否被正常拉起
/configure 设置模型参数
/train 模型训练
/track_process 查看模型训练日志
/setup 加载历史模型
/predict 模型预测
证书生成
使用此功能前需使用openssl工具生成通信双方认证所需的证书,保证通信安全。
1.
搭建证书生成环境,证书文件保存路径为$GAUSSHOME/CA。
2.
–拷贝证书生成脚本及相关文件
3.
复制代码cp path_to_predictor/install/ssl.sh $GAUSSHOME/
cp path_to_predictor/install/ca_ext.txt GAUSSHOME/ 4. –copy 配置文件openssl.cnf到GAUSSHOME路径下
5.
复制代码 cp $GAUSSHOME/share/om/openssl.cnf $GAUSSHOME/
6.
–修改openssl.conf配置参数
7.
复制代码dir = $GAUSSHOME/CA/demoCA
default_md = sha256
8.
–至此证书生成环境准备完成
9.
10.
生成证书及密钥
11.
复制代码cd $GAUSSHOME
sh ssl.sh
12.
–根据提示设置密码,假如为Test@123:
13.
–密码要求至少3种不同类型字符,长度至少为8位
14.
复制代码Please enter your password:
15.
–根据提示输入选项:
16.
复制代码Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: May 15 08:32:44 2020 GMT
Not After : May 15 08:32:44 2021 GMT
Subject:
countryName = CN
stateOrProvinceName = SZ
organizationName = HW
organizationalUnitName = GS
commonName = CA
X509v3 extensions:
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until May 15 08:32:44 2021 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
17.
–输入拉起AIEngine的IP地址,如IP为127.0.0.1:
18.
复制代码Please enter your aiEngine IP: 127.0.0.1
19.
–根据提示输入选项:
20.
Certificate Details:
Serial Number: 2 (0x2)
Validity
Not Before: May 15 08:38:07 2020 GMT
Not After : May 13 08:38:07 2030 GMT
Subject:
countryName = CN
stateOrProvinceName = SZ
organizationName = HW
organizationalUnitName = GS
commonName = 127.0.0.1
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Certificate is to be certified until May 13 08:38:07 2030 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
21.
–输入启动OpenGauss IP地址,如IP为127.0.0.1:
22.
复制代码Please enter your gaussdb IP: 127.0.0.1
23.
–根据提示输入选项:
24.
Certificate Details:
Serial Number: 3 (0x3)
Validity
Not Before: May 15 08:41:46 2020 GMT
Not After : May 13 08:41:46 2030 GMT
Subject:
countryName = CN
stateOrProvinceName = SZ
organizationName = HW
organizationalUnitName = GS
commonName = 127.0.0.1
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Certificate is to be certified until May 13 08:41:46 2030 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
25.
–至此,相关证书及密钥已生成

环境准备

将工具代码文件夹拷贝至目标环境
2.
–假设安装路径为$INSTALL_FOLDER
3.
–假设目标环境路径为/home/ai_user :
4.
复制代码scp -r $INSTALL_FOLDER/bin/dbmind/predictor ai_user@127.0.0.1:path_to_Predictor
5.
6.
拷贝CA证书文件夹至aiEngine环境中某路径下:
7.
复制代码cp -r $GAUSSHOME/CA ai_user@127.0.0.1:path_to_CA
8.
9.
安装predictor/install/requirements(-gpu).txt工具:
10.
复制代码有GPU:pip install -r requirements-gpu.txt
无GPU:pip install -r requirements.txt
11.
拉起AiEngine
1.
切换至aiEngine环境(即拷贝predictor的目标环境 ai_user):
2.
设置predictor/python/settings.py 中的相关参数:
3.
复制代码DEFAULT_FLASK_SERVER_HOST = ‘127.0.0.1’ (aiEngine运行IP地址)
DEFAULT_FLASK_SERVER_PORT = ‘5000’ (aiEngine运行端口号)
PATH_SSL = “path_to_CA” (CA文件夹路径)
4.
5.
运行aiEngine启动脚本:
6.
python path_to_Predictor/python/run.py
7.
此时,aiEngine即在相应端口保持拉起状态,等待内核侧时间预测功能的请求指令。
8.
至此,aiEngine工具部署完成。从内核中发起执行时间预测功能指令步骤,请参考《时间预测使用说明》。

使用指导

数据收集
1.打开数据收集。
a. 设置ActiveSQL operator信息相关参数:
复制代码 enable_resource_track=on
resource_track_level=operator
enable_resource_record=on
resource_track_cost=10(默认值为100000)
 说明:

  • resource_track_cost需设置为小于需要收集的查询总代价,满足条件的信息才能被收集。
  • Cgroups功能正常加载。
    b. 信息收集:
    执行业务查询语句。
    查看实时收集数据:
    复制代码 select * from gs_wlm_plan_operator_history;
    预期:满足resource_track_duration和resource_track_cost的作业被全量收集。
    1.关闭数据收集。
    a. 设置ActiveSQL operator信息相关参数:
    复制代码 enable_resource_track=off 或
    resource_track_level=none 或
    resource_track_level=query
    b. 执行业务查询语句。
    等待三分钟之后查看当前节点上的数据:
    复制代码 select * from gs_wlm_plan_operator_info;
    预期:所查表和视图无新增数据。
    1.数据持久化保存。
    a. 设置ActiveSQL operator信息相关参数:
    复制代码 enable_resource_track=on
    resource_track_level=operator
    enable_resource_record=on
    resource_track_duration=0(默认值为60s)
    resource_track_cost=10(默认值为100000)
     说明:
  • resource_track_cost需设置为小于需要收集的查询总代价,满足条件的信息才能被收集。
  • Cgroups功能正常加载。
    b. 执行业务查询语句。
    等待三分钟之后查看当前节点上的数据:
    复制代码 select * from gs_wlm_plan_operator_info;
    预期:满足resource_track_duration和resource_track_cost的作业被全量收集。
    模型管理(系统管理员用户)
     说明:
    模型管理操作需要在数据库正常的状态下进行。

新增模型:
2.
INSERT INTO gs_opt_model values(’…’);
3.
示例:
INSERT INTO gs_opt_model values(‘rlstm’, ‘model_name’, ‘datname’, ‘127.0.0.1’, 5000, 2000, 1, -1, 64, 512, 0 , false, false, ‘{S, T}’, ‘{0,0}’, ‘{0,0}’, ‘Text’);
 说明:

  • 具体模型参数设置请参考GS_OPT_MODEL。
  • 目前 “template_name” 列只支持 “rlstm”;
  • “datname” 列请和用于模型使用和训练的数据库保持一致,否则无法使用。
  • “model_name” 一列需要满足unique约束。
  • 其他参数设置见产品文档最佳实践部分。

修改模型参数:
2.
复制代码UPDATE gs_opt_model SET = WHERE model_name = <target_model_name>;
3.
4.
删除模型:
5.
复制代码DELETE FROM gs_opt_model WHERE model_name = <target_model_name>;
6.
7.
查询现有模型及其状态:
8.
复制代码SELECT * FROM gs_opt_model;
9.
模型训练(系统管理员用户)
1.
配置/添加模型训练参数:参考模型管理(系统管理员用户)进行模型添加、模型参数修改,来指定训练参数。
2.
例:
3.
模型添加:
4.
复制代码INSERT INTO gs_opt_model values(‘rlstm’, ‘default’, ‘postgres’, ‘127.0.0.1’, 5000, 2000, 1, -1, 64, 512, 0 , false, false, ‘{S, T}’, ‘{0,0}’, ‘{0,0}’, ‘Text’);
5.
训练参数更新:
6.
复制代码UPDATE gs_opt_model SET = WHERE model_name = <target_model_name>;
7.
8.
前提条件为数据库状态正常且历史数据正常收集:
9.
删除原有encoding数据:
10.
DELETE FROM gs_wlm_plan_encoding_table;
11.
进行数据编码,需要指定数据库名:
12.
SELECT gather_encoding_info(‘postgres’);
13.
开始训练:
14.
SELECT model_train_opt(‘rlstm’, ‘default’);
15.
16.
查看模型训练状态:
17.
复制代码SELECT * FROM track_model_train_opt(‘rlstm’, ‘default’);
18.
返回Tensorboard所用URL:
19.

打开URL查看模型训练状态:
21.

模型预测

说明:

  • 模型预测功能需在数据库状态正常、指定模型已被训练且收敛的条件下进行。
  • 目前,模型训练参数的标签设置中需要包含“S”标签,explain中才可显示“p-time”预测值。
    例:INSERT INTO gs_opt_model values(‘rlstm’, ‘default’, ‘postgres’, ‘127.0.0.1’, 5000, 1000, 1, -1, 50, 500, 0 , false, false, ‘{S, T}’, ‘{0,0}’, ‘{0,0}’, ‘Text’);

调用explain接口:
2.
复制代码explain (analyze on, predictor <model_name>)
SELECT …
3.
预期结果:
4.
复制代码例:Row Adapter (cost=110481.35…110481.35 rows=100 p-time=99…182 width=100) (actual time=375.158…375.160 rows=2 loops=1)
其中,“p-time”列为标签预测值。
5.
其他功能
1.
检查AiEngine是否可连接:
2.
复制代码postgres=# select check_engine_status(‘aiEngine-ip-address’,running-port);
3.
4.
查看模型对应日志在AiEngine侧的保存路径:
5.
postgres=# select track_model_train_opt(‘template_name’, ‘model_name’);

最佳实践

模型参数 参数建议
template_name ‘rlstm’
model_name 自定义,如‘open_ai’,需满足unique约束。
datname 所服务database名称,如‘postgres’。
ip aiEngine-ip地址,如‘127.0.0.1’。
port aiEngine监听端口,如‘5000’。
max_epoch 迭代次数,推荐较大数值,保证收敛效果,如‘2000’。
learning_rate (0, 1]浮点数,推荐较大的学习率,助于加快收敛速度。
dim_red 特征值降维系数:
‘-1’:不采用PCA降维,全量特征;
‘(0,1] ’区间浮点数:越小,训练维度越小,收敛速度越快,但影响训练准确率。
hidden_units 特征值维度较高时,建议适度增大此参数,提高模型复杂度,如 ‘64,128……’
batch_size 根据编码数据量,较大数据量推荐适度增大此参数,加快模型收敛,如‘256,512……’
其他参数 参考表GS_OPT_MODEL
推荐参数配置:
INSERT INTO gs_opt_model values(‘rlstm’, ‘open_ai’, ‘postgres’, ‘127.0.0.1’, 5000, 2000,1, -1, 64, 512, 0 , false, false, ‘{S, T}’, ‘{0,0}’, ‘{0,0}’, ‘Text’);

常见问题处理

AI Engine配置问题
AiEngine启动失败:请检查ip地址,端口是否可用;CA证书路径是否存在。
发起请求AiEngine无响应:请检查通信双方CA证书是否一致。
训练,测试场景失败:请检查模型文件保存路径是否存在;训练预测文件是否在正确下载。
更换AiEngine-IP地址:按照证书生成步骤重新生成证书,在生成证书及密钥中替换成相应的IP地址即可。
数据库内部报错问题
问题:AiEngine链接失败。
复制代码ERROR: AI engine connection failed.
CONTEXT: referenced column: model_train_opt
处理方法:检查AIEngine是否正常拉起或重启AIEngine;检查通信双方CA证书是否一致;检查模型配置信息中的ip和端口是否匹配;
问题:模型不存在。
ERROR: OPT_Model not found for model name XXX
CONTEXT: referenced column: track_model_train_opt
处理方法:检查GS_OPT_MODEL表中是否存在执行语句中“model_name”对应的模型;使用预测功能报错时,检查模型是否已被训练;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论