Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

FeatHub_流批一体的实时特征工程平台

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 25 Anzeige

FeatHub_流批一体的实时特征工程平台

Herunterladen, um offline zu lesen

本次演讲中,我们将介绍 FeatHub,一个由阿里云自研并开源的实时特征平台。我们将介绍 FeatHub 的架构设计,已经完成的工作,以及近期的发展计划。

我们为 FeatHub 设计了易于使用的 Python SDK,来方便用户开发,分享,以及部署特征工程作业到生产环境。FeatHub 目前支持使用 Flink 作为计算引擎来完成流批一体的特征计算,支持在 Kafka,文件系统等多种存储引擎中读取和存储特征。用户可以使用声明式的 API 来定义特征,无需担心特征穿越的问题,也无需使用相对复杂的底层计算引擎 API 来计算特征。我们希望通过提供这些功能,来提升特征工程作业的开发效率,并推动实时特征工程的应用发展。

FeatHub 已经在 https://github.com/alibaba/feathub 开源。欢迎大家尝试使用并提供反馈。

本次演讲中,我们将介绍 FeatHub,一个由阿里云自研并开源的实时特征平台。我们将介绍 FeatHub 的架构设计,已经完成的工作,以及近期的发展计划。

我们为 FeatHub 设计了易于使用的 Python SDK,来方便用户开发,分享,以及部署特征工程作业到生产环境。FeatHub 目前支持使用 Flink 作为计算引擎来完成流批一体的特征计算,支持在 Kafka,文件系统等多种存储引擎中读取和存储特征。用户可以使用声明式的 API 来定义特征,无需担心特征穿越的问题,也无需使用相对复杂的底层计算引擎 API 来计算特征。我们希望通过提供这些功能,来提升特征工程作业的开发效率,并推动实时特征工程的应用发展。

FeatHub 已经在 https://github.com/alibaba/feathub 开源。欢迎大家尝试使用并提供反馈。

Anzeige
Anzeige

Weitere Verwandte Inhalte

Aktuellste (20)

Anzeige

