ITPub博客

首页 > 数据库 > 数据库开发技术 > openGauss学习笔记-306 openGauss AI特性-DB4AI: 数据库驱动AI-原生DB4AI引擎

openGauss学习笔记-306 openGauss AI特性-DB4AI: 数据库驱动AI-原生DB4AI引擎

原创 数据库开发技术 作者:shuchaoyang 时间:2024-03-04 07:00:00 0 删除 编辑

openGauss学习笔记-306 openGauss AI特性-DB4AI: 数据库驱动AI-原生DB4AI引擎306.1 概述306.2 原生DB4AI引擎306.2.1 关键字解析306.2.2 使用指导

openGauss学习笔记-306 openGauss AI特性-DB4AI: 数据库驱动AI-原生DB4AI引擎

306.1 概述

DB4AI是指利用数据库的能力驱动AI任务,实现数据存储、技术栈的同构。通过在数据库内集成AI算法,令openGauss具备数据库原生AI计算引擎、模型管理、AI算子、AI原生执行计划的能力,为用户提供普惠AI技术。不同于传统的AI建模流程,DB4AI“一站式”建模可以解决数据在各平台的反复流转问题,同时简化开发流程,并可通过数据库规划出最优执行路径,让开发者更专注于具体业务和模型的调优上,具备同类产品不具备的易用性与性能优势。

306.2 原生DB4AI引擎

openGauss当前版本支持了原生DB4AI能力,通过引入原生AI算子,简化操作流程,充分利用数据库优化器、执行器的优化与执行能力,获得高性能的数据库内模型训练能力。更简化的模型训练与预测流程、更高的性能表现,让开发者在更短时间内能更专注于模型的调优与数据分析上,而避免了碎片化的技术栈与冗余的代码实现。

306.2.1 关键字解析

表 1 DB4AI语法及关键字

