今年夏天,我有幸参与了 Google Summer of Code (GSoC) 项目,在为期 12 周的时间里,我将为 Katib 做出贡献,并完成一个名为 “Katib中的Push模式指标收集” 的项目。最初,我是通过前活跃维护者 Ce Gao (gaocegege) 的个人博客了解到 GSoC 和 Kubeflow 的。我对云原生 AI 工具包的想法印象深刻,于是决定深入研究这个领域,学习一些技能来提升我的职业发展和未来。在这篇博客中,我将分享我对 Katib 的个人见解,希望能对那些对云原生、AI 和超参数调优感兴趣的人有所帮助。

问题

该项目旨在提供一个Python SDK API接口,供用户直接将指标推送到 Katib DB。

当前的指标收集器 (Metrics Collector) 实现是基于拉取 (pull-based) 的,由此带来了一些设计问题,例如难以确定抓取指标的频率、性能问题(例如过多 sidecar 容器导致的开销),以及对开发环境的限制(必须支持 sidecar 容器和 admission webhooks)。此外,对于数据科学家来说,他们需要关注训练脚本中打印的指标格式,这很容易出错,且可能难以识别。

解决方案

我们决定为 Katib Python SDK 实现一个新的 API,为用户提供一种基于推送 (push-based) 的方式,将指标直接存储到 Katib DB 中,从而解决由拉取模式指标收集带来的问题。

在新设计中,用户只需在 tune() 函数中设置 metrics_collector_config={"kind": "Push"},并在其目标函数中调用 report_metrics() API 即可将指标直接推送到 Katib DB。不再需要 sidecar 容器,也没有受限的指标日志格式。之后,Trial Controller 将持续从 Katib DB 收集指标并更新 Trial 的状态,这与拉取模式指标收集的过程相同。

如果您对此感兴趣,请参考这篇 文档示例,了解更多详情。

我在 GSoC 期间的贡献

我为 Katib 和 Training-Operator 项目提交了许多 PR(Pull Requests)。其中一部分与我的 GSoC 项目相关,另一些则有助于完善 UT(单元测试)、简化依赖管理以及提高 UI 组件的兼容性。

供参考,编码期大致可分为 3 个阶段

  1. 将提案转换为 KEP,并与导师们讨论架构、API 设计等。(约 4 周)

  2. 根据 KEP 开发基于推送的指标收集接口。(约 8 周)

  3. 编写示例和文档,并向 Kubeflow 社区展示我的工作。

此外,我还提出了一些 issue,不仅描述了我在编码期间遇到的问题和 bug,还为 Katib 和 Training-Operator 提出了未来的改进方向。

有一个 Github Issue 跟踪了 GSoC 编码阶段 Katib 推送模式指标收集的开发进展。如果您对我的工作或 Katib 感兴趣,可以查看此 issue 获取更多详情。

学到的经验

  1. 三思而后码:Andrey 教导我,在编码之前,我们应该仔细思考 API 规范和所有相关细节。这可以显著减少编码期间的工作量,并避免项目的大规模重构。同时,在对架构进行反复思考和重新设计的过程中,我对 Katib 的理解也逐渐清晰。

  2. 深入研究源代码:如今的工程项目极其复杂,需要付出很多努力去理解。熟悉项目的最佳方式是深入研究源代码并运行几个示例。

  3. 沟通:在与他人协作时,沟通是最重要的。准确地表达自己的想法并让别人轻松理解,这不仅在开源社区中是一项重要技能,在公司和团队合作等各种场景中也同样重要。

最后

特别感谢

  1. 感谢我的导师们 @andreyvelich @johnugeorge @tenzen-y,特别是 Andrey。你们在代码库和行业方面的渊博知识给我留下了深刻印象。感谢你们及时回复我的 PR 并始终参加每周会议解决我的待解决问题,我从中受益匪浅。更重要的是,我清楚地记得,那天晚上,你极有耐心地向我解释了 Kubeflow 在行业中的应用,并鼓励我不要怀疑自己,放手去做,探索更多,贡献更多。你点燃了我为云原生 AI 做出贡献的渴望。

  2. 感谢 @gaocegege。你将我推荐给了 Kubeflow 社区。感谢你耐心解答我那些没完没了的“傻问题”。

  3. 感谢 Google。感谢你们为我提供了如此宝贵的机会,让我得以开启我的开源世界之旅!

我坚信,每一步微小的努力都至关重要,社区中的每个人都是独一无二且意义非凡的。毫无疑问,我们的共同努力必将促进 Kubeflow 社区的繁荣发展,使其成为全球范围内在 Kubernetes 上管理 AI 生命周期的最佳社区,并吸引更多业界的关注。届时,将有越来越多的新成员涌入,与我们并肩工作。

再次重申,我将继续为 Kubeflow 做贡献。

如需了解更多关于 Kubeflow 以及即将到来的 GSoC’25 活动的信息,请查看