FeatHub_流批一体的实时特征工程平台

  1. 1. FeatHub: 流批一体的实时特征工程平台 林东 阿里巴巴高级技术专家 Apache Flink/Kafka committer
  2. 2. 01 为什么需要FeatHub 02 FeatHub架构和概念 03 FeatHub API展示
  3. 3. 01 为什么需要FeatHub
  4. 4. 目标场景 需要Python环境的 数据科学家 生成实时特征 需要开源方案 支持多云部署
  5. 5. 实时特征工程的痛点 开发难度高 部署难度高 监控难度高 分享难度高 特征穿越 需要手动翻译 性能压力大 特征分布变化 开发工作重复
  6. 6. point-in-time correct语 义 时间 用户ID 最近2分钟点击数 5:00 1 5 6:00 1 10 7:00 1 6 时间 用户ID Label 5:02 1 1 6:03 1 0 6:10 1 1 7:05 1 0 时间 用户ID 最近2分钟点击数 Label 5:02 1 6 1 6:03 1 6 0 6:10 1 6 1 7:05 1 6 0 错误的join 多版本特征 样本数据 训练数据
  7. 7. point-in-time correct语 义 时间 用户ID 最近2分钟点击数 5:00 1 5 6:00 1 10 7:00 1 6 时间 用户ID Label 5:02 1 1 6:03 1 0 6:10 1 1 7:05 1 0 时间 用户ID 最近2分钟点击数 Label 5:02 1 5 1 6:03 1 10 0 6:10 1 10 1 7:05 1 6 0 正确的join 多版本特征 样本数据 训练数据
  8. 8. Feature Store的核心场景 特征开发 特征部署 特征监控 特征分享
  9. 9. Feature Store的核心场景 特征开发 特征部署 特征监控 特征分享 SDK 执行引擎 特征储存 指标 报警 注册 搜索
  10. 10. Feature Store的核心场景 特征开发 特征部署 特征监控 特征分享 SDK 执行引擎 特征储存 指标 报警 注册 搜索 简单易用 point-in-time correct 语义 高吞吐 实时特征 离线储存 在线储存 数值分布变化 实时监控 简单易用
  11. 11. Python SDK 简单易用 快速生产部署 快速开发实验 高性能实时特征 代码开源 处理引擎可扩展 为什么需要FeatHub
  12. 12. 02 FeatHub架构和概念
  13. 13. 架构
  14. 14. 架构 (续)
  15. 15. 核心概念 TableDecscriptor TableDecscriptor TableDecscriptor Transform Transform TableDecscriptor FeatureTable 保存在储存上的 物理特征表 FeatureView 从FeatureTable计算得到的 逻辑特征表 DerivedFeatureView SlidingFeatureView OnDemandFeatureView Transform Expression Join OverWindow SlidingWindow PythonUDF
  16. 16. 核心概念 (续) FlinkProcessor LocalProcessor SparkProcessor Processor Source Sink Table Table KafkaSource FIleSystem Source HiveSource KafkaSink FileSystemSink RedisSink HiveSink
  17. 17. 03 FeatHub API展示
  18. 18. 特征计算功能 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_minutes", 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_minutes", 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调用
  19. 19. 样例场景 Purchase Events - user_id (PK) - item_id - item_count - timestamp Item Price Events - item_id (PK) - price - timestamp 拼接 - user_id (PK) - item_id - item_count - price - timestamp 聚合 - user_id (PK) - item_id - item_count - price - total_payment_last_two_minutes - timestamp 生成机器学习训练数据集
  20. 20. 样例代码 client = FeathubClient( config={ "processor": { "processor_type": "flink", "flink": { "rest.address": "localhost", "rest.port":" 8081" }, }, ... } ) f_total_payment_last_two_minutes = Feature( name="total_payment_last_two_minutes", dtype=types.Float32, transform=OverWindowTransform( expr="item_count * price", agg_func="SUM", window_size=timedelta(minutes=2), group_by_keys=["user_id"], ), ) purchase_events_with_features = DerivedFeatureView( name="purchase_events_with_features", source=purchase_events_source, features=[ "item_price_events.price", f_total_payment_last_two_minutes, ], keep_source_fields=True, ) purchase_events_source = FileSystemSource( name="purchase_events", path="/tmp/data/purchase_events.json", data_format="json", schema=purchase_events_schema, timestamp_field="timestamp", timestamp_format="%Y-%m-%d %H:%M:%S", ) item_price_events_source = FileSystemSource( name="item_price_events", path="/tmp/data/item_price_events.json", data_format="json", schema=item_price_events_schema, keys=["item_id"], timestamp_field="timestamp", timestamp_format="%Y-%m-%d %H:%M:%S", ) 创建FeatHub Client 创建Source 创建FeatureView
  21. 21. 样例代码 (续) result_table = client.get_features( features=purchase_events_with_features ) result_table_df = result_table.to_pandas() print(result_table_df) hdfs_sink = FileSystemSink( path="/tmp/data/output.json", data_format="CSV" ) 获取特征到本地Pandas DF 创建Sink 输出特征到离线储存HDFS result_table.execute_insert( sink=hdfs_sink, allow_overwrite=True )
  22. 22. FeatHub性能优化 • 滑动窗口聚合的特征仅在特征数值变化时输出数据,减少网络带宽使用 • 滑动窗口聚合的特征在窗口为空的时候输出数据,无需下游周期性扫描数据来移除过期数据 • 提供高性能内置UDAF (e.g. VALUE_COUNTS),减少稀疏特征的网络带宽使用量 • E.g. 最近一分钟每个用户点击每种产品分类的数量 • 滑动窗口聚合的特征共用状态,减少计算量和内存使用 (尚未完成) • E.g. 同时计算最近1分钟/5分钟/10分钟/30分钟内的用户点击数 • …
  23. 23. FeatHub未来工作 • 完善LocalProcessor和FlinkProcessor的功能和性能 • 支持常用的离线/在线储存 (e.g. HDFS, Redis) • 支持对接Notebook • 提供可视化UI来访问特征元数据 (e.g. 特征定义,特征血缘) • 支持特征质量监控和报警 • 支持Spark作为处理引擎 • 支持特征授权,鉴权,审计等企业级功能 • …
  24. 24. 欢迎加入FeatHub社区 FeatHub代码库:https://github.com/alibaba/feathub FeatHub代码样例:https://github.com/flink-extended/feathub- examples
  25. 25. THANK YOU 谢 谢 观 看

Hinweis der Redaktion

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

  • 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

  • Processor – 可插拔的计算引擎,用于特征ETL
    LocalProcessor – 使用单机上的CPU来执行特征ETL,方便单机开发调试,无需依赖分布式集群
    FlinkProcessor – 使用分布式Flink集群来执行特征ETL,提供生产所需的高并发,稳定性 etc.

    Feature Registry – 特征元数据中心,用于特征注册,搜索和读取
    LocalRegistry – 使用单机上的内存来储存特征元数据,方便单机开发调试

    FeatureService - 特征在线服务,用于计算/读取/拼接在线特征
    LocalFeatureService – 使用单机上的CPU来计算在线特征,方便单机开发调试



×