SQLFlow|让AI造福金融,支付宝端到端AI系统SQLFlow实践( 三 )


SQLFlow|让AI造福金融,支付宝端到端AI系统SQLFlow实践
文章图片

在模型训练完成之后 , 我们可以使用下面的 SQL语句进行预测:

SELECT * FROM iris.pred
TO PREDICT iris.pred_result.class
USING my_dnn_model;
我们使用的预测表 iris.pred 的 class 列是空的 , 是希望输出的结果 。 SQL 语句中 TO PREDICT iris.pred_result.class 指定预测结果输出到表 iris.pred_result 的 class 列 。 USING my_dnn_model 指定使用之前训练的 my_dnn_model 这个模型来预测新的数据 , 这样 SQLFlow 将预测的结果输出到表:iris.pred_result 的 class 列 。
有时 , 我们希望进一步地了解模型 , 模型究竟是怎么通过输入得到输出 , 就需要「解释」训练好的模型 , 看到底哪些输入会如何影响模型的输出 。 SQLFlow深度集成了SHAP和Tensorflow的模型解释功能 , 只需要编写如下的SQL语句:
SELECT * FROM iris.test TO EXPLAIN my_dnn_model;
在使用 Jupyter Notebook 的情况下可以输出下面的模型解释结果的图 。 从图中可以看到 , 输入数据中的特征 petal_length 对模型判断鸢尾花的类别起到至关重要的帮助 。
SQLFlow|让AI造福金融,支付宝端到端AI系统SQLFlow实践
文章图片

SQLFlow目前提供了充足的常用模型库 , 使得我们可以快速使用 SQL 语句实验、验证最终构建 AI Pipeline 。 目前已经支持的模型包括深度学习常用的网络包括 DNN, RNN, LSTM 的分类、回归 , 基于XGBoost的树模型的分类回归以及 Deep Embedding Clustring , kmeans聚类模型 , 还有常见的金融行业模型包括评分卡模型 , ARIMA, STL时间序列模型等 。
使用SQL程序构建端到端AI工作流 SQLFlow 不仅可以使用SQL语句完成 AI 应用中的模型训练 , 评估 , 预测 , 解释等单个任务 , 还可以将一整个SQL 程序(包含许多SQL语句的一个SQL程序)编译成为一个完整的工作流任务执行 。 在之前列出的「构建AI应用的常见流程」中 , SQLFlow已经支持和计划支持的步骤标注在了图中 。
SQLFlow|让AI造福金融,支付宝端到端AI系统SQLFlow实践
文章图片

其中绿色标注的是目前 SQLFlow 已经支持的 。 SQLFlow 可以支持多种 SQL 引擎的方言 , 包括MySQL, Hive, MaxCompute , 并在逐步扩展 。 不论 SQLFlow 对接的是哪种数据库引擎 , 只要是当前对接的数据库支持的 SQL 语句 , 都可以被SQLFlow识别并发送至对应引擎执行 , 以此来支持使用SQL语言完成的数据抽取、预处理的工作 。 SQLFlow还计划使用 TO RUN 关键字来拓展自定义数据预处理、特征工程的能力 。 SQLFlow在训练时可以支持可选的 COLUMN 从句 , 将支持多种常见的数据转换的操作 , 比如归一化、随机化、Embedding、分桶等 。 另外 , SQLFlow 也计划支持可以直接将训练好的模型部署到在线 Serving 的系统 。
这样 , 我们可以编写一大段 SQL 语句 , 完全交给SQLFlow 编译和执行 。 包括使用JOIN操作的SQL语句 , 从各个表抽取需要的数据 , 使用标准SQL完成预处理或者使用自定义函数完成预处理 , 最后开始训练和预测的 SQL 语句 。
SQLFlow|让AI造福金融,支付宝端到端AI系统SQLFlow实践
文章图片

对于这样的一个包含许多语句的 SQL 程序 , SQLFlow 会将其解析 , 编译成一个可以在Kubernetes + Argo集群上运行的 workflow 。 workflow 中每一个步骤(step)可以是执行标准的 SQL , 也可以是执行分布式模型训练或预测任务 。 这个Workflow 会被提交到 Kubernetes 集群上 , 交由Argo Workflow Engine调度执行 。 这个workflow的执行结果会从Kubernetes集群返回到用户 。
通常情况 , 使用SQL语句编写的一个SQL程序 , 会被编译成一个顺序的 workflow , step by step 地执行 。 但有些 SQL 语句的 step 不是相互依赖的 , 可以并发地执行 。 如果我们使用如Hive 这样的引擎 , 同时提交两个 SQL 语句 , 其实是可以生成2个 Map-Reduce 任务并发的在集群上执行的 。 SQLFlow 会自动的分析 SQL 程序中的 SQL 语句之间的依赖关系 , 并尽量的增大SQL程序的并发度 , 生成一个具有依赖关系 workflow 执行 , 最大限度的利用集群资源 , 降低整段 SQL程序的执行时间 。 这个功能 , 省去了很多传统平台上 , 用户需要手动的构建任务和任务之间依赖关系的工作 , 因为所有的任务都可以用 SQL 语言描述 , 计算的依赖图自然可以自动生成 。
SQLFlow|让AI造福金融,支付宝端到端AI系统SQLFlow实践
文章图片

使用 SQLFlow Model Zoo 沉淀模型 在构建AI应用时 , 另一个关键的任务就是需要编写模型定义的代码 。 SQLFlow 社区提供了 Model Zoo 框架 , 方便模型开发的同学不断的沉淀应用场景为通用的模型 , 并贡献到私有或公有的模型库 , 减少业务和开发之间的沟通成本 。


推荐阅读