半小时,将你的 Spark SQL 模型变为在线服务
SparkSQL在机器学习场景中应用
第四范式已经在很多行业落地了上万个AI应用,比如在金融行业的反欺诈,媒体行业的新闻推荐,能源行业管道检测,而SparkSQL在这些AI应用中快速实现特征变换发挥着重要的作用
SparkSQL在特征变换主要有一下几类
多表场景,用于表之间拼接操作,比如交易信息表去拼接账户表
使用udf进行简单的特征变换,比如对时间戳进行hour函数处理
使用时间窗口和udaf进行时序类特征处理,比如计算一个人最近1天的消费金额总和
SparkSQL到目前为止,解决很好的解决离线模型训练特征变换问题,但是随着AI应用的发展,大家对模型的期望不再只是得出离线调研效果,而是在真实的业务场景发挥出价值,而真实的业务场景是模型应用场景,它需要高性能,需要实时推理,这时候我们就会遇到以下问题
多表数据离线到在线怎么映射,即批量训练过程中输入很多表,到在线环境这些表该以什么形式存在,这点也会影响整个系统架构,做得好能够提升效率,做得不好就会大大增加模型产生业务价值的成本
SQL转换成实时执行成本高,因为在线推理需要高性能,而数据科学家可能做出成千上万个特征,每个特征都人肉转换,会大大增加的工程成本
离线特征和在线特征保持一致困难,手动转换就会导致一致性能,而且往往很难一致
离线效果很棒但是在线效果无法满足业务需求
在具体的反欺诈场景,模型应用要求tp99 20ms去检测一笔交易是否是欺诈,所以对模型应用性能要求非常高
第四范式特征工程数据库是如何解决这些问题
通过特征工程数据库让SparkSQL的能力得到了补充
以数据库的形式,解决了离线表到在线的映射问题,我们对前面给出的答案就是离线表是怎么分布的,在线也就怎么分布
通过同一套代码去执行离线和在线特征转换,让在线模型效果得到了保证
数据科学家与业务开发团队的合作以sql为传递介质,而不再是手工去转换代码,大大提升模型迭代效率
通过llvm加速的sql,相比scala实现的spark2.x和3.x在时序复杂特征场景能够加速2~3倍,在线通过in-memory的存储,能够保证sql能够在非常低延迟返回结果
快速将spark sql 模型变成实时服务demo
demo的模型训练场景为预测一次打车行程到结束所需要的时间,这里我们将使用fedb ,pyspark,lightgbm等工具最终搭建一个http 模型推理服务,这也会是spark在机器学习场景的实践
整个demo200多行代码,制作时间不超过半个小时
train_sql.py 特征计算与训练, 80行代码
predict_server.py 模型推理http服务, 129行代码
场景数据和特征介绍
整个训练数据如下样子
样例数据
场景特征变换sql脚本
特征变换
我们选择了vendorid 和 passengercount 两个纬度做时序特征
执行模型训练过程,最终产生model.txt
模型推理过程
导入数据代码
import
注:train.csv为训练数据csv格式版本
模型推理逻辑
predict.py
最终执行效果
运行demo请到https://github.com/4paradigm/SparkSQLWithFeDB
添加小助手微信,进入交流群,申请视频教程。
评论