306.2.2 使用指导

  1. 本版本支持的算法概述。

    当前版本的DB4AI新增支持算法如下:

    表 2 支持算法

  2. 模型训练语法说明。

  • “CREATE MODEL”语句用于模型的训练和保存。

  • USING关键字指定算法名称。

  • FEATURES用于指定训练模模型的特征,需根据训练数据表的列名添加。

  • TARGET指定模型的训练目标,它可以是训练所需数据表的列名,也可以是一个表达式,例如: price > 10000。

  • WITH用于指定训练模型时的超参数。当超参未被用户进行设置的时候,框架会使用默认数值。

    针对不同的算子,框架支持不同的超参组合:

    表 3 算子支持的超参

    当前各个超参数设置的默认值和取值范围如下:

    表 4 超参的默认值以及取值范围

  • CREATE MODEL

    使用“CREATE MODEL”语句可以进行模型的创建和训练。模型训练SQL语句,选用公开数据集鸢尾花数据集iris。

  • 以multiclass为例,训练一个模型。从tb_iris训练集中指定sepal_length, sepal_width,petal_length,petal_widt为特征列,使用multiclass算法,创建并保存模型iris_classification_model。

    openGauss=# CREATE MODEL iris_classification_model USING xgboost_regression_logistic FEATURES sepal_length, sepal_width,petal_length,petal_width TARGET target_type < 2 FROM tb_iris_1 WITH nthread=4, max_depth=8;
    MODEL CREATED. PROCESSED 1

    上述命令中:

  • 模型保存成功,则返回创建成功信息:

    MODEL CREATED. PROCESSED x
  • 查看模型信息。

    当训练完成后模型会被存储到系统表gs_model_warehouse中。系统表gs_model_warehouse可以查看到关于模型本身和训练过程的相关信息。

    关于模型的详细描述信息以二进制的形式存储在系统表中,用户可用过使用函数gs_explain_model完成对模型的查看,语句如下:

    openGauss=# select * from gs_explain_model("iris_classification_model");
    DB4AI MODEL
    -------------------------------------------------------------
    Name: iris_classification_model
    Algorithm: xgboost_regression_logistic
    Query: CREATE MODEL iris_classification_model
    USING xgboost_regression_logistic
    FEATURES sepal_length, sepal_width,petal_length,petal_width
    TARGET target_type < 2
    FROM tb_iris_1
    WITH nthread=4, max_depth=8;
    Return type: Float64
    Pre-processing time: 0.000000
    Execution time: 0.001443
    Processed tuples: 78
    Discarded tuples: 0
    n_iter: 10
    batch_size: 10000
    max_depth: 8
    min_child_weight: 1
    gamma: 0.0000000000
    eta: 0.3000000000
    nthread: 4
    verbosity: 1
    seed: 0
    booster: gbtree
    tree_method: auto
    eval_metric: rmse
    rmse: 0.2648450136
    model size: 4613
  • 利用已存在的模型做推断任务。

    使用“SELECT”和“PREDICT BY”关键字利用已有模型完成推断任务。

    查询语法:SELECT…PREDICT BY…(FEATURES…)…FROM…;

    openGauss=# SELECT id, PREDICT BY iris_classification (FEATURES sepal_length,sepal_width,petal_length,petal_width) as "PREDICT" FROM tb_iris limit 3;

    id  | PREDICT
    -----+---------
     84 |       2
     85 |       0
     86 |       0
    (3 rows)

    针对相同的推断任务,同一个模型的结果是大致稳定的。且基于相同的超参数和训练集训练的模型也具有稳定性,同时AI模型训练存在随机成分(每个batch的数据分布、随机梯度下降),所以不同的模型间的计算表现、结果允许存在小的差别。

  • 查看执行计划。

    使用explain语句可对“CREATE MODEL”和“PREDICT BY”的模型训练或预测过程中的执行计划进行分析。Explain关键字后可直接拼接CREATE MODEL/ PREDICT BY语句(子句),也可接可选的参数,支持的参数如下:

    表 5 EXPLAIN支持的参数

    示例:

    openGauss=# Explain CREATE MODEL patient_logisitic_regression USING logistic_regression FEATURES second_attack, treatment TARGET trait_anxiety > 50 FROM patients WITH batch_size=10, learning_rate = 0.05;
                                  QUERY PLAN
    -------------------------------------------------------------------------
    Train Model - logistic_regression  (cost=0.00..0.00 rows=0 width=0)
      -> Materialize  (cost=0.00..41.08 rows=1776 width=12)
            -> Seq Scan on patients  (cost=0.00..32.20 rows=1776 width=12)
    (3 rows)
  • 异常场景。

    • 场景十:当模型名在系统表中查找不到,数据库会报ERROR,例如:

      openGauss=# select id, PREDICT BY patient_logistic_regression (FEATURES second_attack,treatment) FROM patients;
      ERROR: There is no model called "patient_logistic_regression".
    • 场景十一:当做推断任务FEATURES的数据维度和数据类型与训练集存在不一致,将报ERROR,并提示错误原因,例如:

      openGauss=# select id, PREDICT BY patient_linear_regression (FEATURES second_attack) FROM patients;
      ERROR: Invalid number of features for prediction, provided 1, expected 2
      CONTEXT: referenced column: patient_linear_regression_pred
      -------------------------------------------------------------------------------------------------------------------------------------
      openGauss=# select id, PREDICT BY patient_linear_regression (FEATURES 1,second_attack,treatment) FROM patients;
      ERROR: Invalid number of features for prediction, provided 3, expected 2
      CONTEXT: referenced column: patient_linear_regression_pre
    • 场景九:当模型名在系统表中查找不到,数据库会报ERROR,例如:

      openGauss=# select gs_explain_model("ecoli_svmc");
      ERROR:  column "ecoli_svmc" does not exist
    • 场景一:当超参数的设置超出取值范围,模型训练失败,返回ERROR,并提示错误,例如:

      openGauss=# CREATE MODEL patient_linear_regression USING linear_regression FEATURES second_attack,treatment TARGET trait_anxiety  FROM patients WITH optimizer='aa';
      ERROR: Invalid hyperparameter value for optimizer. Valid values are: gd, ngd.
    • 场景二:当模型名称已存在,模型保存失败,返回ERROR,并提示错误原因,例如:

      openGauss=# CREATE MODEL patient_linear_regression USING linear_regression FEATURES second_attack,treatment TARGET trait_anxiety  FROM patients;
      ERROR: The model name "patient_linear_regression" already exists in gs_model_warehouse.
    • 场景三:FEATURE或者TARGETS列是*,返回ERROR,并提示错误原因,例如:

      openGauss=# CREATE MODEL patient_linear_regression USING linear_regression FEATURES *  TARGET trait_anxiety  FROM patients;
      ERROR: FEATURES clause cannot be *
      -----------------------------------------------------------------------------------------------------------------------
      openGauss=# CREATE MODEL patient_linear_regression USING linear_regression FEATURES second_attack,treatment TARGET * FROM patients;
      ERROR: TARGET clause cannot be *
    • 场景四:对于无监督学习方法使用TARGET关键字,或者在监督学习方法中不适用TARGET关键字,均会返回ERROR,并提示错误原因,例如:

      openGauss=# CREATE MODEL patient_linear_regression USING linear_regression FEATURES second_attack,treatment FROM patients;
      ERROR: Supervised ML algorithms require TARGET clause
      -----------------------------------------------------------------------------------------------------------------------------
      CREATE MODEL patient_linear_regression USING linear_regression TARGET trait_anxiety  FROM patients;  
      ERROR: Supervised ML algorithms require FEATURES clause
    • 场景五:当进行分类任务时TARGET列的分类只有1种情况,会返回ERROR,并提示错误原因,例如:

      openGauss=# CREATE MODEL ecoli_svmc USING multiclass FEATURES f1, f2, f3, f4, f5, f6, f7 TARGET cat FROM (SELECT * FROM db4ai_ecoli WHERE cat='cp');
      ERROR:  At least two categories are needed
    • 场景六:DB4AI在训练过程中会过滤掉含有空值的数据,当参与训练的模型数据为空的时候,会返回ERROR,并提示错误原因,例如:

      openGauss=# create model iris_classification_model using xgboost_regression_logistic features message_regular target error_level from error_code;
      ERROR: Training data is empty, please check the input data.
    • 场景七:DB4AI的算法对于支持的数据类型是有限制的。当数据类型不在支持白名单中,会返回ERROR,并提示非法的oid,可通过pg_type查看OID确定非法的数据类型,例如:

      openGauss=# CREATE MODEL ecoli_svmc USING multiclass FEATURES f1, f2, f3, f4, f5, f6, f7, cat TARGET cat FROM db4ai_ecoli ;
      ERROR: Oid type 1043 not yet supported
    • 场景八:当GUC参数statement_timeout设置了时长,训练超时执行的语句将被终止:执行CREATE MODEL语句。训练集的大小、训练轮数(iteration)、提前终止条件(tolerance、max_seconds)、并行线程数(nthread)等参数都会影响训练时长。当时长超过数据库限制,语句被终止模型训练失败。

    • 训练阶段。

    • 模型解析。

    • 推断阶段。

    说明: DB4AI特性需要读取数据参与计算,不适用于密态数据库等情况。


    👍 点赞,你的认可是我创作的动力!

    ⭐️ 收藏,你的青睐是我努力的方向!

    ✏️ 评论,你的意见是我进步的财富!


    PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!


    原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。

    请登录后发表评论 登录
    全部评论
    专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

    注册时间:2021-08-27

    • 博文量
      552
    • 访问量
      303601