From 3c7d4b0f07e84180b60aff66b5d5041873a555ea Mon Sep 17 00:00:00 2001 From: JesseStutler Date: Thu, 9 Jan 2025 21:48:02 +0800 Subject: [PATCH] Update home page and introduction Signed-off-by: JesseStutler --- config/_default/languages.toml | 2 +- config/_default/menus.toml | 2 +- content/en/author/volcano/_index.md | 20 ++++-- content/en/docs/_index.md | 89 ++++++++++++++++------- content/en/docs/contribution.md | 2 +- content/en/docs/v1-10-0/contribution.md | 2 +- content/en/docs/v1-7-0/contribution.md | 2 +- content/en/docs/v1-8-2/contribution.md | 2 +- content/en/docs/v1-9-0/contribution.md | 2 +- content/en/home/home_slider.md | 90 +++++++++++++++++------- content/en/home/required.md | 20 +++--- content/zh/author/volcano/_index.md | 23 +++--- content/zh/docs/_index.md | 77 ++++++++++++++------ content/zh/docs/contribution.md | 2 +- content/zh/docs/v1-10-0/contribution.md | 2 +- content/zh/docs/v1-7-0/contribution.md | 2 +- content/zh/docs/v1-8-2/contribution.md | 2 +- content/zh/docs/v1-9-0/contribution.md | 2 +- content/zh/home/home_slider.md | 81 ++++++++++++++++----- content/zh/home/required.md | 20 +++--- static/img/ray_logo.png | Bin 0 -> 97933 bytes 21 files changed, 301 insertions(+), 143 deletions(-) create mode 100644 static/img/ray_logo.png diff --git a/config/_default/languages.toml b/config/_default/languages.toml index 8308f19b..b57c6d8d 100644 --- a/config/_default/languages.toml +++ b/config/_default/languages.toml @@ -76,7 +76,7 @@ [[zh.menu.main_right]] name = "\"slack\"" post = "" - url = "https://volcano-sh.slack.com" + url = "https://cloud-native.slack.com/archives/C011GJDQS0N" weight = 30 # Documentation version latest diff --git a/config/_default/menus.toml b/config/_default/menus.toml index 1d2ebc25..f464b18d 100644 --- a/config/_default/menus.toml +++ b/config/_default/menus.toml @@ -52,7 +52,7 @@ name = "\"slack\"" post = "" - url = "https://volcano-sh.slack.com" + url = "https://cloud-native.slack.com/archives/C011GJDQS0N" weight = 30 # Documentation version latest diff --git a/content/en/author/volcano/_index.md b/content/en/author/volcano/_index.md index 45494999..6b8f41da 100644 --- a/content/en/author/volcano/_index.md +++ b/content/en/author/volcano/_index.md @@ -44,10 +44,20 @@ interests = [] link = "https://twitter.com/volcano_sh" +++ -Volcano is system for running high-performance workloads on Kubernetes. It features powerful batch scheduling capability that Kubernetes cannot provide but is commonly required by many classes of high-performance workloads, including: +Volcano is CNCF's first cloud native batch computing project, focusing on high performance computing scenarios such as AI, big data, and genomics analysis. Its core capabilities include: -- Machine learning/Deep learning -- Bioinformatics/Genomics -- Other big data applications +• Unified Scheduling: Supports integrated job scheduling for both Kubernetes native workloads and mainstream computing frameworks (such as TensorFlow, Spark, PyTorch, Ray, Flink, etc.). -These types of applications typically run on generalized domain frameworks like TensorFlow, Spark, PyTorch, and MPI. Volcano is integrated with these frameworks to allow you to run your applications without adaptation efforts while enjoying remarkable batch scheduling. +• Queue Management: Provides multi-level queue management capabilities, enabling fine-grained resource quota control and task priority scheduling. + +• Heterogeneous Device Support: Efficiently schedules heterogeneous devices like GPU and NPU, fully unleashing hardware computing potential. + +• Network Topology Aware Scheduling: Greatly enhancing model training efficiency in AI distributed training scenarios. + +• Multi-cluster Scheduling: Supports cross cluster job scheduling, improving resource pool management capabilities and achieving large scale load balancing. + +• Online and Offline Workloads Colocation: Enables online and offline workloads colocation, improving cluster resource utilization through intelligent scheduling strategies. + +• Load Aware Descheduling: Optimizing cluster load distribution and enhancing system stability. + +As the industry's first cloud native batch computing engine, Volcano has been widely applied in high-performance computing scenarios such as artificial intelligence, big data, and genome sequencing, providing powerful support for enterprises to build elastic, efficient, and intelligent computing platforms. diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md index 4e8f28fc..d889e96a 100644 --- a/content/en/docs/_index.md +++ b/content/en/docs/_index.md @@ -15,8 +15,12 @@ type = "docs" # Do not modify. +++ ## What is Volcano -Volcano is a cloud native system for high-performance workloads, which has been accepted by [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/) as its first and only official container batch scheduling project. Volcano supports popular computing frameworks such as [Spark](https://spark.apache.org/), [TensorFlow](https://www.tensorflow.org/), [PyTorch](https://pytorch.org/), [Flink](https://flink.apache.org/), [Argo](https://argoproj.github.io/), [MindSpore](https://www.mindspore.cn/en), and [PaddlePaddle](https://www.paddlepaddle.org.cn/). Volcano also supports scheduling of computing resources on different architecture, such as x86, Arm, and Kunpeng. - +Volcano is a cloud native system for high-performance workloads, which has been accepted by [Cloud Native Computing Foundation +(CNCF)](https://www.cncf.io/) as its first and only official container batch scheduling project. Volcano supports popular computing +frameworks such as [Spark](https://spark.apache.org/), [TensorFlow](https://www.tensorflow.org/), [PyTorch](https://pytorch.org/), +[Flink](https://flink.apache.org/), [Argo](https://argoproj.github.io/), [MindSpore](https://www.mindspore.cn/en), +[PaddlePaddle](https://www.paddlepaddle.org.cn/) and [Ray](https://www.ray.io/). Volcano also provides various scheduling capabilities including heterogeneous device scheduling, network topology-aware scheduling, multi-cluster scheduling, online-offline workloads colocation and so on. + ## Why Volcano Job scheduling and management become increasingly complex and critical for high-performance batch computing. Common requirements are as follows: @@ -27,25 +31,30 @@ Job scheduling and management become increasingly complex and critical for high- Volcano is designed to cater to these requirements. In addition, Volcano inherits the design of Kubernetes APIs, allowing you to easily run applications that require high-performance computing on Kubernetes. ## Features -### Rich scheduling policies -Volcano supports a variety of scheduling policies: - -* Gang scheduling -* Fair-share scheduling -* Queue scheduling -* Preemption scheduling -* Topology-based scheduling -* Reclaim -* Backfill -* Resource reservation - -You can also configure plug-ins and actions to use custom scheduling policies. -### Enhanced job management -You can use enhanced job features of Volcano for high-performance computing: - -* Multi-pod jobs -* Improved error handling -* Indexed jobs +### [Unified Scheduling](/en/docs/unified_scheduling/) +* Support native Kubernetes workload scheduling +* Provide complete support for frameworks like PyTorch, TensorFlow, Spark, Flink, Ray through VolcanoJob +* Unified scheduling for both online microservices and offline batch jobs to improve cluster resource utilization + +### Rich Scheduling Policies +* **Gang Scheduling**: Ensure all tasks of a job start simultaneously, suitable for distributed training and big data scenarios +* **Binpack Scheduling**: Optimize resource utilization through compact task allocation +* **Heterogeneous Device Scheduling**: Efficiently share GPU resources, support both CUDA and MIG modes for GPU scheduling, and NPU scheduling +* **Proportion/Capacity Scheduling**: Resource sharing/preemption/reclaim based on queue quotas +* **NodeGroup Scheduling**: Support node group affinity scheduling, implementing binding between queues and node groups +* **DRF Scheduling**: Support fair scheduling of multi-dimensional resources +* **SLA Scheduling**: Scheduling guarantee based on service quality +* **Task-topology Scheduling**: Support task topology-aware scheduling, optimizing performance for communication-intensive applications +* **NUMA Aware Scheduling**: Supports scheduling for NUMA architecture, optimizing resource allocation for tasks on multi-core processors, enhancing memory access efficiency and computational performance. +* ... + +Volcano supports custom plugins and actions to implement more scheduling algorithms. + +### [Queue Resource Management](/en/docs/queue_resource_management/) +* Support multi-dimensional resource quota control (CPU, Memory, GPU, etc.) +* Provide multi-level queue structure and resource inheritance +* Support resource borrowing, reclaiming and preemption between queues +* Implement multi-tenant resource isolation and priority control ### Multi-architecture computing Volcano can schedule computing resources from multiple architectures: @@ -56,24 +65,50 @@ Volcano can schedule computing resources from multiple architectures: * Ascend * GPU -### Faster scheduling -Compared with existing queue schedulers, Volcano shortens the average scheduling delay through a series of optimizations. +### Network Topology-aware Scheduling +* Supports network topology-aware scheduling, fully considering the network bandwidth characteristics between nodes. In AI scenarios, this network topology-aware scheduling effectively optimizes data transmission for communication-intensive distributed training tasks, significantly reducing communication overhead and improving model training speed and overall efficiency. + +### Online and Offline Workloads Colocation +* Supports online and offline workloads colocation, enhancing resource utilization while ensuring online worloads QoS through unified scheduling, dynamic resource overcommitment, CPU burst, and resource isolation. + +### Multi-cluster Scheduling +* Support cross-cluster job scheduling for larger-scale resource pool management and load balancing + +> For more details about multi-cluster scheduling, see: [volcano-global](https://github.com/volcano-sh/volcano-global) + +### Descheduling +* Support dynamic descheduling to optimize cluster load distribution and improve system stability + +> For more details about descheduling, see: [descheduler](https://github.com/volcano-sh/descheduler) + +### Monitoring and Observability +* Complete logging system +* Rich monitoring metrics +* Provides a dashboard, facilitating graphical interface operations for users. + +> For more details about dashboard, see: [dashboard](https://github.com/volcano-sh/dashboard) +> +> For more details about volcano metrics, see: [metrics](https://github.com/volcano-sh/volcano/blob/master/docs/design/metrics.md) ## Ecosystem -Volcano allows you to use mainstream computing frameworks: +Volcano has become the de facto standard in batch computing scenarios and is widely used in the following high-performance computing frameworks: * [Spark](https://spark.apache.org/) * [TensorFlow](https://www.tensorflow.org/) * [PyTorch](https://pytorch.org/) * [Flink](https://flink.apache.org/) * [Argo](https://argoproj.github.io/) -* [MindSpore](https://www.mindspore.cn/en) +* [Ray](https://www.ray.io/) +* [MindSpore](https://www.mindspore.cn/) * [PaddlePaddle](https://www.paddlepaddle.org.cn/) -* [Open MPI](https://www.open-mpi.org/) +* [OpenMPI](https://www.open-mpi.org/) * [Horovod](https://horovod.readthedocs.io/) * [MXNet](https://mxnet.apache.org/) * [Kubeflow](https://www.kubeflow.org/) * [KubeGene](https://github.com/volcano-sh/kubegene) * [Cromwell](https://cromwell.readthedocs.io/) -Volcano has been commercially used as the infrastructure scheduling engine by companies and organizations. \ No newline at end of file +Additionally, Volcano has been widely adopted by various enterprises and organizations in the fields of AI and big data. With its powerful resource management capabilities, efficient job management mechanisms, and rich scheduling strategies (such as Gang scheduling, heterogeneous device scheduling, and topology-aware scheduling), it effectively meets the complex demands of distributed training and data analysis tasks. At the same time, Volcano enhances scheduling performance while ensuring the flexibility and reliability of task scheduling, providing strong support for enterprises to build an efficient resource utilization system. + +## Future Outlook +Volcano will continue to expand its functional boundaries through community collaboration and technical innovation, becoming a leader in high-performance computing and cloud-native batch scheduling. \ No newline at end of file diff --git a/content/en/docs/contribution.md b/content/en/docs/contribution.md index 9af6c09d..30521975 100644 --- a/content/en/docs/contribution.md +++ b/content/en/docs/contribution.md @@ -66,7 +66,7 @@ The community is committed to developing a system that helps running high-perfor You can contribute in different areas, including filing issues, developing features, fixing critical bugs, and getting your work reviewed and merged. -If you have any question about the development process, visit the [Slack Channel](https://volcano-sh.slack.com) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) +If you have any question about the development process, visit the [Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) or join our [mailing list](https://groups.google.com/forum/#!forum/volcano-sh). #### Find Something to Work On diff --git a/content/en/docs/v1-10-0/contribution.md b/content/en/docs/v1-10-0/contribution.md index bb289abd..b3c790fd 100644 --- a/content/en/docs/v1-10-0/contribution.md +++ b/content/en/docs/v1-10-0/contribution.md @@ -65,7 +65,7 @@ The community is committed to developing a system that helps running high-perfor You can contribute in different areas, including filing issues, developing features, fixing critical bugs, and getting your work reviewed and merged. -If you have any question about the development process, visit the [Slack Channel](https://volcano-sh.slack.com) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) +If you have any question about the development process, visit the [Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) or join our [mailing list](https://groups.google.com/forum/#!forum/volcano-sh). #### Find Something to Work On diff --git a/content/en/docs/v1-7-0/contribution.md b/content/en/docs/v1-7-0/contribution.md index 4c4f5ed5..84ceb58a 100644 --- a/content/en/docs/v1-7-0/contribution.md +++ b/content/en/docs/v1-7-0/contribution.md @@ -66,7 +66,7 @@ The community is committed to developing a system that helps running high-perfor You can contribute in different areas, including filing issues, developing features, fixing critical bugs, and getting your work reviewed and merged. -If you have any question about the development process, visit the [Slack Channel](https://volcano-sh.slack.com) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) +If you have any question about the development process, visit the [Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) or join our [mailing list](https://groups.google.com/forum/#!forum/volcano-sh). #### Find Something to Work On diff --git a/content/en/docs/v1-8-2/contribution.md b/content/en/docs/v1-8-2/contribution.md index 304a7f28..4a70a143 100644 --- a/content/en/docs/v1-8-2/contribution.md +++ b/content/en/docs/v1-8-2/contribution.md @@ -66,7 +66,7 @@ The community is committed to developing a system that helps running high-perfor You can contribute in different areas, including filing issues, developing features, fixing critical bugs, and getting your work reviewed and merged. -If you have any question about the development process, visit the [Slack Channel](https://volcano-sh.slack.com) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) +If you have any question about the development process, visit the [Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) or join our [mailing list](https://groups.google.com/forum/#!forum/volcano-sh). #### Find Something to Work On diff --git a/content/en/docs/v1-9-0/contribution.md b/content/en/docs/v1-9-0/contribution.md index 71b3ce8e..acde1899 100644 --- a/content/en/docs/v1-9-0/contribution.md +++ b/content/en/docs/v1-9-0/contribution.md @@ -65,7 +65,7 @@ The community is committed to developing a system that helps running high-perfor You can contribute in different areas, including filing issues, developing features, fixing critical bugs, and getting your work reviewed and merged. -If you have any question about the development process, visit the [Slack Channel](https://volcano-sh.slack.com) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) +If you have any question about the development process, visit the [Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N) ([sign up](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)) or join our [mailing list](https://groups.google.com/forum/#!forum/volcano-sh). #### Find Something to Work On diff --git a/content/en/home/home_slider.md b/content/en/home/home_slider.md index ae86313b..48dbe124 100644 --- a/content/en/home/home_slider.md +++ b/content/en/home/home_slider.md @@ -10,7 +10,7 @@ weight = 1 # Slide interval. # Use `false` to disable animation or enter a time in ms, e.g. `5000` (5s). -interval = 600000 +interval = 5000 # Minimum slide height. # Specify a height to ensure a consistent height for each slide. @@ -41,44 +41,82 @@ height = "500px" cta_icon = "graduation-cap" [[item]] - title = "High Performance Powered by Efficient Scheduling" - content = "Computing jobs can be converted to Kubernetes workloads and scheduled in batches to deliver optimal performance." + title = "Network Topology Aware Scheduling" + content = "Supports network topology aware scheduling, significantly reducing application communication overhead between nodes, and greatly enhancing model training efficiency in AI distributed training scenarios" align = "left" - #overlay_color = "#555" # An HTML color value. - #overlay_img = "headers/banner_02.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.05 # Darken the image. Value in range 0-1. + overlay_filter = 0.15 [[item]] - title = "Diverse Scheduling Policies" - content = "Co-scheduling, fair-share scheduling, gang scheduling, topologies, reservation/backfill, data-aware scheduling, and more" + title = "Online and Offline Workloads Colocation" + content = "Supports online and offline workloads colocation, enhancing resource utilization while ensuring online business QoS through unified scheduling, dynamic resource overcommitment, CPU burst capabilities, and resource isolation" align = "left" - #overlay_color = "#333" # An HTML color value. - #overlay_img = "headers/banner_02.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.05 # Darken the image. Value in range 0-1. - + overlay_filter = 0.20 + [[item]] - title = "Enhanced Job Management" - content = "Managing jobs with multiple templates" + title = "Multi Cluster Job Scheduling" + content = "Supports cross cluster job scheduling for larger scale resource pool management and load balancing" + content1 = "Star" align = "left" - #overlay_color = "#333" # An HTML color value. - #overlay_img = "headers/banner_02.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.05 # Darken the image. Value in range 0-1. + overlay_filter = 0.25 + + # Call to action button for multi-cluster scheduling + cta_label = "Learn more about volcano multi-cluster scheduling" + cta_url = "https://github.com/volcano-sh/volcano-global" + cta_icon_pack = "fas" + cta_icon = "graduation-cap" [[item]] - title = "Multiple Runtimes" - content = "Singularity and GPU Accelerators" + title = "Hierarchical Queue Management" + content = "Supports multi-level queue management for fine-grained resource quota control" align = "left" - #overlay_color = "#333" # An HTML color value. - #overlay_img = "headers/banner_02.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.15 # Darken the image. Value in range 0-1. + overlay_filter = 0.3 + +[[item]] + title = "Descheduling" + content = "Supports dynamic descheduling to optimize cluster load distribution and improve system stability" + content1 = "Star" + align = "left" + overlay_filter = 0.35 + + # Call to action button for descheduling + cta_label = "Learn more about volcano descheduling" + cta_url = "https://github.com/volcano-sh/descheduler" + cta_icon_pack = "fas" + cta_icon = "graduation-cap" + +[[item]] + title = "Multiple Scheduling Policies" + content = "Supports various scheduling strategies including Gang, Fair-Share, Binpack, DeviceShare, Capacity, Proportion, NUMA aware, and Task Topology, optimizing resource utilization" + align = "left" + overlay_filter = 0.4 + +[[item]] + title = "Heterogeneous Device Support" + content = "Supports scheduling for various heterogeneous devices like GPU and NPU, unleashing hardware computing power" + align = "left" + overlay_filter = 0.45 + +[[item]] + title = "High Performance Unified Scheduling" + content = "Supports native Kubernetes workload scheduling while providing complete support for frameworks like Ray, PyTorch, TensorFlow, Spark, and Flink through VolcanoJob, achieving unified job scheduling with excellent performance" + align = "left" + overlay_filter = 0.5 [[item]] title = "Powerful Monitoring" - content = "Logging, metrics, and dashboard" + content = "Provides rich logging, monitoring metrics, and dashboards" + content1 = "Star" align = "left" - #overlay_color = "#333" # An HTML color value. - #overlay_img = "headers/banner_02.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.15 # Darken the image. Value in range 0-1. + + # overlay_color = "#333" # An HTML color value. + # overlay_img = "headers/volcano-slide-2.png" # Image path relative to your `static/img/` folder. + overlay_filter = 0.55 # Darken the image. Value in range 0-1. + + # Call to action button for observability + cta_label = "Learn more about volcano dashboard" + cta_url = "https://github.com/volcano-sh/dashboard" + cta_icon_pack = "fas" + cta_icon = "graduation-cap" +++ diff --git a/content/en/home/required.md b/content/en/home/required.md index 1643c1e1..0a1ddb44 100644 --- a/content/en/home/required.md +++ b/content/en/home/required.md @@ -70,12 +70,12 @@ weight = 4 description = "The all-scenario deep learning framework developed by Huawei." [[featured]] - img_src = "volcano_paddle.PNG" - img_width = "100px" - img_height = "60px" - name = "PaddlePaddle" - url = "https://www.paddlepaddle.org.cn/ " - description = "PaddlePaddle is an open source deep learning platform derived from industrial practice initiated by Baidu." + img_src = "ray_logo.png" + img_width = "300px" + img_height = "80px" + name = "Ray" + url = "https://github.com/ray-project/ray" + description = "Ray is a high-performance distributed computing framework that supports machine learning, deep learning, and distributed applications." [[featured]] img_src = "kubeflow.png" @@ -110,10 +110,10 @@ weight = 4 description = "A truly open source deep learning framework suited for flexible research prototyping and production." [[featured]] - img_src = "kubegene_logo.png" + img_src = "volcano_paddle.PNG" img_width = "100px" img_height = "60px" - name = "KubeGene" - url = "https://github.com/kubegene/kubegene " - description = "The KubeGene is dedicated to making genome sequencing process simple, portable, and scalable." + name = "PaddlePaddle" + url = "https://www.paddlepaddle.org.cn/ " + description = "PaddlePaddle is an open source deep learning platform derived from industrial practice initiated by Baidu." +++ diff --git a/content/zh/author/volcano/_index.md b/content/zh/author/volcano/_index.md index f7b06048..7dd837ae 100644 --- a/content/zh/author/volcano/_index.md +++ b/content/zh/author/volcano/_index.md @@ -51,19 +51,20 @@ interests = [] # link = "files/cv.pdf" +++ -Volcano是在Kubernetes上运行高性能工作负载的容器批量计算引擎。 -它提供了Kubernetes目前缺少的一套机制,这些机制通常是许多高性能 -工作负载所必需的,包括: +Volcano是CNCF首个云原生批量计算项目,专注于AI、大数据、基因分析等高性能计算场景。核心能力涉及: -\- 机器学习/深度学习 -\- 生物学计算/基因计算 -\- 大数据应用 +• 统一调度:支持 Kubernetes 原生负载及主流计算框架(如 TensorFlow、Spark、PyTorch、Ray、Flink等)的一体化作业调度。 +• 队列管理:提供多层级队列管理能力,实现精细化资源配额控制和任务优先级调度。 -这些类型的应用程序通常运行在像Tensorflow、Spark、PyTorch、 -MPI等通用领域框架上,Volcano无缝对接这些框架。 +• 异构设备支持:高效调度GPU、NPU等异构设备,充分释放硬件算力潜力。 -*** +• 网络拓扑感知:支持网络拓扑感知调度,显著降低跨节点间的应用通信开销,在AI分布式训练场景中大幅提升模型训练效率 -Volcano基于15年来使用多种系统和平台大规模运行各种高性能工作负载 -的经验,并结合来自开源社区的最佳思想和实践。 +• 多集群调度:支持跨集群作业调度,提升资源池管理能力,实现大规模负载均衡。 + +• 在离线混部:实现在线与离线任务混合部署,提升集群资源利用率。 + +• 负载感知重调度:支持负载感知重调度,优化集群负载分布,提升系统稳定性 + +作为业界首个云原生批量计算引擎,Volcano已广泛应用于人工智能、大数据、基因测序等高性能计算场景,为企业构建弹性、高效、智能的计算平台提供了强大支持。 diff --git a/content/zh/docs/_index.md b/content/zh/docs/_index.md index 1b228425..f8c631c7 100644 --- a/content/zh/docs/_index.md +++ b/content/zh/docs/_index.md @@ -2,7 +2,7 @@ title = "介绍" date = 2019-01-28 -lastmod = 2020-09-03 +lastmod = 2025-01-09 draft = false # Is this a draft? true/false toc = true # Show table of contents? true/false @@ -19,7 +19,7 @@ Volcano是[CNCF](https://www.cncf.io/) 下首个也是唯一的基于Kubernetes 少的一套机制,这些机制通常是机器学习大数据应用、科学计算、特效渲染等多种高性能工作负载所需的。作为一个通用批处理平台,Volcano与几乎所有的主流计算框 架无缝对接,如[Spark](https://spark.apache.org/) 、[TensorFlow](https://tensorflow.google.cn/) 、[PyTorch](https://pytorch.org/) 、 [Flink](https://flink.apache.org/) 、[Argo](https://argoproj.github.io/) 、[MindSpore](https://www.mindspore.cn/) 、 -[PaddlePaddle](https://www.paddlepaddle.org.cn/) 等。它还提供了包括基于各种主流架构的CPU、GPU在内的异构设备混合调度能力。Volcano的设计 +[PaddlePaddle](https://www.paddlepaddle.org.cn/),[Ray](https://www.ray.io/)等。它还提供了包括异构设备调度,网络拓扑感知调度,多集群调度,在离线混部调度等多种调度能力。Volcano的设计 理念建立在15年来多种系统和平台大规模运行各种高性能工作负载的使用经验之上,并结合来自开源社区的最佳思想和实践。 ## 由来 @@ -33,26 +33,31 @@ Volcano是[CNCF](https://www.cncf.io/) 下首个也是唯一的基于Kubernetes Volcano正是针对这些需求应运而生的。同时,Volcano继承了Kubernetes接口的设计风格和核心概念。您可以在充分享受Volcano的高效性和便利性的同时不用改 变任何以前使用Kubernetes的习惯。 ## 特性 -### 丰富的调度策略 -Volcano支持各种调度策略,包括: -* Gang-scheduling -* Fair-share scheduling -* Queue scheduling -* Preemption scheduling -* Topology-based scheduling -* Reclaims -* Backfill -* Resource Reservation +### [统一调度](/zh/docs/unified_scheduling/) +* 支持Kubernetes原生负载调度 +* 支持使用VolcanoJob来进行PyTorch、TensorFlow、Spark、Flink、Ray等框架的一体化作业调度 +* 将在线微服务和离线批处理作业统一调度,提升集群资源利用率 -得益于可扩展性的架构设计,Volcano支持用户自定义plugin和action以支持更多调度算法。 +### 丰富的调度策略 +* **Gang Scheduling**:确保作业的所有任务同时启动,适用于分布式训练、大数据等场景 +* **Binpack Scheduling**:通过任务紧凑分配优化资源利用率 +* **Heterogeneous device scheduling**:高效共享GPU异构资源,支持CUDA和MIG两种模式的GPU调度,支持NPU调度 +* **Proportion/Capacity Scheduling**:基于队列配额进行资源的共享/抢占/回收 +* **NodeGroup Scheduling**:支持节点分组亲和性调度,实现队列与节点组的绑定关系 +* **DRF Scheduling**:支持多维度资源的公平调度 +* **SLA Scheduling**:基于服务质量的调度保障 +* **Task-topology Scheduling**:支持任务拓扑感知调度,优化通信密集型应用性能 +* **NUMA Aware Scheduling**:支持NUMA架构的调度,优化任务在多核处理器上的资源分配,提升内存访问效率和计算性能 +* ... -### 增强型的Job管理能力 -Volcano提供了增强型的Job管理能力以适配高性能计算场景。这些特性罗列如下: +得益于可扩展性的架构设计,Volcano支持用户自定义plugin和action以支持更多调度算法。 -* 多pod类型job -* 增强型的异常处理 -* 可索引Job +### [队列资源管理](/zh/docs/queue_resource_management/) +* 支持多维度资源配额控制(CPU、内存、GPU等) +* 提供多层级队列结构和资源继承 +* 支持队列间资源借用、回收与抢占 +* 实现多租户资源隔离和优先级控制 ### 异构设备的支持 Volcano提供了基于多种架构的计算资源的混合调度能力: @@ -63,24 +68,50 @@ Volcano提供了基于多种架构的计算资源的混合调度能力: * 昇腾 * GPU -### 性能优化 -与传统的队列调度器相比,Volcano通过一系列的优化手段有效降低调度的平均时延等。 +### 网络拓扑感知调度 +* 支持基于网络拓扑的感知调度,充分考虑节点间的网络带宽特性。在AI场景中,针对分布式训练任务的通信密集型特点,拓扑感知调度能够有效优化数据传输,显著减少通信开销,从而提升模型训练速度和整体效率。 + +### 在离线混部 +* 支持在线和离线业务混合部署,通过统一调度,动态资源超卖,CPU Burst,资源隔离等能力,提升资源利用率的同时保障在线业务QoS + +### 多集群调度 +* 支持作业跨集群调度,将VolcanoJob的能力扩展到多集群,实现更大规模的资源池管理 + +> Volcano多集群调度仓库详见:[volcano-global](https://github.com/volcano-sh/volcano-global) + +### 重调度 +* 支持动态重调度,优化集群负载分布,提升系统稳定性 + +> Volcano重调度仓库详见:[descheduler](https://github.com/volcano-sh/descheduler) + +### 监控与可观测性 +* 完整的日志系统 +* 丰富的监控指标 +* 提供可视化的Dashboard,便于用户进行图形化界面操作 + +> Volcano Dashboard详见:[dashboard](https://github.com/volcano-sh/dashboard) +> +> Volcano指标详见: [metrics](https://github.com/volcano-sh/volcano/blob/master/docs/design/metrics.md) ## 生态 -Volcano已经支持几乎所有的主流计算框架: +Volcano已经成为业界批量计算场景中的事实标准,并被广泛应用于以下高性能计算框架中: * [Spark](https://spark.apache.org/) * [TensorFlow](https://tensorflow.google.cn/) * [PyTorch](https://pytorch.org/) * [Flink](https://flink.apache.org/) * [Argo](https://argoproj.github.io/) +* [Ray](https://www.ray.io/) * [MindSpore](https://www.mindspore.cn/) * [PaddlePaddle](https://www.paddlepaddle.org.cn/) * [OpenMPI](https://www.open-mpi.org/) * [Horovod](https://horovod.readthedocs.io/) * [mxnet](https://mxnet.apache.org/) * [Kubeflow](https://www.kubeflow.org/) -* [KubeGene](https://github.com/volcano-sh/kubegene) * [Cromwell](https://cromwell.readthedocs.io/) -另外,Volcano已经被作为基础设施调度引擎被多个公司和组织采纳商用。 \ No newline at end of file +此外,Volcano已被多个企业和组织广泛应用于AI和大数据领域。它通过强大的资源管理能力、高效的Job管理机制,以及丰富的调度策略(如Gang调度、异构设备调度、拓扑感知调度等),有效满足了分布式训练、数据分析等任务的复杂需求。同时,Volcano在提升调度性能的基础上,兼顾了任务调度的灵活性和可靠性,为企业打造高效的资源利用体系提供了有力支持。 + +## 未来展望 +Volcano将继续通过社区协作和技术创新,扩展其功能边界,成为高性能计算和云原生批量调度的引领者。 + diff --git a/content/zh/docs/contribution.md b/content/zh/docs/contribution.md index 430470ef..4405725d 100644 --- a/content/zh/docs/contribution.md +++ b/content/zh/docs/contribution.md @@ -63,7 +63,7 @@ Volcano 是一个社区驱动的开源项目,致力于打造健康、友好和 ## 您的第一个贡献 -我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://volcano-sh.slack.com)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), +我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), 也可以加入我们的[mailing list](https://groups.google.com/forum/#!forum/volcano-sh) 。 ### 寻找您感兴趣的领域开展工作 diff --git a/content/zh/docs/v1-10-0/contribution.md b/content/zh/docs/v1-10-0/contribution.md index baea8759..acec723a 100644 --- a/content/zh/docs/v1-10-0/contribution.md +++ b/content/zh/docs/v1-10-0/contribution.md @@ -62,7 +62,7 @@ Volcano 是一个社区驱动的开源项目,致力于打造健康、友好和 ## 您的第一个贡献 -我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://volcano-sh.slack.com)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), +我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), 也可以加入我们的[mailing list](https://groups.google.com/forum/#!forum/volcano-sh) 。 ### 寻找您感兴趣的领域开展工作 diff --git a/content/zh/docs/v1-7-0/contribution.md b/content/zh/docs/v1-7-0/contribution.md index 0044befb..e90d0226 100644 --- a/content/zh/docs/v1-7-0/contribution.md +++ b/content/zh/docs/v1-7-0/contribution.md @@ -63,7 +63,7 @@ Volcano 是一个社区驱动的开源项目,致力于打造健康、友好和 ## 您的第一个贡献 -我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://volcano-sh.slack.com)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), +我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), 也可以加入我们的[mailing list](https://groups.google.com/forum/#!forum/volcano-sh) 。 ### 寻找您感兴趣的领域开展工作 diff --git a/content/zh/docs/v1-8-2/contribution.md b/content/zh/docs/v1-8-2/contribution.md index fd661bb7..d1fb5c77 100644 --- a/content/zh/docs/v1-8-2/contribution.md +++ b/content/zh/docs/v1-8-2/contribution.md @@ -63,7 +63,7 @@ Volcano 是一个社区驱动的开源项目,致力于打造健康、友好和 ## 您的第一个贡献 -我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://volcano-sh.slack.com)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), +我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), 也可以加入我们的[mailing list](https://groups.google.com/forum/#!forum/volcano-sh) 。 ### 寻找您感兴趣的领域开展工作 diff --git a/content/zh/docs/v1-9-0/contribution.md b/content/zh/docs/v1-9-0/contribution.md index 0f69b89d..55fa8623 100644 --- a/content/zh/docs/v1-9-0/contribution.md +++ b/content/zh/docs/v1-9-0/contribution.md @@ -62,7 +62,7 @@ Volcano 是一个社区驱动的开源项目,致力于打造健康、友好和 ## 您的第一个贡献 -我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://volcano-sh.slack.com)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), +我们将会帮助您在不同的领域做出贡献,如处理 issue、开发特性、修复关键 bug、检视您的代码并合入。如果您对开发流程还有疑问,请查看[Slack Channel](https://cloud-native.slack.com/archives/C011GJDQS0N)( 注册[点击这里](https://join.slack.com/t/volcano-sh/shared_invite/enQtNTU5NTU3NDU0MTc4LTgzZTQ2MzViNTFmNDg1ZGUyMzcwNjgxZGQ1ZDdhOGE3Mzg1Y2NkZjk1MDJlZTZhZWU5MDg2MWJhMzI3Mjg3ZTk)), 也可以加入我们的[mailing list](https://groups.google.com/forum/#!forum/volcano-sh) 。 ### 寻找您感兴趣的领域开展工作 diff --git a/content/zh/home/home_slider.md b/content/zh/home/home_slider.md index 993f8f91..1dd5f76e 100644 --- a/content/zh/home/home_slider.md +++ b/content/zh/home/home_slider.md @@ -10,7 +10,7 @@ weight = 1 # Slide interval. # Use `false` to disable animation or enter a time in ms, e.g. `5000` (5s). -interval = 6000 +interval = 5000 # Minimum slide height. # Specify a height to ensure a consistent height for each slide. @@ -40,18 +40,15 @@ height = "500px" cta_icon = "graduation-cap" [[item]] - title = "高性能调度" - content = "将特定领域作业转化为Kubernetes负载,并以绝佳的性能进行调度" + title = "网络拓扑感知调度" + content = "支持网络拓扑感知调度,显著降低跨节点间的应用通信开销,在AI分布式训练场景中大幅提升模型训练效率" align = "left" - #overlay_color = "#555" # An HTML color value. - # overlay_img = "headers/volcano-slide-2.png" # Image path relative to your `static/img/` folder. - # #overlay_img = "headers/header-edge-2.jpg" # Image path relative to your `static/img/` folder. - overlay_filter = 0.15 # Darken the image. Value in range 0-1. + overlay_filter = 0.15 [[item]] - title = "多种调度策略" - content = "Co-scheduling, Fair-Share, Gang scheduling, Topologies, Reserve/BackFill, Data-aware Scheduling等" + title = "在离线混部" + content = "支持在线和离线业务混合部署,通过统一调度,动态资源超卖,CPU Burst,资源隔离等能力,提升资源利用率的同时保障在线业务QoS" align = "left" # overlay_color = "#333" # An HTML color value. @@ -59,31 +56,77 @@ height = "500px" overlay_filter = 0.20 # Darken the image. Value in range 0-1. [[item]] - title = "增强的Job管理" - content = "多模板Job管理" + title = "多集群作业调度" + content = "支持作业跨集群调度,实现更大规模的资源池管理和负载均衡" + content1 = "Star" align = "left" + overlay_filter = 0.25 - # overlay_color = "#333" # An HTML color value. - # overlay_img = "headers/volcano-slide-2.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.25 # Darken the image. Value in range 0-1. + # Call to action button for multi-cluster scheduling + cta_label = "深入了解Volcano多集群调度" + cta_url = "https://github.com/volcano-sh/volcano-global" + cta_icon_pack = "fas" + cta_icon = "graduation-cap" + +[[item]] + title = "层级队列管理" + content = "支持多层级队列管理,实现更精细的资源配额控制" + align = "left" + + overlay_filter = 0.3 [[item]] - title = "多运行时支持" - content = "Singularity和GPU加速器" + title = "负载感知重调度" + content = "支持负载感知重调度,优化集群负载分布,提升系统稳定性" + content1 = "Star" align = "left" # overlay_color = "#333" # An HTML color value. # overlay_img = "headers/volcano-slide-2.png" # Image path relative to your `static/img/` folder. overlay_filter = 0.35 # Darken the image. Value in range 0-1. + # Call to action button for descheduling + cta_label = "深入了解Volcano重调度" + cta_url = "https://github.com/volcano-sh/descheduler" + cta_icon_pack = "fas" + cta_icon = "graduation-cap" + +[[item]] + title = "多种调度策略" + content = "支持 Gang、Fair-Share、Binpack、DeviceShare、Capacity、Proportion、NUMA aware、Task Topology等多种调度策略,优化资源利用效率" + align = "left" + + # overlay_color = "#333" # An HTML color value. + # overlay_img = "headers/volcano-slide-2.png" # Image path relative to your `static/img/` folder. + overlay_filter = 0.4 # Darken the image. Value in range 0-1. + +[[item]] + title = "异构设备支持" + content = "支持 GPU、NPU 等多种异构设备的调度,释放硬件算力" + align = "left" + overlay_filter = 0.45 + +[[item]] + title = "高性能统一调度" + content = "支持Kubernetes原生负载调度,同时通过VolcanoJob为Ray、PyTorch、TensorFlow、Spark、Flink等框架提供完整支持,以绝佳性能实现作业统一调度。" + align = "left" + overlay_filter = 0.5 + [[item]] - title = "丰富的监控手段" - content = "日志、监控指标和仪表盘等" + title = "可观测性" + content = "提供丰富的日志、监控指标和Dashboard等" + content1 = "Star" align = "left" # overlay_color = "#333" # An HTML color value. # overlay_img = "headers/volcano-slide-2.png" # Image path relative to your `static/img/` folder. - overlay_filter = 0.45 # Darken the image. Value in range 0-1. + overlay_filter = 0.55 # Darken the image. Value in range 0-1. + + # Call to action button for observability + cta_label = "深入了解Volcano Dashboard" + cta_url = "https://github.com/volcano-sh/dashboard" + cta_icon_pack = "fas" + cta_icon = "graduation-cap" +++ diff --git a/content/zh/home/required.md b/content/zh/home/required.md index a8ff04af..8960eda7 100644 --- a/content/zh/home/required.md +++ b/content/zh/home/required.md @@ -69,12 +69,12 @@ weight = 4 description = "华为开发的全场景深度学习框架." [[featured]] - img_src = "volcano_paddle.PNG" - img_width = "100px" - img_height = "60px" - name = "PaddlePaddle" - url = "https://www.paddlepaddle.org.cn/ " - description = "PaddlePaddle是一个由百度发起的工业实践衍生的开源深度学习平台." + img_src = "ray_logo.png" + img_width = "300px" + img_height = "80px" + name = "Ray" + url = "https://github.com/ray-project/ray" + description = "Ray是一个高性能分布式计算框架,支持机器学习、深度学习和分布式应用程序。" [[featured]] img_src = "kubeflow.png" @@ -109,10 +109,10 @@ weight = 4 description = "一个真正的开源深度学习框架,适用于灵活的研究原型和生产." [[featured]] - img_src = "kubegene_logo.png" + img_src = "volcano_paddle.PNG" img_width = "100px" img_height = "60px" - name = "KubeGene" - url = "https://github.com/kubegene/kubegene " - description = "KubeGene致力于简化,便携式和可扩展的基因组测序过程." + name = "PaddlePaddle" + url = "https://www.paddlepaddle.org.cn/ " + description = "PaddlePaddle是一个由百度发起的工业实践衍生的开源深度学习平台." +++ diff --git a/static/img/ray_logo.png b/static/img/ray_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ecae748033ed17da444c03413777c20d0c848c49 GIT binary patch literal 97933 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 literal 0 HcmV?d00001