使用 Apache Iceberg 和 SparkSQL 构建可重现的 ML 系统:开源基础

主要观点:

  • 在生产中构建 ML 系统会遇到数据问题导致模型在开发时表现良好,上线后却性能不佳,传统数据湖在 ML 工作负载所需的事务保证和版本控制方面表现不佳,Apache Iceberg 结合 SparkSQL 为数据湖带来了类似数据库的可靠性。
  • ML 数据可重现性问题常见,如数据漂移、特征管道非确定性、版本控制混乱等,传统数据湖设计初衷不适合 ML 工作,存在诸多问题,如缺乏事务完整性、模式灵活性导致混乱、元数据情况糟糕等,这些会带来隐性成本。
  • Iceberg 的基础知识对 ML 很重要,其时间旅行功能可通过简单 SQL 查询历史表状态,解决可重现性问题;模式演进无需复杂流程,能保持兼容性;ACID 事务支持可安全操作共享数据集。
  • 构建可重现的特征管道需注意分区策略,按查询数据的维度进行分区,如时间分区等,同时要结合数据版本控制和特征存储集成;在生产实现中,通过实际案例展示了 Iceberg 在客户流失预测系统中的应用,包括数据架构、特征工程管道、性能优化和监控操作等方面。
  • 给出了最佳实践和经验教训,如选择表格式要根据需求,避免常见陷阱如过度分区、模式演进错误、查询反模式等,以及迁移策略包括并行系统、优先处理关键数据集等。

关键信息:

  • 数据问题是 ML 系统上线后性能不佳的主要原因,传统数据湖存在诸多不足。
  • Iceberg 的时间旅行、模式演进和 ACID 事务等功能对 ML 很关键。
  • 构建可重现的特征管道需注意分区、数据版本控制和特征存储集成。
  • 生产实现中要注重性能优化和监控操作,遵循最佳实践和迁移策略。

重要细节:

  • 数据漂移会使特征分布随时间变化,特征管道非确定性,版本控制大多为手动流程。
  • Iceberg 的时间旅行通过维护表元数据的快照实现,可用于比较不同时间的特征分布等。
  • 模式演进可添加、重命名、重新排序列等,且不破坏兼容性。
  • ACID 事务支持多写者同时工作,防止数据损坏和不一致读取。
  • 分区策略要按查询数据的维度进行,如时间分区,避免过度分区。
  • 数据版本控制可通过 Iceberg 的快照实现,与 MLflow 等集成。
  • 特征存储集成可提供一致的特征定义,用于训练和推理。
  • 生产实现中要注意性能优化的文件大小、压缩选择、数据布局等,以及监控数据质量和性能。
  • 选择表格式要根据需求,Iceberg 适合需要强一致性保证等的场景,Delta Lake 适合 Databricks 生态,Hudi 适合流式用例等。
  • 迁移时要谨慎规划,并行系统验证,优先处理关键数据集,更新 SQL 利用 Iceberg 功能,分阶段迁移。
阅读 13
0 条评论