论文笔记:Exploration of Approaches for In-Database ML[EDBT2023]
这篇工作主要是关于探索在数据库中执行机器学习预测模型的方法,作者提出了两种思路,一种是将模型的预测执行转化为SQL语句,把模型的参数存到模型表中,将模型预测操作转化为事实表和模型表的嵌套查询,从而而将线性代数操作转化为关系代数操作,但是这种方案执行效率较低。然后作者又利用并行模型构建,向量化执行,列存储等技术在数据库中实现了一个专用的模型推理算子。此外作者对目前已有的相关工作进行梳理,将在数据库中执行机器学习预测模型的方法分为四类,即python udf,机器学习系统提供的的原生api,转化为sql语句,数据库内部实现模型预测操作算子。
论文笔记:Blue Elephants Inspecting Pandas: Inspection and Execution of Machine Learning Pipelines in SQL[EDBT2022]
这篇工作是对MLinspect的拓展。主要思路也是对于数据预处理过程中的分布偏移进行检测,不过与MLinspect不同的是,这篇工作把原来由pandas和sklearn执行的预处理算子转换为sql语句,利用数据库的性能优化这些操作的执行时间。具体实现思路是通过python的monkey patch把pipeline中的每一算子转换为sql中的一个视图或cte,然后下放到数据库中去执行,算子执行前后的偏移检测也翻译成sql语句。目前实现支持转化为sql语句的预处理算子有大部分pandas中的关系代数算子以及sklearn中的SimpleImputer,One-Hot-Encoder,Standard Scaler,KBins Discretizer,Binarize等。实验结果表示在数据集较小的时候sql执行是不如python执行的,但当数据集tuples超过10000时sql执行要显著优于python。
论文笔记:Pushing ML Predictions into DBMSs[TKDE2023]
主要思路是把ML pipeline转化为SQL,下推到数据库中直接执行,但是目前只实现了部分预处理算子和模型(线性模型和树模型)。主要的处理思路也是对pipeline的DAG进行分析,提取出其中每个操作算子的参数,然后以此将操作算子转化为对应的sql语句,具体实现利用了select和case语句的嵌套查询。
但是与之前相关工作不同的是,作者提出了一个新的场景:如果特征化操作产生了大量的特征列,此时已经超过了数据库表的列的上限。对此,作者的解决方案将特征列存入(identifier, attribute_name, attribute_value)的三元组表,即将列数转化为行数,从而解决了列数的限制。在实验部分,作者也得出一些结论,比如文本特征提取和神经网络模型并不适合转化为sql执行,线性模型比树模型更适合转化为sql执行等。
论文笔记:End-to-end Optimization of Machine Learning Prediction Queries[SIGMOD2022]
这篇工作主要关于在数据库上的模型预测优化。它将pipeline中的ML算子与sql语句中的关系算子转换到统一的IR上,然后在这基础上对这两类算子进行联合优化,比如根据关系算子对于源数据的修改操作对模型进行修改,和根据模型的输入列的需求对关系算子进行修改的逻辑优化,以及将ml算子转化为sql算子或dnn模型的可选的物理优化。