书接上文GaussDB高智能--自治运维技术,从索引推荐、分布键推荐、参数调优等三方面介绍了GaussDB的自治运维技术,本篇将从机器学习算法的训练和推理方面对GaussDB的库内AI引擎进行详细解读。
3 库内AI引擎
当前业界商业数据库越来越多将机器学习算法与数据库结合,共同为用户提供简易快捷的科学计算服务。在数据库中,利用机器学习模型,为库内存储的数据提供无需数据搬迁、安全可信、实时高效、可解释的分析能力,已成为各商业数据库的必备能力。
业界主流数据库厂商宣传支持数据库上可以实现AI算法调用,在使用形式和实现上不同。主要流派有两类:1. 通过SQL UDF方式,让调用者直接调用函数来实现AI算法训练和推理;2. 通过扩展SQL语句结合python语言方式,实现机器学习算法的训练和推理。其中MADlib通过Python UDF对外提供接口,SQL语句结构简单,但是UDF的参数过多,且不同算法差异可能会比较大,必须通过查询使用手册才能保证使用正确;同时Python语言执行较慢,无法满足用户对实时分析的诉求。而SQLFlow是基于扩展SQL语句结合python语法方式实现,该组件作为连接数据库与机器学习训练平台之间的桥梁,将需要训练的数据从库中抽取转发只机器学习平台进行训练和推理,将结果返回给用户。这种方法实现快捷,不依赖数据库本身能力,但数据传输涉及数据安全问题,且端到端时间长,在执行效率和安全上均没有优势。
GaussDB提出一种高效库内训练和推理的方案,即在数据库内置机器学习算子,利用数据库资源管理及并发扩展能力,以及结合新硬件相关技术,实现全流程机器学习能力。库内AI引擎的架构思路如下图所示:
在用户接口层,实现SQL-like语法,提供Create Model、Predict等关键字,支持AI算法训练和预测。可支持的AI算法包括:GD(梯度下降法)、KMeans(聚类)、XGBoost、PCA等。
查询优化层提供AI训练执行计划和AI预测执行计划,该计划依据内部统计信息和AI算子调用关系,生成相应执行计划。可以把AI算子看做执行器中的计算单元,例如Join、AGG等,AI算子执行代价基于执行逻辑、获取的数据行数、算法复杂度共同决定。同时在执行计划生成后,可通过Explain语句查看详细的执行开销,分析路径选型的正确性。
在AI底座中,提供超参优化能力,即用户不指定超参数或者指定超参数的范围,自动选择适合的参数,该功能极大提升用户使用的效率,同时达到最佳的训练性能。在执行器中,提供多种AI算子,例如GD算子可支持逻辑回归、分类;KMeans算子支持聚类。在每个算子实现过程中,遵循执行器算子实现逻辑,下层对接Scan算子,上次提供AI算子的训练或推理结果。在训练完成后,训练模型将实时保存到系统表中,用户可以查询模型系统表来获取模型信息。
在存储层,DB4AI提供数据集管理功能,即用户可以抽取某个表或多个表中的列信息,组成一个数据集,用于后续模型训练。数据集管理功能类似git模式提供多版本管理,目的是保障训练数据的一致性。同时在这过程中,可通过特征处理和数据清洗保障数据的可用性。同时对已生成的模型进行管理,包括模型评估、定期模型验证、模型导入、模型导出等能力,在验证模型失效后,模型漂移功能可以进行模型刷新,保障模型可用。
库内AI引擎支持异构计算层,实现CPU和AI算力的统一调度,满足数据库语句执行和AI训练的完美结合。在实现方面,CPU算力,特指ARM及X86芯片,可用于基础机器学习算子调用及并行计算执行;AI算子,例如昇腾及GPU芯片,可用于重度分析算子(Join、AGG)及深度学习算子使用,加速大数据及多层网络场景下的计算需求。
3.1 机器学习算法的训练和推理
在GaussDB内完成机器学习算法的训练和推理的设计流程图如下:
1)使用Create Model语法实现数据库内AI训练和模型存储:
-
通过数据库并行训练算法,实现库内训练加速;
-
通过执行代价估计及资源管控,实现迭代轮次和模型参数最优化;
-
提供可视化执行计划,实现AI可查、可解释性。
举例:
Create Model price_model using logistic_regression Features size, lot Target price < 1000 from Houses;
2)使用Predict By语法实现数据库内AI模型推理:
-
基于数据集和查询特征进行模型归类;
-
优化器通过同类模型的精准度,自适应选择算法,实现最优化模型推理;
-
AI推理算子结合其他执行算子,实现关联分析。
举例:
Select address, Predict By price_model(Features size, lot), size from houses;
1. SGD算子的训练和推理设计
(1)训练接口
SGD执行算子使用梯度下降技术训练ML模型,梯度下降技术是一种一阶迭代优化算法,用于寻找重复步骤中可微函数的局部极值。从未知的模型系数(或权重)开始,在每个步骤(或迭代或周期)扫描一次数据以计算新的梯度,然后再次扫描数据以基于更新的权重计算损失函数。当已执行了最大迭代次数或当迭代之间的损失函数增量小于某个阈值或容差值时,迭代过程结束。
SGD的首字母缩写代表随机梯度下降,数据可以在每次迭代中进行洗牌,但是在我们的实现中,洗牌被委托给未来的一个新的洗牌执行算子。此外,纯SGD算法计算梯度并更新每个元组的权重,但我们的SGD实现是基于批次或数据块的,并且批次的大小被定义为超参数。因此,当批大小足够大,足以容纳输入数据集的所有元组时,SGD就成为批梯度下降求解器,而它只能容纳数据的一个分区,那么它是一个迷你批量梯