SlideShare a Scribd company logo
1 of 20
FeatHub: 流批一体的实时特征工程平台
林东
阿里巴巴高级技术专家
Apache Flink / Kafka PMC
2023年2月26日
01 为什么需要 FeatHub
02 FeatHub 架构和核心概念
03 FeatHub API和内置优
化
为什么需要 FeatHub
3
01
目标场景
需要Python环境的
数据科学家
需要有状态的
实时特征
需要开源方案
支持多云部署
Python vs. SQL
Python的优势:
- 适合熟悉Python的用户
- 对接基于Python的机器学习软件生态 (e.g. Pandas, PyTorch)
- 表达能力强 (e.g. Python UDF,SQL DSL)
- 高复杂度作业的代码可读性高 (e.g. for-loop, function)
SQL的优势:
- 适合熟悉数据库开发经验的用户
- 代码简洁
- 平台运维简单 (e.g. 不需要支持Python UDF)
实时特征工程的痛点
开发难度高 部署难度高 监控难度高 分享难度高
特征穿越
需要手动翻译
性能压力大
特征分布变化 开发工作重复
Feature Store的核心场景
特征开发 特征部署 特征监控 特征分享
Feature Store的核心场景
特征开发 特征部署 特征监控 特征分享
Python
SDK
执行引擎 特征储存 指标 报警 注册 搜索
Feature Store的核心场景
特征开发 特征部署 特征监控 特征分享
Python
SDK
执行引擎 特征储存 指标 报警 注册 搜索
简单易用
point-in-time correct
语义
高吞吐
实时特征
离线储存
在线储存
数值分布变化
实时监控
简单易用
Python SDK 简单易用
代码开源
实时特征
流批一体
内置Flink优化
处理引擎可扩展
为什么需要FeatHub
FeatHub架构和核心概念
1
02
架构
架构 (续)
核心概念
TableDecscriptor TableDecscriptor TableDecscriptor
Transform Transform
TableDecscriptor
FeatureTable
保存在储存上的
物理特征表
FeatureView
从FeatureTable计算得到的
逻辑特征表
DerivedFeatureVi
ew
SlidingFeatureVie
w
OnDemandFeatureV
iew
Transform
Expressio
n
Join
OverWindo
w
SlidingWindo
w
PythonU
DF
FeatHub API 和内置优
化
5
03
特征计算功能
f_price = Feature(
name="price",
dtype=types.Float32,
transform=JoinTransform(
table_name="price_updates",
feature_name="price"
),
keys=["item_id"],
)
f_total_payment_last_two_minutes =
Feature(
name="total_payment_last_two_minute
s",
dtype=types.Float32,
transform=SlidingWindowTransform(
expr="item_count * price",
agg_func="SUM",
window_size=timedelta(minutes=2),
step_size=timedelta(minutes=1),
group_by_keys=["user_id"]
)
)
f_total_payment_last_two_minutes =
Feature(
name="total_payment_last_two_minute
s",
dtype=types.Float32,
transform=OverWindowTransform(
expr="item_count * price",
agg_func="SUM",
window_size=timedelta(minutes=2),
group_by_keys=["user_id"]
)
)
特征拼接 Over窗口聚合 滑动窗口聚合
f_trip_time_duration = Feature(
name="f_trip_time_duration",
dtype=types.Int32, FeatHub性能优化
transform=
"UNIX_TIMESTAMP(taxi_dropoff_datetime) -
UNIX_TIMESTAMP(taxi_pickup_datetime)",
)
内置函数调用
f_lower_case_name = Feature(
name="lower_case_name",
dtype=types.String,
transform=PythonUdfTransform(lambda row:
row["name"].lower()),
)
Python UDF调用
内置优化
• 滑动窗口聚合的特征仅在特征数值变化时输出数据,减少CPU和网络使用
• 滑动窗口聚合的特征共用状态,减少CPU和内存使用
• E.g. 同时计算最近1分钟/5分钟/10分钟/30分钟内的用户点击数
• 支持使用迟到的数据来更新滑动窗口结果,最大化数据一致性
FeatHub未来工作
• 计算:完善三种Processor (i.e. Flink, Spark, Local) 的功能和性能
• 储存:支持更多常用的离线/在线储存 (e.g. HDFS, Redis)
• 元数据:支持特征版本控制,特征血缘
• 监控:支持特征质量监控和报警
• 支持特征授权,鉴权,审计等企业级功能
• …
相关链接
FeatHub代码库:https://github.com/alibaba/feathub
FeatHub代码样例:https://github.com/flink-extended/feathub-
examples
Thank You
谢 谢

More Related Content

Similar to FeatHub_GAIDC_2022.pptx

Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AIKo Ko
 
Postgre sql intro 0
Postgre sql intro 0Postgre sql intro 0
Postgre sql intro 0March Liu
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvementsXinchen Hui
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心Du Yamin
 
GaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfGaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfLeon Gao(高磊)
 
腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介areyouok
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)FLASH开发者交流会
 
