From a5275c3f0f87f08bfcb4817c6eef398355f24023 Mon Sep 17 00:00:00 2001 From: Electronic-Waste <2690692950@qq.com> Date: Sat, 28 Sep 2024 15:42:16 +0800 Subject: [PATCH 01/12] doc: add a post about push-based metrics collection. Signed-off-by: Electronic-Waste <2690692950@qq.com> --- ...24-summary-push-basd-metrics-collection.md | 63 ++++++++++++++++++ .../push-based-metrics-collection.png | Bin 0 -> 126904 bytes 2 files changed, 63 insertions(+) create mode 100644 _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md create mode 100644 images/2024-09-28-gsoc-2024-summary-push-based-metrics-collection/push-based-metrics-collection.png diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md new file mode 100644 index 00000000..c34bbe21 --- /dev/null +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -0,0 +1,63 @@ +--- +title: "Kubeflow and Me: A Story Started with Push-based Metrics Collection" +layout: post +toc: false +comments: true +image: images/logo.png +hide: false +categories: [gsoc] +permalink: /gsoc-2024-project-4/ +author: "Shao Wang(Electronic-Waste)" +--- + +This summer, I gained a precious opportunity to participate in the Google Summer of Code(GSoC), in which I would contribute to Katib and fulfill a project named ["Push-based Metrics Collection in Katib"](https://www.kubeflow.org/events/gsoc-2024/#project-6-push-based-metrics-collection-for-katib) within 12 weeks. +Firstly, I got to know about GSoC and Kubeflow with the recommendation from the former active maintainer Ce Gao(gaocegege)'s personal blog. And deeply impressed by the idea of cloud native AI toolkits, I decided to have a dip into this area and learn some skills to enhance my competence for career life in the future. +In the blog, I'll provide my personal insight into Katib, for those who are interested in cloud native, AI, and hyperparameters tuning. + +## Goal + +The project aims to provide a Python SDK API interface for users to push metrics to Katib DB directly. + +The current implementation of Metrics Collector is pull-based, raising design problems such as determining the frequency at which we scrape the metrics, performance issues like the overhead caused by too many sidecar containers, and restrictions on developing environments that must support sidecar containers and admission webhooks. And also, for data scientists, they need to pay attention to the format of metrics printed in the training scripts, which is error prone and may be hard to recognize. + +Thus, we decided to implement a new API for Katib Python SDK to offer users a push-based way to store metrics directly into the Kaitb DB and resolve those issues raised by pull-based metrics collection. + +![](../images/2024-09-28-gsoc-2024-summary-push-based-metrics-collection/push-based-metrics-collection.png) + +## What I did in GSoC Project + +I raised numerous PRs for the Katib and Training-Operator project. Some of them are related to my GSoC project, and others may contribute to the completeness of UTs, simplicity of dependency package, and the compatibility of UI component, etc. + +For reference, the coding period can be rougly divided into 3 stages: + +1. Convert the proposal to KEP and discuss with mentors about the architecture, API design, etc. (~4 weeks) + +2. Develop push-based metrics collection interface according to the KEP. (~8 weeks) + +3. Write some examples and documentations & Present my work to Kubeflow Community. + +Also, I raised some issues not only to describe the problems and bugs I met during the coding period, but also to suggest the future enhancement direction for Katib and Training-Operator. + +There is an [Github Issue](https://github.com/kubeflow/katib/issues/2340) tracks the progress of developing push-based metrics collection for katib during the GSoC coding phase. If interested in my work or Katib, you can check this issue for more details. + +## Lessons I Learned during the Project + +1. **Think Twice, Code Once**: Andrey taught me that we should think of the API specification and all the related details before coding. This can significantly reduce the workload of the coding period and avoid big refactor of the project. Meanwhile, my understanding of Katib got clear gradually during the over-and-over rounds of re-think and re-design of the architecture. + +2. **Dive into the Source Code**: Engineering projects nowadays are extremely complex and need much effort to understand them. The best way to get familiar with the project is to dive into the source code and run several examples. + +3. **Communication**: Communication is the most important thing when we collaborate with others. Expressing your idea precisely and making others understand you easily are significant skills not only in open source community but also in various scenes such as company and group works. + +## In the End + +Special Thanks: + +1. To my mentors [@andreyvelich](https://github.com/andreyvelich) [@johnugeorge](https://github.com/johnugeorge) [@tenzen-y](https://github.com/tenzen-y), especially to Andrey. Your great knowledge about the code base and the industry impressed me a lot. Thanks for your timely response to my PRs and for always attending the weekly meetings to solve my pending problems, from which I benefited a lot. What's more, I can well remember that, in that night, you explained the usage of Kubeflow in the industry to me with greate patience, and encouraged me not to doubt about myself, just do it and explore more, contribute more. You ignite the flame of my desire to contribute to cloud native AI. + +2. To [@gaocegege](https://github.com/gaocegege). You recommend me to the Kubeflow Community. Thanks for your patient answers for my endless silly questions. + +3. To Google. Thanks for offering such a precious opportunity for me to begin my journey in the open source world! + +I hold a firm belief that every small step counts, and everybody in the community is unique and of great significance. There is no doubt that our joint efforts will surely contribute to the flourishing of our Kubeflow Community, make it the world-best community managing AI lifecycle on Kubernetes, and attract much more attention from the industry. Then, more and more new comers will pour in and work along with us. + +Again, I'll continue to contribute to Kubeflow. \ No newline at end of file diff --git a/images/2024-09-28-gsoc-2024-summary-push-based-metrics-collection/push-based-metrics-collection.png b/images/2024-09-28-gsoc-2024-summary-push-based-metrics-collection/push-based-metrics-collection.png new file mode 100644 index 0000000000000000000000000000000000000000..4d382adcbde0ffc246449a3023b2e116088102fd GIT binary patch literal 126904 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 literal 0 HcmV?d00001 From ca3fc14040d53fa87a971a6d722ffe8c638c35f6 Mon Sep 17 00:00:00 2001 From: Electronic-Waste <2690692950@qq.com> Date: Sat, 28 Sep 2024 15:49:28 +0800 Subject: [PATCH 02/12] doc: update permalink. Signed-off-by: Electronic-Waste <2690692950@qq.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index c34bbe21..da735293 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -6,7 +6,7 @@ comments: true image: images/logo.png hide: false categories: [gsoc] -permalink: /gsoc-2024-project-4/ +permalink: /gsoc-2024-project-6/ author: "Shao Wang(Electronic-Waste)" --- From 75018df0f018e5ef18620fdc3852dac5230cdaaf Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 09:58:19 +0800 Subject: [PATCH 03/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index da735293..3dff15a5 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -11,7 +11,7 @@ author: "Shao Wang(Electronic-Waste)" --- This summer, I gained a precious opportunity to participate in the Google Summer of Code(GSoC), in which I would contribute to Katib and fulfill a project named ["Push-based Metrics Collection in Katib"](https://www.kubeflow.org/events/gsoc-2024/#project-6-push-based-metrics-collection-for-katib) within 12 weeks. -Firstly, I got to know about GSoC and Kubeflow with the recommendation from the former active maintainer Ce Gao(gaocegege)'s personal blog. And deeply impressed by the idea of cloud native AI toolkits, I decided to have a dip into this area and learn some skills to enhance my competence for career life in the future. +Firstly, I got to know about GSoC and Kubeflow with the recommendation from the former active maintainer Ce Gao(gaocegege)'s personal blog. And I was deeply impressed by the idea of cloud native AI toolkits, I decided to dive into this area and learn some skills to enhance my career and future. In the blog, I'll provide my personal insight into Katib, for those who are interested in cloud native, AI, and hyperparameters tuning. ## Goal From 1abb9c1f063fe9599e0343d84c9215fc71da941f Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 09:59:10 +0800 Subject: [PATCH 04/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 3dff15a5..264b5ce9 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -24,7 +24,7 @@ Thus, we decided to implement a new API for Katib Python SDK to offer users a pu ![](../images/2024-09-28-gsoc-2024-summary-push-based-metrics-collection/push-based-metrics-collection.png) -## What I did in GSoC Project +## What I did in the GSoC Project I raised numerous PRs for the Katib and Training-Operator project. Some of them are related to my GSoC project, and others may contribute to the completeness of UTs, simplicity of dependency package, and the compatibility of UI component, etc. From 906f01ad29993698ca8925d79594c7d8e793979d Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 09:59:46 +0800 Subject: [PATCH 05/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 264b5ce9..ecf2db98 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -26,7 +26,7 @@ Thus, we decided to implement a new API for Katib Python SDK to offer users a pu ## What I did in the GSoC Project -I raised numerous PRs for the Katib and Training-Operator project. Some of them are related to my GSoC project, and others may contribute to the completeness of UTs, simplicity of dependency package, and the compatibility of UI component, etc. +I raised numerous PRs for the Katib and Training-Operator project. Some of them are related to my GSoC project, and others may contribute to the completeness of UTs (Unit Tests), simplicity of dependency management, and the compatibility of the UI component. For reference, the coding period can be rougly divided into 3 stages: From dc5612ae274fa0676f259534c83ba06219f42192 Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:00:29 +0800 Subject: [PATCH 06/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index ecf2db98..024c56e4 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -32,7 +32,7 @@ For reference, the coding period can be rougly divided into 3 stages: 1. Convert the proposal to KEP and discuss with mentors about the architecture, API design, etc. (~4 weeks) -2. Develop push-based metrics collection interface according to the KEP. (~8 weeks) +2. Develop a push-based metrics collection interface according to the KEP. (~8 weeks) 3. Write some examples and documentations & Present my work to Kubeflow Community. From 2079fae841ffbb9d7184fd2a84c509d07d7650a1 Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:00:56 +0800 Subject: [PATCH 07/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 024c56e4..7418c3a6 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -34,7 +34,7 @@ For reference, the coding period can be rougly divided into 3 stages: 2. Develop a push-based metrics collection interface according to the KEP. (~8 weeks) -3. Write some examples and documentations & Present my work to Kubeflow Community. +3. Write some examples and documentation & Present my work to the Kubeflow Community. Also, I raised some issues not only to describe the problems and bugs I met during the coding period, but also to suggest the future enhancement direction for Katib and Training-Operator. From 16dc9d1fa5da4a37d1b9553ecbca7fef1fc7f503 Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:01:49 +0800 Subject: [PATCH 08/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 7418c3a6..02a56e0b 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -46,7 +46,7 @@ There is an [Github Issue](https://github.com/kubeflow/katib/issues/2340) tracks 2. **Dive into the Source Code**: Engineering projects nowadays are extremely complex and need much effort to understand them. The best way to get familiar with the project is to dive into the source code and run several examples. -3. **Communication**: Communication is the most important thing when we collaborate with others. Expressing your idea precisely and making others understand you easily are significant skills not only in open source community but also in various scenes such as company and group works. +3. **Communication**: Communication is the most important thing when collaborating with others. Expressing your idea precisely and making others understand you easily are significant skills not only in the open source community but also in various scenarios such as at a company and in group work. ## In the End From 6bfcb8c2cd5c1fb6a58da60dd0cb6292ac3af1cf Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:02:31 +0800 Subject: [PATCH 09/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 02a56e0b..2eb4337b 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -30,7 +30,7 @@ I raised numerous PRs for the Katib and Training-Operator project. Some of them For reference, the coding period can be rougly divided into 3 stages: -1. Convert the proposal to KEP and discuss with mentors about the architecture, API design, etc. (~4 weeks) +1. Convert the proposal to a KEP and discuss the architecture, API design, etc. (~4 weeks) with the mentors 2. Develop a push-based metrics collection interface according to the KEP. (~8 weeks) From d3d1125e070899f5a53fd4d5ee6ac8357c04d056 Mon Sep 17 00:00:00 2001 From: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:02:46 +0800 Subject: [PATCH 10/12] Update _posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md Co-authored-by: Francisco Arceo Signed-off-by: Shao Wang <77665902+Electronic-Waste@users.noreply.github.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 2eb4337b..b5b97eb2 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -36,7 +36,7 @@ For reference, the coding period can be rougly divided into 3 stages: 3. Write some examples and documentation & Present my work to the Kubeflow Community. -Also, I raised some issues not only to describe the problems and bugs I met during the coding period, but also to suggest the future enhancement direction for Katib and Training-Operator. +Also, I raised some issues not only to describe the problems and bugs I met during the coding period, but also to suggest the future enhancement direction for Katib and the Training-Operator. There is an [Github Issue](https://github.com/kubeflow/katib/issues/2340) tracks the progress of developing push-based metrics collection for katib during the GSoC coding phase. If interested in my work or Katib, you can check this issue for more details. From aafd4bd837106d0aa2acdc31c222b413fc29caf5 Mon Sep 17 00:00:00 2001 From: Electronic-Waste <2690692950@qq.com> Date: Thu, 27 Feb 2025 10:05:08 +0800 Subject: [PATCH 11/12] fix: fix lint error. Signed-off-by: Electronic-Waste <2690692950@qq.com> --- ...2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index b5b97eb2..245fde8d 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -38,7 +38,7 @@ For reference, the coding period can be rougly divided into 3 stages: Also, I raised some issues not only to describe the problems and bugs I met during the coding period, but also to suggest the future enhancement direction for Katib and the Training-Operator. -There is an [Github Issue](https://github.com/kubeflow/katib/issues/2340) tracks the progress of developing push-based metrics collection for katib during the GSoC coding phase. If interested in my work or Katib, you can check this issue for more details. +There is an [Github Issue](https://github.com/kubeflow/katib/issues/2340) tracks the progress of developing push-based metrics collection for katib during the GSoC coding phase. If you are interested in my work or Katib, please can check this issue for more details. ## Lessons I Learned during the Project From 5cf3a42edf836d16fb3796f861ad5939c33b24e6 Mon Sep 17 00:00:00 2001 From: Electronic-Waste <2690692950@qq.com> Date: Thu, 27 Feb 2025 10:23:51 +0800 Subject: [PATCH 12/12] fix: fix the blog according to the review. Signed-off-by: Electronic-Waste <2690692950@qq.com> --- ...24-summary-push-basd-metrics-collection.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md index 245fde8d..d77cdbf3 100644 --- a/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md +++ b/_posts/2024-09-28-gsoc-2024-summary-push-basd-metrics-collection.md @@ -14,17 +14,19 @@ This summer, I gained a precious opportunity to participate in the Google Summer Firstly, I got to know about GSoC and Kubeflow with the recommendation from the former active maintainer Ce Gao(gaocegege)'s personal blog. And I was deeply impressed by the idea of cloud native AI toolkits, I decided to dive into this area and learn some skills to enhance my career and future. In the blog, I'll provide my personal insight into Katib, for those who are interested in cloud native, AI, and hyperparameters tuning. -## Goal +## Problem The project aims to provide a Python SDK API interface for users to push metrics to Katib DB directly. The current implementation of Metrics Collector is pull-based, raising design problems such as determining the frequency at which we scrape the metrics, performance issues like the overhead caused by too many sidecar containers, and restrictions on developing environments that must support sidecar containers and admission webhooks. And also, for data scientists, they need to pay attention to the format of metrics printed in the training scripts, which is error prone and may be hard to recognize. -Thus, we decided to implement a new API for Katib Python SDK to offer users a push-based way to store metrics directly into the Kaitb DB and resolve those issues raised by pull-based metrics collection. +## Solution + +We decided to implement a new API for Katib Python SDK to offer users a push-based way to store metrics directly into the Kaitb DB and resolve those issues raised by pull-based metrics collection. ![](../images/2024-09-28-gsoc-2024-summary-push-based-metrics-collection/push-based-metrics-collection.png) -## What I did in the GSoC Project +## My Contributions during the GSoC I raised numerous PRs for the Katib and Training-Operator project. Some of them are related to my GSoC project, and others may contribute to the completeness of UTs (Unit Tests), simplicity of dependency management, and the compatibility of the UI component. @@ -40,7 +42,7 @@ Also, I raised some issues not only to describe the problems and bugs I met duri There is an [Github Issue](https://github.com/kubeflow/katib/issues/2340) tracks the progress of developing push-based metrics collection for katib during the GSoC coding phase. If you are interested in my work or Katib, please can check this issue for more details. -## Lessons I Learned during the Project +## Lessons Learned 1. **Think Twice, Code Once**: Andrey taught me that we should think of the API specification and all the related details before coding. This can significantly reduce the workload of the coding period and avoid big refactor of the project. Meanwhile, my understanding of Katib got clear gradually during the over-and-over rounds of re-think and re-design of the architecture. @@ -60,4 +62,11 @@ Special Thanks: I hold a firm belief that every small step counts, and everybody in the community is unique and of great significance. There is no doubt that our joint efforts will surely contribute to the flourishing of our Kubeflow Community, make it the world-best community managing AI lifecycle on Kubernetes, and attract much more attention from the industry. Then, more and more new comers will pour in and work along with us. -Again, I'll continue to contribute to Kubeflow. \ No newline at end of file +Again, I'll continue to contribute to Kubeflow. + +## Links + +For more details about Kubeflow and the upcoming GSoC'25 event, please check: + +- [What is Kubeflow?](https://www.kubeflow.org) +- [Kubeflow GSoC'25 Event](https://www.kubeflow.org/events/gsoc-2025/) \ No newline at end of file