#冲刺创作新星# openGauss 高级特性 DB4AI 进行 AI 开发 原创
@[toc]
一、openGauss 与 DB4AI
一直以来,数据库给人的感觉就像是一个盒子,用来装着各种数据,只有借助“外力”才能够存取数据,对数据来进行操作。DB4AI,当我听到这个概念的时候有些震惊,因为它将数据库与 AI 这两个看似不沾边的东西结合了起来,组合成了一个更为强大的技术。
一方面,AI 可以让数据库更加智能(AI4DB),例如传统的经验数据库优化技术无法满足大规模数据库实例、多样化应用以及多样化用户的高性能需求,但是基于学习的技术可以解决可以解决这个问题;另一方面,数据库技术可以优化人工智能模型(DB4AI),比如 AI 的部署问题,需要开发人员进行复杂的代码编写以及训练才能完成模型的训练,如果将 AI 的相关能力(比如数据挖掘、数据清洗、数据标记等等)集成到数据库上,就能降低人工智能使用的复杂度。
目前具有这一功能的数据库似乎还很少,而国内似乎只有华为所开源的数据库 openGauss 具备这一功能。通过在数据库内集成 AI 算法,使得 openGauss 具备原生 AI 计算引擎、模型管理、AI 算子、AI 原生执行计划的能力。当前版本的 DB4AI 支持基于SGD 算子的逻辑回归(目前支持二分类任务)、线性回归和支持向量机算法(分类任务),以及基于K-Means算子的Kmeans聚类算法。
二、DB4AI 能力简单上手
1、openGauss 的部署与安装
openGauss 的安装方式有很多种,我这里就选择最简单快捷的方法,使用 Docker 来进行安装,来简化安装过程:
① 镜像搜索
使用 docker search
命令搜索 openGauss 镜像,可以看到第一个,也就是 NAME 为 enmotech/opengauss
的镜像 STARS 最多,这里我就选择这个,这个好像也是官方推荐的 Docker 镜像。
# 镜像搜索
docker search opengauss
② 镜像拉取
接下来使用 docker pull
对刚刚我们选择的镜像进行拉取,我这里拉取 3.0.0 版本的 openGauss(目前似乎没有 3.1.0 版本的 openGauss Docker 镜像)
# 镜像拉取
docker pull enmotech/opengauss:3.0.0
输入 docker images
可以看到我们的镜像
# 镜像查看
docker images
如果你使用 Docker Desktop,也可以在其中看到
③ 运行镜像
之后使用 docker run
命令就可以来创建并运行一个容器
# 运行镜像
docker run --name opengauss -p 26000:26000 --privileged=true -d -e GS_PASSWORD=Enmo@123 enmotech/opengauss:latest
使用 Docker Desktop 的同学也可以直接点击右边的 RUN
来运行镜像。
④ 进入容器
使用 docker ps
命令查看容器 ID
# 查看镜像 ID
docker ps
使用 docker exec
命令进入容器
# 进入容器
docker exec -it 6b4745abb1a2 /bin/bash
也可以在 Docker Desktop 中来运行。
之后进入 omm 用户,并输入 gsql
命令进入 openGauss 数据库
root@6b4745abb1a2:/# su - omm
omm@6b4745abb1a2:~$ gsql
2、简单案例入门 openGauss DB4AI 开发
Ⅰ、DB4AI 语法及关键字
使用 openGauss 的 DB4AI 能力进行 AI 开发主要所经历的大致流程以及使用的语句在下面的图中展现的活灵活现,下面就大致讲解一下 DB4AI 语法及关键字。
① 模型创建基本语法与关键字
名称 | 描述 | |
---|---|---|
语句 | CREATE MODEL | 创建模型并进行训练,同时保存模型。 |
USING | 用来指定算法的名称 | |
WITH | 用于指定训练模型时的超参数 | |
PREDICT BY | 利用已有模型进行推断。 | |
关键字 | TARGET | 训练/推断任务的目标列名。 |
FEATURES | 训练/推断任务的数据特征列名。 | |
MODEL | 训练任务的模型名称。 |
② 算子支持的超参
可以使用 WITH 指定训练模型时的超参,支持的超参如下
算子 | 超参 |
---|---|
GD<br>(logistic_regression、linear_regression、svm_classification) | optimizer(char); verbose(bool); max_iterations(int); max_seconds(double); batch_size(int); learning_rate(double); decay(double); tolerance(double)<br>其中,SVM限定超参lambda(double) |
Kmeans | max_iterations(int); num_centroids(int); tolerance(double); batch_size(int); num_features(int); distance_function(char); seeding_function(char*); verbose(int);seed(int) |
③ 查看执行计划
可以使用 EXPLAIN 语句对“CREATE MODEL”和“PREDICT BY”的模型训练或预测过程中的执行计划进行分析,EXPLAIN 支持的参数如下:
参数名 | 描述 |
---|---|
ANALYZE | 布尔型变量,追加运行时间、循环次数等描述信息 |
VERBOSE | 布尔型变量,控制训练的运行信息是否输出到客户端 |
COSTS | 布尔型变量 |
CPU | 布尔型变量 |
DETAIL | 布尔型变量,不可用。 |
NODES | 布尔型变量,不可用 |
NUM_NODES | 布尔型变量,不可用 |
BUFFERS | 布尔型变量 |
TIMING | 布尔型变量 |
PLAN | 布尔型变量 |
FORMAT | 可选格式类型:TEXT / XML / JSON / YAML |
Ⅱ、DB4AI 上手房价预测案例
① 准备数据
训练 AI 模型主要还是通过创建表并导入数据的方式来准备数据,以下面简单的房价预测案例入门,首先创建 houses 表,具体如下:
CREATE TABLE houses (
id INTEGER,
tax INTEGER,
bedroom INTEGER,
bath DOUBLE PRECISION,
price INTEGER,
size INTEGER,
lot INTEGER,
mark text
);
接下来向 house 表中插入数据
insert into houses(id, tax, bedroom, bath, price, size, lot, mark) VALUES
(1,590,2,1,50000,770,22100,'a+'),
(2,1050,3,2,85000,1410,12000,'a+'),
(3,20,2,1,22500,1060,3500,'a-'),
(4,870,2,2,90000,1300,17500,'a+'),
(5,1320,3,2,133000,1500,30000,'a+'),
(6,1350,2,1,90500,850,25700,'a-'),
(7,2790,3,2.5,260000,2130,25000,'a+'),
(8,680,2,1,142500,1170,22000,'a-'),
(9,1840,3,2,160000,1500,19000,'a+'),
(10,3680,4,2,240000,2790,20000,'a-'),
(11,1660,3,1,87000,1030,17500,'a+'),
(12,1620,3,2,118500,1250,20000,'a-'),
(13,3100,3,2,140000,1760,38000,'a+'),
(14,2090,2,3,148000,1550,14000,'a-'),
(15,650,3,1.5,65000,1450,12000,'a-');
② 创建模型
openGauss 创建模型与创建数据表类似,创建表一般是 CREATE TABLE TABLE_NAME
,而创建模型就是 CREATE MODEL MODEL_NAME
,以此来区分两种表与模型的区别,创建模型的语法如下:
CREATE MODEL model_name USING algorithm_name
[FEATURES { {expression [ [ AS ] output_name ]} [, ...] }]
[TARGET { {expression [ [ AS ] output_name ]} [, ...] }]
FROM { table_name | select_query }
WITH hyperparameter_name = { hyperparameter_value | DEFAULT } [, ...] }
这里我们创建房价预测模型:
CREATE MODEL price_model USING logistic_regression
FEATURES size, lot
TARGET mark
FROM HOUSES
WITH learning_rate=0.88, max_iterations=default;
③ 预测房价
之后使用我们创建的 price_model 模型进行房价的预测:
SELECT id, PREDICT BY price_model (FEATURES size,lot), price
FROM houses;
参考
[1] Li G, Zhou X, Cao L. AI meets database: AI4DB and DB4AI[C]//Proceedings of the 2021 International Conference on Management of Data. 2021: 2859-2866.
[2] https://opengauss.org/zh/