用简单语言构建复杂系统
用简单语言构建复杂系统用简单语言构建复杂系统
用简单语言构建复杂系统Leo Zhou
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Zhenzhong Xu
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南HonestQiao
 
200701011
200701011200701011
2007010115045033
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)Wei Sun
 
Simple tech-talk
Simple tech-talkSimple tech-talk
Simple tech-talkliltos
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯liuts
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 
Python intermediate tutorial
Python intermediate tutorialPython intermediate tutorial
Python intermediate tutorialcri fan
 

Similar to FeatHub_GAIDC_2022.pptx (20)

Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
 
Postgre sql intro 0
Postgre sql intro 0Postgre sql intro 0
Postgre sql intro 0
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
GaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfGaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdf
 
腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
用简单语言构建复杂系统
用简单语言构建复杂系统用简单语言构建复杂系统
用简单语言构建复杂系统
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
 
200701011
200701011200701011
200701011
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
Simple tech-talk
Simple tech-talkSimple tech-talk
Simple tech-talk
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
 
Python intermediate tutorial
Python intermediate tutorialPython intermediate tutorial
Python intermediate tutorial
 
Python in vir
Python in virPython in vir
Python in vir
 

FeatHub_GAIDC_2022.pptx

Editor's Notes

  1. SDK简单易用:基于Python的SDK,可以插入Python/Java/C++ UDF, 贴近数据科学家的开发习惯 支持快速实验:数据科学家可以在单机运行实验,无需依赖远程分布式集群 支持快速部署:数据科学家无需改代码就能完成从实验到生产的切换 支持实时特征:支持基于Flink的原生实时特征计算,实现流批一体 处理引擎可扩展: 处理引擎框架能被扩展来支持Spark, 公司内部自研的引擎 etc. 开源且支持本地化部署:支持多云,不绑定任何云服务
  2. 开发难度高:需要较大的工作量来避免特征穿越问题 部署难度高:数据科学家需要工程师支持完成特征的高性能在线部署 监控难度高:需要较大的工作量来发现和解决特征质量问题 分享难度高:缺乏元数据中心来方便开发者注册/搜索/复用特征定义和特征数据
  3. 特征开发:提供简单易用的SDK来定义特征,避免特征穿越问题,提升开发效率 特征部署:将特征定义自动翻译成高性能分布式数据处理作业 (e.g. Flink, Spark),减少额外的开发工作 特征监控:提供丰富的metric以及报警,来及时发现,定位以及解决特征质量问题,提升机器学习推理效果 特征分享:提供SDK以及UI来方便开发者注册,搜索和读取特征。鼓励合作分享,减少重复的开发工作
  4. 特征开发:提供简单易用的SDK来定义特征,避免特征穿越问题,提升开发效率 特征部署:将特征定义自动翻译成高性能分布式数据处理作业 (e.g. Flink, Spark),减少额外的开发工作 特征监控:提供丰富的metric以及报警,来及时发现,定位以及解决特征质量问题,提升机器学习推理效果 特征分享:提供SDK以及UI来方便开发者注册,搜索和读取特征。鼓励合作分享,减少重复的开发工作
  5. 容易使用的特征开发SDK 支持丰富的数据源和数据储存 定义具有point-in-time correctness的丰富的特征计算逻辑 特征部署/计算/储存 输出特征到离线存储 (e.g. HDFS) 用于离线训练 输出特征到在线存储 (e.g. Redis) 用于在线推理,支持基于时间的覆盖规则 提供高吞吐,低延迟的实时特征计算 特征质量监控 监控特征作业延迟,稳定性 etc. 监控特征数值分布变化,异常数值比例 etc. 特征元数据中心 支持特征注册,搜索和读取
  6. SDK简单易用:基于Python的SDK,可以插入Python/Java/C++ UDF, 贴近数据科学家的开发习惯 支持快速实验:数据科学家可以在单机运行实验,无需依赖远程分布式集群 支持快速部署:数据科学家无需改代码就能完成从实验到生产的切换 支持实时特征:支持基于Flink的原生实时特征计算,实现流批一体 处理引擎可扩展: 处理引擎框架能被扩展来支持Spark, 公司内部自研的引擎 etc. 开源且支持本地化部署:支持多云,不绑定任何云服务
  7. TableDescriptor – 声明式的table定义,代表一组特征 FeatureTable – 代表具有物理位置的table (e.g. KafkaSource, FileSystemSink) FeatureView – 代表对某个table应用Transform逻辑所得到的table DerivedFeatureView – 支持单行计算,Over窗口聚合,以及table join SlidingFeatureView – 支持单行计算和滑动窗口聚合 OnDemandFeatureView – 支持单行计算和table join。用于特征在线计算 Transformation – 声明式的特征计算逻辑 ExpressionTransform – 表达单行的计算逻辑 (e.g. x + y * z) JoinTransform – 表达多个table之间的特征拼接 OverWindowTransform – 表达基于Over窗口聚合的计算逻辑 SlidingWindowTransform – 表达基于滑动窗口聚合的计算逻辑 PythonUDFTransform – 支持用户自定义的Python UDF …