<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Volcano Blog</title>
        <link>https://volcano.sh/blog</link>
        <description>Volcano Blog</description>
        <lastBuildDate>Tue, 06 Jan 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Introducing Kthena: Redefining LLM Inference for the Cloud-Native Era]]></title>
            <link>https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era</link>
            <guid>https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era</guid>
            <pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Kthena is a Kubernetes-native, high-performance LLM inference routing and orchestration system. It improves GPU/NPU utilization and reduces latency with topology-aware scheduling, KV Cache-aware routing, and Prefill-Decode disaggregation.]]></description>
            <content:encoded><![CDATA[<p>Today, the <a href="https://volcano.sh/" target="_blank" rel="noopener noreferrer" class="">Volcano</a> community is proud to announce the launch of <a href="https://github.com/volcano-sh/kthena" target="_blank" rel="noopener noreferrer" class="">Kthena</a>, a new sub-project designed for global developers and MLOps engineers.</p>
<p>Kthena is a cloud-native, high-performance system for LLM inference routing, orchestration, and scheduling, tailored specifically for Kubernetes. Engineered to address the complexity of serving LLMs at production scale, Kthena delivers granular control and enhanced flexibility. Through features like topology-aware scheduling, KV Cache-aware routing, and Prefill-Decode (PD) disaggregation, it significantly improves GPU/NPU utilization and throughput while minimizing latency.</p>
<p>As a sub-project of Volcano, Kthena extends Volcano’s capabilities beyond AI training, creating a unified, end-to-end solution for the entire AI lifecycle.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="the-last-mile-challenge-of-llm-serving">The "Last Mile" Challenge of LLM Serving<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#the-last-mile-challenge-of-llm-serving" class="hash-link" aria-label="Direct link to The &quot;Last Mile&quot; Challenge of LLM Serving" title="Direct link to The &quot;Last Mile&quot; Challenge of LLM Serving" translate="no">​</a></h2>
<p>While Large Language Models (LLMs) are reshaping industries, deploying them efficiently on Kubernetes remains a complex systems engineering challenge. Developers face four critical hurdles:</p>
<ol>
<li class=""><strong>Low Resource Utilization:</strong> The dynamic memory footprint of LLM inference—especially the KV Cache—creates massive pressure on GPU/NPU resources. Traditional Round-Robin load balancers fail to perceive these characteristics, leading to a mix of idle resources and queued requests that drives up costs.</li>
<li class=""><strong>The Latency vs. Throughput Trade-off:</strong> Inference consists of two distinct phases: Prefill (compute-intensive) and Decode (memory-bound). Coupled scheduling limits optimization. While PD Disaggregation is the industry standard solution, efficient routing and scheduling for it remain difficult.</li>
<li class=""><strong>Complex Multi-Model Management:</strong> Enterprises often serve multiple models, versions, and LoRA adapters simultaneously. Implementing fair scheduling, priority management, and dynamic routing is difficult, leading some to resort to rigid 1:1 mappings between AI Gateways and models.</li>
<li class=""><strong>Lack of Native K8s Integration:</strong> Many existing solutions are either fragmented from the Kubernetes ecosystem or too complex for standard platform operations.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="kthena-the-intelligent-brain-for-cloud-native-inference">Kthena: The Intelligent Brain for Cloud-Native Inference<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#kthena-the-intelligent-brain-for-cloud-native-inference" class="hash-link" aria-label="Direct link to Kthena: The Intelligent Brain for Cloud-Native Inference" title="Direct link to Kthena: The Intelligent Brain for Cloud-Native Inference" translate="no">​</a></h2>
<p>Kthena was built to conquer these challenges. Rather than replacing existing inference engines (like vLLM or SGLang), Kthena acts as an intelligent orchestration layer atop them, deeply integrated into Kubernetes.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/kthena-arch-2b26e6b751c569721bcf673ce8f30fde.svg" width="653" height="451" class="img_ev3q"></p>
<p>Kthena consists of two core components:</p>
<ul>
<li class=""><strong>Kthena Router:</strong> A high-performance, multi-model router that acts as the entry point for all inference requests. It intelligently distributes traffic to backend ModelServers based on ModelRoute rules.</li>
<li class=""><strong>Kthena Controller Manager:</strong> The control plane responsible for workload orchestration and lifecycle management. It reconciles Custom Resource Definitions (CRDs) like ModelBooster, ModelServing, and AutoScalingPolicy to convert declarative intent into runtime resources.<!-- -->
<ul>
<li class="">It orchestrates ServingGroups and roles (Prefill/Decode).</li>
<li class="">It handles topology-aware affinity, Gang scheduling, rolling updates, and failure recovery.</li>
<li class="">It drives elastic scaling based on defined policies.</li>
</ul>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="core-features-and-advantages">Core Features and Advantages<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#core-features-and-advantages" class="hash-link" aria-label="Direct link to Core Features and Advantages" title="Direct link to Core Features and Advantages" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="1-production-grade-inference-orchestration-modelserving">1. Production-Grade Inference Orchestration (ModelServing)<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#1-production-grade-inference-orchestration-modelserving" class="hash-link" aria-label="Direct link to 1. Production-Grade Inference Orchestration (ModelServing)" title="Direct link to 1. Production-Grade Inference Orchestration (ModelServing)" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/model-serving-ac38afc4efa6d2ad36a17703d310c0cc.svg" width="1070" height="800" class="img_ev3q"></p>
<p>Kthena introduces a Hierarchical Workload Architecture (ModelServing -&gt; ServingGroup -&gt; Role).</p>
<ul>
<li class=""><strong>Unified API:</strong> A single API supports diverse patterns, from standalone deployments to complex PD Disaggregation and Expert Parallelism (EP).</li>
<li class=""><strong>Simplified Management:</strong> For example, a massive PD deployment is managed as a single ModelServing resource containing multiple ServingGroups.</li>
<li class=""><strong>Native PD Disaggregation:</strong> Kthena optimizes hardware usage by routing compute-intensive Prefill tasks to high-compute nodes and memory-bound Decode tasks to High Bandwidth Memory (HBM) nodes. It supports independent scaling to dynamically adjust the Prefill/Decode ratio.</li>
<li class=""><strong>Topology Awareness &amp; Gang Scheduling:</strong> Gang scheduling guarantees that pods in a ServingGroup are scheduled as an atomic unit, preventing deadlocks. Topology awareness minimizes data transmission latency by placing related pods closer together in the network fabric.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="2-out-of-the-box-deployment-modelbooster">2. Out-of-the-Box Deployment (ModelBooster)<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#2-out-of-the-box-deployment-modelbooster" class="hash-link" aria-label="Direct link to 2. Out-of-the-Box Deployment (ModelBooster)" title="Direct link to 2. Out-of-the-Box Deployment (ModelBooster)" translate="no">​</a></h3>
<ul>
<li class=""><strong>Templates:</strong> Provides built-in templates for mainstream models (including PD separation), automatically generating necessary routing and lifecycle resources.</li>
<li class=""><strong>Flexibility:</strong> Covers general scenarios while allowing granular control via ModelServing for complex needs.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="3-intelligent-model-aware-routing">3. Intelligent, Model-Aware Routing<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#3-intelligent-model-aware-routing" class="hash-link" aria-label="Direct link to 3. Intelligent, Model-Aware Routing" title="Direct link to 3. Intelligent, Model-Aware Routing" translate="no">​</a></h3>
<ul>
<li class=""><strong>Multi-Model Routing:</strong> OpenAI API compatible. Routes traffic based on headers or body content.</li>
<li class=""><strong>Pluggable Algorithms:</strong> Includes Least Request, Least Latency, KV Cache Awareness, Prefix Cache Awareness, LoRA Affinity, and Fairness Scheduling.</li>
<li class=""><strong>LoRA Hot-Swapping:</strong> Detects loaded LoRA adapters for non-disruptive hot-swapping and routing.</li>
<li class=""><strong>Traffic Governance:</strong> Supports canary releases, token-level rate limiting, and failover.</li>
<li class=""><strong>All-in-One Architecture:</strong> Eliminates the need for a separate Envoy Gateway by natively handling routing logic.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="4-cost-driven-autoscaling">4. Cost-Driven Autoscaling<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#4-cost-driven-autoscaling" class="hash-link" aria-label="Direct link to 4. Cost-Driven Autoscaling" title="Direct link to 4. Cost-Driven Autoscaling" translate="no">​</a></h3>
<ul>
<li class=""><strong>Homogeneous Scaling:</strong> Scales precisely based on business metrics (CPU/GPU/Memory/Custom).</li>
<li class=""><strong>Heterogeneous Optimization:</strong> Optimizes resource allocation across different accelerators based on a "Cost-Performance" ratio.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="5-broad-hardware--engine-support">5. Broad Hardware &amp; Engine Support<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#5-broad-hardware--engine-support" class="hash-link" aria-label="Direct link to 5. Broad Hardware &amp; Engine Support" title="Direct link to 5. Broad Hardware &amp; Engine Support" translate="no">​</a></h3>
<ul>
<li class=""><strong>Inference Engines:</strong> Supports vLLM, SGLang, Triton/TGI, and more via a unified API abstraction.</li>
<li class=""><strong>Heterogeneous Compute:</strong> Enables co-location of GPU and NPU resources to balance cost and Service Level Objectives (SLOs).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="6-built-in-flow-control--fairness">6. Built-in Flow Control &amp; Fairness<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#6-built-in-flow-control--fairness" class="hash-link" aria-label="Direct link to 6. Built-in Flow Control &amp; Fairness" title="Direct link to 6. Built-in Flow Control &amp; Fairness" translate="no">​</a></h3>
<ul>
<li class=""><strong>Fairness Scheduling:</strong> Prioritizes traffic based on usage history to prevent "starvation" of low-priority users.</li>
<li class=""><strong>Flow Control:</strong> Granular limits based on user, model, and token length.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="performance-benchmarks">Performance Benchmarks<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#performance-benchmarks" class="hash-link" aria-label="Direct link to Performance Benchmarks" title="Direct link to Performance Benchmarks" translate="no">​</a></h2>
<p>In scenarios with long system prompts (e.g., 4096 tokens), Kthena's "KV Cache Awareness + Least Request" strategy delivers significant gains compared to a random baseline:</p>
<ul>
<li class=""><strong>Throughput:</strong> Increased by <strong>~2.73x</strong></li>
<li class=""><strong>TTFT (Time To First Token):</strong> Reduced by <strong>~73.5%</strong></li>
<li class=""><strong>End-to-End Latency:</strong> Reduced by <strong>&gt;60%</strong></li>
</ul>
<table><thead><tr><th style="text-align:left">Plugin Configuration</th><th style="text-align:left">Throughput (req/s)</th><th style="text-align:left">TTFT (s)</th><th style="text-align:left">E2E Latency (s)</th></tr></thead><tbody><tr><td style="text-align:left"><strong>Least Request + KVCacheAware</strong></td><td style="text-align:left"><strong>32.22</strong></td><td style="text-align:left"><strong>9.22</strong></td><td style="text-align:left"><strong>0.57</strong></td></tr><tr><td style="text-align:left">Least Request + Prefix Cache</td><td style="text-align:left">23.87</td><td style="text-align:left">12.47</td><td style="text-align:left">0.83</td></tr><tr><td style="text-align:left">Random</td><td style="text-align:left">11.81</td><td style="text-align:left">25.23</td><td style="text-align:left">2.15</td></tr></tbody></table>
<p><em>Note: While gaps narrow with short prompts, KV Cache awareness offers decisive advantages for multi-turn conversations and template-heavy workloads.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="community--industry-support">Community &amp; Industry Support<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#community--industry-support" class="hash-link" aria-label="Direct link to Community &amp; Industry Support" title="Direct link to Community &amp; Industry Support" translate="no">​</a></h2>
<p>Kthena has already attracted widespread attention and support from industry leaders since its very beginning.</p>
<p>"Open source is the lifeblood of technical innovation and the primary driver of industry standardization. As the initiator of Volcano, Huawei Cloud is proud to launch Kthena alongside our community partners.</p>
<p>This release marks not only a significant milestone in Volcano's technical evolution but also underscores Huawei Cloud's enduring commitment to Cloud Native AI. By deeply integrating with infrastructure like Huawei Cloud CCE and CCI, Kthena unlocks the full potential of diverse computing power—including Ascend—delivering superior cost-efficiency to our customers.</p>
<p>Through Kthena, we look forward to collaborating with global developers to build an open, thriving ecosystem that lays a robust foundation for the intelligent transformation of industries worldwide."</p>
<p><strong>Xiaobo Qi</strong>, Director of General Computing Services, Huawei Cloud</p>
<p>"Kthena further solidifies Volcano's leadership in intelligent workload scheduling. By leveraging Volcano's unified scheduling and resource pooling capabilities, our platform addresses diverse compute requirements—spanning general-purpose computing, AI training, and inference—within a single, unified framework.</p>
<p>This enables dynamic resource allocation across different scenarios, effectively eliminating resource silos. Looking ahead, we are excited to combine Kthena with Volcano’s elastic scaling and Volcano Global’s cross-cluster scheduling to drive resource utilization to new heights."</p>
<p><strong>Lei Yang</strong>, PaaS R&amp;D Director, China Telecom AI</p>
<p>"Since its inception, Volcano has evolved in lockstep with the community to address diverse AI scenarios, establishing a comprehensive ecosystem for AI batch processing.</p>
<p>The launch of Kthena marks a major milestone, extending Volcano's capabilities into the critical realm of Large Model inference. It crystallizes years of Volcano’s best practices in scheduling, elasticity, and multi-architecture support into a powerful engine for unified orchestration and intelligent routing.</p>
<p>By leveraging the existing Kubernetes and Volcano ecosystems, teams can achieve smarter scheduling decisions and higher compute efficiency at a lower cost. For DaoCloud, Kthena not only solves tangible inference challenges but also embodies the future of Cloud Native AI—an open, intelligent ecosystem worthy of our long-term investment and deep engagement."</p>
<p><strong>Paco Xu</strong>, Open Source Team Lead at DaoCloud, Member of Kubernetes Steering Committee</p>
<p>"Deploying and managing self-hosted LLM inference services at production scale is a complex systems engineering challenge. It encompasses the entire lifecycle—deployment, operations, elasticity, and recovery—alongside critical requirements like GPU stability, scheduling efficiency, and AI observability. Kthena is engineered specifically to address these complexities.</p>
<p>During Kthena’s planning phase, the Xiaohongshu Cloud Native team engaged deeply with contributors to co-design various intelligent traffic scheduling strategies. Moving forward, we will continue our collaboration on the AI Gateway front. By leveraging Xiaohongshu’s production insights, we aim to provide the community with production-ready capabilities, including granular traffic scheduling, model API management, and MCP protocol support."</p>
<p><strong>Kong Gu (Huachang Chen)</strong>, Cloud Native Business Gateway Lead, Xiaohongshu</p>
<p>"After an in-depth evaluation of Kthena, China Unicom Cloud is impressed by its forward-looking design. We are particularly excited about its joint scheduling capabilities with Volcano.</p>
<p>Features like topology awareness and Gang Scheduling directly address the critical efficiency and reliability challenges inherent in large-scale distributed inference, offering a promising solution to complex scheduling bottlenecks.</p>
<p>We believe Kthena’s superior low latency, high throughput, and intelligent routing will provide the open-source community with a truly production-ready solution, empowering developers to build and manage cloud-native AI applications with greater efficiency."</p>
<p><strong>Zhaoxu Lu</strong>, Team Lead, Intelligent Computing Center, China Unicom Cloud</p>
<p>"Openness and collaboration fuel innovation. Within the CNCF ecosystem, we are dedicated to driving infrastructure towards an 'AI Native' future.</p>
<p>By launching the Kthena sub-project, the Volcano community applies its proven expertise in batch computing—like topology awareness and Gang scheduling—to online LLM inference. Kthena introduces essential cloud-native scheduling primitives, enabling complex LLM workloads to run efficiently as first-class citizens in Kubernetes.</p>
<p>We invite developers worldwide to join us in refining this critical infrastructure and accelerating the AI Native era."</p>
<p><strong>Kevin Wang</strong>, Volcano Maintainer, CNCF TOC Vice Chair</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="start-exploring-kthena-today">Start Exploring Kthena Today<a href="https://volcano.sh/blog/introducing-kthena-redefining-llm-inference-for-the-cloud-native-era#start-exploring-kthena-today" class="hash-link" aria-label="Direct link to Start Exploring Kthena Today" title="Direct link to Start Exploring Kthena Today" translate="no">​</a></h2>
<p>This is just the beginning. We plan to support more efficient scheduling algorithms and broader best practices for large model deployment.</p>
<ul>
<li class=""><strong>GitHub Repository:</strong> <a href="https://github.com/volcano-sh/kthena" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/kthena</a></li>
<li class=""><strong>Official Website:</strong> <a href="https://kthena.volcano.sh/" target="_blank" rel="noopener noreferrer" class="">https://kthena.volcano.sh/</a></li>
<li class=""><strong>Community:</strong> <a href="https://cloud-native.slack.com/archives/C011GJDQS0N" target="_blank" rel="noopener noreferrer" class="">Join our Slack</a></li>
</ul>
<p><strong>Join us to unlock the full potential of Cloud Native LLMs!</strong></p>]]></content:encoded>
            <category>llm</category>
            <category>inference</category>
            <category>kubernetes</category>
            <category>kthena</category>
            <category>gpu</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.13 Released: Comprehensive Enhancement of Scheduling Capabilities for LLM Training and Inference]]></title>
            <link>https://volcano.sh/blog/Volcano-1.13.0-release</link>
            <guid>https://volcano.sh/blog/Volcano-1.13.0-release</guid>
            <pubDate>Mon, 29 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[New Features: LeaderWorkerSet support for large model inference, Cron VolcanoJob, Label-based HyperNode auto-discovery, Native Ray framework support, HCCL plugin support, Enhanced NodeGroup functionality, ResourceStrategyFit plugin, Colocation decoupled from OS, Custom oversubscription resource names, Kubernetes v1.33 support, and more]]></description>
            <content:encoded><![CDATA[<p>On September 29, 2025 (Beijing Time), [Volcano v1.13] (<a href="https://github.com/volcano-sh/volcano/releases/tag/v1.13.0)%5B1" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.13.0)[1</a>] was officially released. This update brings functional enhancements across multiple areas, providing users with a more comprehensive cloud-native batch computing solution.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="release-highlights">Release Highlights<a href="https://volcano.sh/blog/Volcano-1.13.0-release#release-highlights" class="hash-link" aria-label="Direct link to Release Highlights" title="Direct link to Release Highlights" translate="no">​</a></h2>
<p>The v1.13.0 release includes the following major updates:</p>
<p><strong>AI Training and Inference Enhancements</strong></p>
<ul>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#support-leaderworkerset-for-large-model-inference-scenarios" class="">Support LeaderWorkerSet for Large Model Inference Scenarios</a></li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#introduce-cron-volcanojob" class="">Introduce Cron VolcanoJob</a></li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#support-label-based-hypernode-auto-discovery" class="">Support Label-based HyperNode Auto-Discovery</a></li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#add-native-ray-framework-support" class="">Add Native Ray Framework Support</a></li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#introduce-hccl-plugin-support" class="">Introduce HCCL Plugin Support</a></li>
</ul>
<p><strong>Resource Management and Scheduling Enhancements</strong></p>
<ul>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#introduce-resourcestrategyfit-plugin" class="">Introduce ResourceStrategyFit Plugin</a>
<ul>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#independent-scoring-strategy-by-resource-type" class="">Independent Scoring Strategy by Resource Type</a></li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#scarce-resource-avoidance-sra" class="">Scarce Resource Avoidance (SRA)</a></li>
</ul>
</li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#enhance-nodegroup-functionality" class="">Enhance NodeGroup Functionality</a></li>
</ul>
<p><strong>Colocation Enhancements</strong></p>
<ul>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#decouple-colocation-from-os" class="">Decouple Colocation from OS</a></li>
<li class=""><a href="https://volcano.sh/blog/Volcano-1.13.0-release#support-custom-oversubscription-resource-names" class="">Support Custom OverSubscription Resource Names</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="support-leaderworkerset-for-large-model-inference-scenarios">Support LeaderWorkerSet for Large Model Inference Scenarios<a href="https://volcano.sh/blog/Volcano-1.13.0-release#support-leaderworkerset-for-large-model-inference-scenarios" class="hash-link" aria-label="Direct link to Support LeaderWorkerSet for Large Model Inference Scenarios" title="Direct link to Support LeaderWorkerSet for Large Model Inference Scenarios" translate="no">​</a></h2>
<p><a href="https://github.com/kubernetes-sigs/lws" target="_blank" rel="noopener noreferrer" class="">LeaderWorkerSet (LWS)</a> is an API for deploying a group of Pods on Kubernetes. It is primarily used to address multi-host inference in AI/ML inference workloads, especially scenarios that require sharding large language models (LLMs) and running them across multiple devices on multiple nodes.</p>
<p>Since its open-source release, Volcano has actively integrated with upstream and downstream ecosystems, building a comprehensive community ecosystem for batch computing such as AI and big data. In the <a href="https://github.com/kubernetes-sigs/lws/releases/tag/v0.7.0" target="_blank" rel="noopener noreferrer" class="">v0.7</a> release of LWS, it natively integrated Volcano's AI scheduling capabilities. When used with the new version of Volcano, LWS automatically creates PodGroups, which are then scheduled and managed by Volcano, thereby implementing advanced capabilities like Gang scheduling for large model inference scenarios.</p>
<p>Looking ahead, Volcano will continue to expand its ecosystem integration capabilities, providing robust scheduling and resource management support for more projects dedicated to enabling distributed inference on Kubernetes.</p>
<p>Usage documentation: <a href="https://github.com/kubernetes-sigs/lws/tree/main/docs/examples/sample/gang-scheduling" target="_blank" rel="noopener noreferrer" class="">LeaderWorkerSet With Gang</a>.</p>
<p>Related PRs: <a href="https://github.com/kubernetes-sigs/lws/pull/496" target="_blank" rel="noopener noreferrer" class="">https://github.com/kubernetes-sigs/lws/pull/496</a>, <a href="https://github.com/kubernetes-sigs/lws/pull/498" target="_blank" rel="noopener noreferrer" class="">https://github.com/kubernetes-sigs/lws/pull/498</a></p>
<p>Sincerely thanks to community developer: @<a href="https://github.com/JesseStutler" target="_blank" rel="noopener noreferrer" class="">JesseStutler</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduce-cron-volcanojob">Introduce Cron VolcanoJob<a href="https://volcano.sh/blog/Volcano-1.13.0-release#introduce-cron-volcanojob" class="hash-link" aria-label="Direct link to Introduce Cron VolcanoJob" title="Direct link to Introduce Cron VolcanoJob" translate="no">​</a></h2>
<p>This release introduces support for Cron Volcano Jobs. Users can now periodically create and run Volcano Jobs based on a predefined schedule, similar to native Kubernetes CronJobs, to achieve periodic execution of batch computing tasks like AI and big data. Detailed features are as follows:</p>
<ul>
<li class=""><strong>Scheduled Execution</strong>: Define the execution cycle of jobs using standard Cron expressions (<code>spec.schedule</code>).</li>
<li class=""><strong>Timezone Support</strong>: Set the timezone in <code>spec.timeZone</code> to ensure jobs execute at the expected local time.</li>
<li class=""><strong>Concurrency Policy</strong>: Control concurrent behavior via <code>spec.concurrencyPolicy</code>:<!-- -->
<ul>
<li class=""><code>AllowConcurrent</code>: Allows concurrent execution of multiple jobs (default).</li>
<li class=""><code>ForbidConcurrent</code>: Skips the current scheduled execution if the previous job has not completed.</li>
<li class=""><code>ReplaceConcurrent</code>: Terminates the previous job if it is still running and starts a new one.</li>
</ul>
</li>
<li class=""><strong>History Management</strong>: Configure the number of successful (<code>successfulJobsHistoryLimit</code>) and failed (<code>failedJobsHistoryLimit</code>) job history records to retain; old jobs are automatically cleaned up.</li>
<li class=""><strong>Missed Schedule Handling</strong>: The <code>startingDeadlineSeconds</code> field allows tolerating scheduling delays within a certain timeframe; timeouts are considered missed executions.</li>
<li class=""><strong>Status Tracking</strong>: The CronJob status (<code>status</code>) tracks currently active jobs, the last scheduled time, and the last successful completion time for easier monitoring and management.</li>
</ul>
<p>Related PRs: <a href="https://github.com/volcano-sh/apis/pull/192" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/apis/pull/192</a>, <a href="https://github.com/volcano-sh/volcano/pull/4560" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4560</a></p>
<p>Sincerely thanks to community developers: @<a href="https://github.com/volcano-sh/volcano/commits?author=GoingCharlie" target="_blank" rel="noopener noreferrer" class="">GoingCharlie</a>, @<a href="https://github.com/hwdef" target="_blank" rel="noopener noreferrer" class="">hwdef</a>, @<a href="https://github.com/volcano-sh/volcano/commits?author=Monokaix" target="_blank" rel="noopener noreferrer" class="">Monokaix</a></p>
<p>Usage example: <a href="https://github.com/volcano-sh/volcano/blob/master/example/cronjob/cronjob.yaml" target="_blank" rel="noopener noreferrer" class="">Cron Volcano Job Example</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="support-label-based-hypernode-auto-discovery">Support Label-based HyperNode Auto-Discovery<a href="https://volcano.sh/blog/Volcano-1.13.0-release#support-label-based-hypernode-auto-discovery" class="hash-link" aria-label="Direct link to Support Label-based HyperNode Auto-Discovery" title="Direct link to Support Label-based HyperNode Auto-Discovery" translate="no">​</a></h2>
<p>Volcano officially launched network topology-aware scheduling capability in v1.12 and pioneered the UFM auto-discovery mechanism based on InfiniBand (IB) networks. However, for hardware clusters that do not support IB networks or use other network architectures (such as Ethernet), manually maintaining the network topology remains cumbersome.</p>
<p>To address this issue, the new version introduces a <strong>Label-based HyperNode auto-discovery mechanism</strong>. This feature provides users with a universal and flexible way to describe network topology, transforming complex topology management tasks into simple node label management.</p>
<p>This mechanism allows users to define the correspondence between topology levels and node labels in the volcano-controller-configmap. The Volcano controller periodically scans all nodes in the cluster and automatically performs the following tasks based on their labels:</p>
<ul>
<li class=""><strong>Automatic Topology Construction</strong>: Automatically builds multi-layer HyperNode topology structures from top to bottom (e.g., rack -&gt; switch -&gt; node) based on a set of labels on the nodes.</li>
<li class=""><strong>Dynamic Maintenance</strong>: When node labels change, or nodes are added or removed, the controller automatically updates the members and structure of the HyperNodes, ensuring the topology information remains consistent with the cluster state.</li>
<li class=""><strong>Support for Multiple Topology Types</strong>: Allows users to define multiple independent network topologies simultaneously to adapt to different hardware clusters (e.g., GPU clusters, NPU clusters) or different network partitions.</li>
</ul>
<p>Configuration example:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># volcano-controller-configmap.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> v1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ConfigMap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> volcano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">controller</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">configmap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">namespace</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> volcano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">system</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">data</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">volcano-controller.conf</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token scalar string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">    networkTopologyDiscovery:</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">      - source: label</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">        enabled: true</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">        interval: 10m # Discovery interval</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">        config:</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">          networkTopologyTypes:</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">            # Define a topology type named topology-A</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">            topology-A:</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">              # Define topology levels, ordered from top to bottom</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">              - nodeLabel: "volcano.sh/hypercluster" # Top-level HyperNode</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">              - nodeLabel: "volcano.sh/hypernode"   # Middle-level HyperNode</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c">              - nodeLabel: "kubernetes.io/hostname" # Bottom-level physical node</span><br></span></code></pre></div></div>
<p>This feature is enabled by adding the label source to the Volcano controller's ConfigMap. The above configuration defines a three-layer topology structure named <code>topology-A</code>:</p>
<ul>
<li class="">Top Level (Tier 2): Defined by the <code>volcano.sh/hypercluster</code> label.</li>
<li class="">Middle Level (Tier 1): Defined by the <code>volcano.sh/hypernode</code> label.</li>
<li class="">Bottom Level: Physical nodes, identified by the Kubernetes built-in <code>kubernetes.io/hostname</code> label.</li>
</ul>
<p>When a node is labeled as follows, it will be automatically recognized and classified into the topology path <code>cluster-s4 -&gt; node-group-s0</code>:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Labels for node node-0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">labels</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">kubernetes.io/hostname</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> node</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">volcano.sh/hypernode</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> node</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">group</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">s0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">volcano.sh/hypercluster</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cluster</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">s4</span><br></span></code></pre></div></div>
<p>The label-based network topology auto-discovery feature offers excellent generality and flexibility. It is not dependent on specific network hardware (like IB), making it suitable for various heterogeneous clusters, and allows users to flexibly define hierarchical structures of any depth through labels. It automates complex topology maintenance tasks into simple node label management, significantly reducing operational costs and the risk of errors. Furthermore, this mechanism dynamically adapts to changes in cluster nodes and labels, maintaining the accuracy of topology information in real-time without manual intervention.</p>
<p>Related PR: <a href="https://github.com/volcano-sh/volcano/pull/4629" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4629</a></p>
<p>Sincerely thanks to community developer: @<a href="https://github.com/zhaoqi612" target="_blank" rel="noopener noreferrer" class="">zhaoqi612</a></p>
<p>Usage documentation: <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_hypernode_auto_discovery">HyperNode Auto Discovery</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="add-native-ray-framework-support">Add Native Ray Framework Support<a href="https://volcano.sh/blog/Volcano-1.13.0-release#add-native-ray-framework-support" class="hash-link" aria-label="Direct link to Add Native Ray Framework Support" title="Direct link to Add Native Ray Framework Support" translate="no">​</a></h2>
<p><a href="https://docs.ray.io/" target="_blank" rel="noopener noreferrer" class="">Ray</a> is an open-source unified distributed computing framework whose core goal is to simplify parallel computing from single machines to large-scale clusters, especially suitable for scaling Python and AI applications. To manage and run Ray on Kubernetes, the community provides KubeRay—an operator specifically designed for Kubernetes. It acts as a bridge between Kubernetes and the Ray framework, greatly simplifying the deployment and management of Ray clusters and jobs.</p>
<p>Historically, running Ray workloads on Kubernetes primarily relied on the KubeRay Operator. KubeRay integrated Volcano in its <a href="https://docs.ray.io/en/master/cluster/kubernetes/k8s-ecosystem/volcano.html" target="_blank" rel="noopener noreferrer" class="">v0.4.0 release (released in 2022)</a> for scheduling and resource management of Ray Clusters, addressing issues like resource deadlocks in distributed training scenarios. With this new version of Volcano, users can now directly create and manage Ray clusters and submit computational tasks through native Volcano Jobs. This provides Ray users with an alternative usage scheme, allowing them to more directly utilize Volcano's capabilities such as Gang Scheduling, queue management and fair scheduling, and job lifecycle management for running Ray workloads.</p>
<p>Related PR: <a href="https://github.com/volcano-sh/volcano/pull/4581" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4581</a></p>
<p>Sincerely thanks to community developer: @<a href="https://github.com/Wonki4" target="_blank" rel="noopener noreferrer" class="">Wonki4</a></p>
<p>Design documentation: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md" target="_blank" rel="noopener noreferrer" class="">Ray Framework Plugin Design Doc</a>.</p>
<p>Usage documentation: <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_ray_plugin">Ray Plugin User Guide</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduce-hccl-plugin-support">Introduce HCCL Plugin Support<a href="https://volcano.sh/blog/Volcano-1.13.0-release#introduce-hccl-plugin-support" class="hash-link" aria-label="Direct link to Introduce HCCL Plugin Support" title="Direct link to Introduce HCCL Plugin Support" translate="no">​</a></h2>
<p>The new version adds an HCCL Rank plugin (<code>hcclrank</code>) to Volcano Jobs, used for automatically assigning HCCL Ranks to Pods in distributed tasks. This includes:</p>
<ul>
<li class="">New implementation of the <code>hcclrank</code> plugin for Volcano Jobs, supporting automatic calculation and injection of HCCL Rank into Pod annotations based on task type (master/worker) and index.</li>
<li class="">The plugin supports custom master/worker task names, allowing users to specify the master/worker roles in distributed tasks.</li>
</ul>
<p>This feature enhances Volcano's native support for HCCL communication scenarios, such as Huawei Ascend, facilitating automatic management and assignment of Ranks in AI training tasks.</p>
<p>Related PR: <a href="https://github.com/volcano-sh/volcano/pull/4524" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4524</a></p>
<p>Sincerely thanks to community developer: @<a href="https://github.com/kingeasternsun" target="_blank" rel="noopener noreferrer" class="">kingeasternsun</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="enhance-nodegroup-functionality">Enhance NodeGroup Functionality<a href="https://volcano.sh/blog/Volcano-1.13.0-release#enhance-nodegroup-functionality" class="hash-link" aria-label="Direct link to Enhance NodeGroup Functionality" title="Direct link to Enhance NodeGroup Functionality" translate="no">​</a></h2>
<p>In hierarchical queue structures, repeatedly configuring the same node group affinity (<code>nodeGroupAffinity</code>) for each sub-queue as its parent queue leads to configuration redundancy and difficult maintenance.</p>
<p>To solve this problem, the Nodegroup plugin adds support for inheriting affinity within hierarchical queues. Once enabled, the scheduler resolves the effective affinity for a queue according to the following rules:</p>
<ol>
<li class=""><strong>Prioritize Self-Configuration</strong>: If the queue has defined <code>spec.affinity</code>, it uses this configuration directly.</li>
<li class=""><strong>Upward Inheritance</strong>: If the queue has not defined <code>spec.affinity</code>, it searches upward through its parents and inherits the affinity configuration defined by the nearest ancestor queue.</li>
<li class=""><strong>Override Capability</strong>: A child queue can override the inherited configuration by defining its own <code>spec.affinity</code>, ensuring flexibility.</li>
</ol>
<p>This feature allows administrators to set unified node group affinity at a parent queue (e.g., department level), and all child queues (e.g., team level) will automatically inherit this setting, simplifying management.</p>
<p>For queues without NodeAffinity configuration, the "strict" parameter in the plugin controls scheduling behavior. When <code>strict</code> is set to <code>true</code> (the default value), tasks in these queues cannot be scheduled to any nodes. When <code>strict</code> is set to <code>false</code>, these tasks are allowed to be scheduled to regular nodes that do not have the <code>volcano.sh/nodegroup-name</code> label.</p>
<p>In the nodegroup plugin parameters of the scheduler configuration file, setting <code>enableHierarchy: true</code> enables hierarchical queue mode, and setting <code>strict: false</code> configures non-strict mode. Example configuration is as follows:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">actions</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"allocate, backfill, preempt, reclaim"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">plugins</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> nodegroup</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">arguments</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">enableHierarchy</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Enable hierarchical support</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">strict</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">false</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Set to non-strict mode, allowing tasks in the queue to be scheduled to nodes without the "volcano.sh/nodegroup-name" label</span><br></span></code></pre></div></div>
<p>Related PRs: <a href="https://github.com/volcano-sh/volcano/pull/4455" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4455</a></p>
<p>Sincerely thanks to community developers: @<a href="https://github.com/JesseStutler" target="_blank" rel="noopener noreferrer" class="">JesseStutler</a>, @<a href="https://github.com/wuyueandrew" target="_blank" rel="noopener noreferrer" class="">wuyueandrew</a></p>
<p>NodeGroup design documentation: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md" target="_blank" rel="noopener noreferrer" class="">NodeGroup Design.</a></p>
<p>NodeGroup usage documentation: <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_nodegroup_plugin">NodeGroup User Guide.</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduce-resourcestrategyfit-plugin">Introduce ResourceStrategyFit Plugin<a href="https://volcano.sh/blog/Volcano-1.13.0-release#introduce-resourcestrategyfit-plugin" class="hash-link" aria-label="Direct link to Introduce ResourceStrategyFit Plugin" title="Direct link to Introduce ResourceStrategyFit Plugin" translate="no">​</a></h2>
<p>In the native Kubernetes <code>noderesources</code> fit strategy, only a single aggregated (<code>MostAllocated</code>) or dispersed (<code>LeastAllocated</code>) strategy can be applied to all resources. This has limitations in complex heterogeneous computing environments (like AI/ML clusters). To meet differentiated scheduling requirements, Volcano introduces the enhanced <code>ResourceStrategyFit</code> plugin.</p>
<p>This plugin now integrates two core features: Independent scoring strategies by resource type and Scarce Resource Avoidance (SRA).</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="independent-scoring-strategy-by-resource-type">Independent Scoring Strategy by Resource Type<a href="https://volcano.sh/blog/Volcano-1.13.0-release#independent-scoring-strategy-by-resource-type" class="hash-link" aria-label="Direct link to Independent Scoring Strategy by Resource Type" title="Direct link to Independent Scoring Strategy by Resource Type" translate="no">​</a></h3>
<p>This feature allows users to specify <code>MostAllocated</code> (binpack) or <code>LeastAllocated</code> (spread) strategies for different resources (e.g., cpu, memory, nvidia.com/gpu) independently, and assign different weights to them. The scheduler calculates the node score meticulously based on the independent configuration for each resource.</p>
<p>To simplify the management of resources within the same family (e.g., different model GPUs from the same vendor), this feature also supports suffix wildcard (<code>*</code>) matching for resource names.</p>
<ul>
<li class=""><strong>Syntax Rules</strong>: Only suffix wildcards are supported, e.g., <code>nvidia.com/gpu/*</code>. Patterns like <code>*</code> or <code>vendor.*/gpu</code> are considered invalid.</li>
<li class=""><strong>Matching Priority</strong>: Uses the "longest prefix match" principle. Exact matches have the highest priority; when no exact match exists, the wildcard pattern with the longest prefix is selected.</li>
</ul>
<p>Configuration Example: The following configuration sets a high-priority binpack strategy for a specific V100 GPU model, a generic binpack strategy for all other NVIDIA GPUs, and a spread strategy for CPU resources. Pod-level resource scoring strategy configuration is also supported.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">actions</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"enqueue, allocate, backfill, reclaim, preempt"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">plugins</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> resource</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">strategy</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">fit</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">arguments</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">resourceStrategyFitWeight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">resources</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Exact match, highest priority</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">nvidia.com/gpu-v100</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> MostAllocated</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Wildcard match, applies to all other NVIDIA GPUs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">nvidia.com/gpu/*</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> MostAllocated</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Exact match for CPU resource</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">cpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> LeastAllocated</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="scarce-resource-avoidance-sra">Scarce Resource Avoidance (SRA)<a href="https://volcano.sh/blog/Volcano-1.13.0-release#scarce-resource-avoidance-sra" class="hash-link" aria-label="Direct link to Scarce Resource Avoidance (SRA)" title="Direct link to Scarce Resource Avoidance (SRA)" translate="no">​</a></h3>
<p>SRA is a "soft" strategy designed to improve the overall utilization of expensive or scarce resources (like GPUs). It influences node scoring to guide ordinary tasks that do not require specific scarce resources (e.g., CPU-only tasks) to avoid nodes containing those resources where possible. This helps "reserve" scarce resource nodes for tasks that truly need them, thereby reducing resource contention and task waiting time.</p>
<p>Mechanism:</p>
<ol>
<li class="">Users define a set of "scarce resources" (e.g., <code>nvidia.com/gpu</code>) in the configuration.</li>
<li class="">When scheduling a Pod that does <em>not</em> request any of the defined scarce resources, the SRA policy takes effect.</li>
<li class="">The scheduler reduces the score of nodes that possess these scarce resources. The more types of scarce resources a node has, the lower its score.</li>
<li class="">For Pods that <em>do</em> request scarce resources, the SRA policy does not negatively impact their scheduling decisions.</li>
</ol>
<p>Configuration Example: The following configuration defines <code>nvidia.com/gpu</code> as a scarce resource. When scheduling a CPU-only task, nodes with GPUs will have their scores reduced, making the task more likely to be scheduled onto nodes without GPUs.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">actions</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"enqueue, allocate, backfill, reclaim, preempt"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">plugins</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> resource</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">strategy</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">fit</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">arguments</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic"># ... binpack/spread strategy configuration for resourceStrategyFit ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">resources</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">nvidia.com/gpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> MostAllocated</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">cpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> LeastAllocated</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic"># SRA policy configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">sra</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">enable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">resources</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"nvidia.com/gpu"</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Define scarce resource list, comma-separated</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Weight of the SRA policy in the total score</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">resourceWeight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#00a4db">nvidia.com/gpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Define nvidia.com/gpu as a scarce resource and its weight</span><br></span></code></pre></div></div>
<p>By combining the binpack/spread strategies of ResourceStrategyFit with the avoidance strategy of SRA, users can achieve more refined and efficient scheduling of heterogeneous resources.</p>
<p>Related PRs: <a href="https://github.com/volcano-sh/volcano/pull/4391" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4391</a>, <a href="https://github.com/volcano-sh/volcano/pull/4454" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4454</a>, <a href="https://github.com/volcano-sh/volcano/pull/4512" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4512</a></p>
<p>Sincerely thanks to community developers: @<a href="https://github.com/LY-today" target="_blank" rel="noopener noreferrer" class="">LY-today</a>, @<a href="https://github.com/XbaoWu" target="_blank" rel="noopener noreferrer" class="">XbaoWu</a>, @<a href="https://github.com/ditingdapeng" target="_blank" rel="noopener noreferrer" class="">ditingdapeng</a>, @<a href="https://github.com/kingeasternsun" target="_blank" rel="noopener noreferrer" class="">kingeasternsun</a></p>
<p>Design documentation: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/resource-strategy-fit-scheduling.md" target="_blank" rel="noopener noreferrer" class="">ResourceStrategyFit Design</a></p>
<p>Usage documentation: <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin">ResourceStrategyFit User Guide</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="decouple-colocation-from-os">Decouple Colocation from OS<a href="https://volcano.sh/blog/Volcano-1.13.0-release#decouple-colocation-from-os" class="hash-link" aria-label="Direct link to Decouple Colocation from OS" title="Direct link to Decouple Colocation from OS" translate="no">​</a></h2>
<p>Volcano's colocation capability consists of two parts: application-level and kernel-level. Application-level colocation provides unified scheduling for online and offline workloads, dynamic resource overcommitment, node pressure eviction, etc. Kernel-level colocation involves QoS guarantees for resources like CPU, Memory, and Network at the kernel level, which typically requires support from a specific OS (like OpenEuler). In the new version, Volcano decouples the colocation capability from the OS. For users using an OS that does not support kernel-level colocation, they can choose to use Volcano's application-level colocation capabilities to achieve unified scheduling of online and offline tasks, dynamic resource overcommitment, and high-priority task guarantees.</p>
<p>Specific usage: When installing the Volcano agent, specify the <code>--supported-features</code> parameter:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm install volcano . --create-namespace -n volcano-system --set custom.colocation_enable=true --set "custom.agent_supported_features=OverSubscription\,Eviction\,Resources"</span><br></span></code></pre></div></div>
<p>Related PRs: <a href="https://github.com/volcano-sh/volcano/pull/4409" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4409</a>, <a href="https://github.com/volcano-sh/volcano/pull/4630" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4630</a></p>
<p>Sincerely thanks to community developers: @<a href="https://github.com/ShuhanYan" target="_blank" rel="noopener noreferrer" class="">ShuhanYan</a>, @<a href="https://github.com/Monokaix" target="_blank" rel="noopener noreferrer" class="">Monokaix</a></p>
<p>Colocation documentation: <a class="" href="https://volcano.sh/docs/KeyFeatures/cloudNativeColocation">Cloud Native Colocation</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="support-custom-oversubscription-resource-names">Support Custom OverSubscription Resource Names<a href="https://volcano.sh/blog/Volcano-1.13.0-release#support-custom-oversubscription-resource-names" class="hash-link" aria-label="Direct link to Support Custom OverSubscription Resource Names" title="Direct link to Support Custom OverSubscription Resource Names" translate="no">​</a></h2>
<p>The Volcano colocation Agent adds parameters <code>--extend-resource-cpu-name</code> and <code>--extend-resource-memory-name</code>, allowing users to customize the names of overcommitted resources. This supports custom naming for CPU and memory resources (defaults are <code>kubernetes.io/batch-cpu</code> and <code>kubernetes.io/batch-memory</code> respectively), enhancing flexibility in setting overcommitted resource names.</p>
<p>Specific usage: When installing Volcano, specify the <code>--extend-resource-cpu-name</code> and <code>--extend-resource-memory-name</code> parameters:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm install volcano . --create-namespace -n volcano-system --set custom.colocation_enable=true --set custom.agent_extend_resource_cpu_name=example.com/cpu --set custom.agent_extend_resource_memory_name=example.com/memory</span><br></span></code></pre></div></div>
<p>Related PRs: <a href="https://github.com/volcano-sh/volcano/pull/4413" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4413</a>, <a href="https://github.com/volcano-sh/volcano/pull/4630" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4630</a></p>
<p>Sincerely thanks to community developers: @<a href="https://github.com/ShuhanYan" target="_blank" rel="noopener noreferrer" class="">ShuhanYan</a>, @<a href="https://github.com/Monokaix" target="_blank" rel="noopener noreferrer" class="">Monokaix</a></p>
<p>Colocation documentation: <a class="" href="https://volcano.sh/docs/KeyFeatures/cloudNativeColocation">Cloud Native Colocation</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="add-kubernetes-133-support">Add Kubernetes 1.33 Support<a href="https://volcano.sh/blog/Volcano-1.13.0-release#add-kubernetes-133-support" class="hash-link" aria-label="Direct link to Add Kubernetes 1.33 Support" title="Direct link to Add Kubernetes 1.33 Support" translate="no">​</a></h2>
<p>The Volcano version keeps pace with the Kubernetes community releases. v1.13 supports the latest Kubernetes v1.33 release, ensuring functionality and reliability through comprehensive UT and E2E test cases.</p>
<p>For participating in Volcano's adaptation work for new Kubernetes versions, refer to: <a href="https://github.com/volcano-sh/volcano/blob/v1.13.0/docs/design/adapt-k8s-todo.md" target="_blank" rel="noopener noreferrer" class="">adapt-k8s-todo</a>.</p>
<p>Related PR: <a href="https://github.com/volcano-sh/volcano/pull/4430" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4430</a></p>
<p>Sincerely thanks to community developer: @<a href="https://github.com/mahdikhashan" target="_blank" rel="noopener noreferrer" class="">mahdikhashan</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="conclusion-volcano-v1130-continues-to-lead-cloud-native-batch-computing"><strong>Conclusion: Volcano v1.13.0 Continues to Lead Cloud-Native Batch Computing</strong><a href="https://volcano.sh/blog/Volcano-1.13.0-release#conclusion-volcano-v1130-continues-to-lead-cloud-native-batch-computing" class="hash-link" aria-label="Direct link to conclusion-volcano-v1130-continues-to-lead-cloud-native-batch-computing" title="Direct link to conclusion-volcano-v1130-continues-to-lead-cloud-native-batch-computing" translate="no">​</a></h2>
<p>Volcano v1.13.0 is not just a technological advancement but a continuation of innovation in cloud-native batch computing. Whether for AI large model training and inference, Big Data scheduling, or resource optimization, Volcano v1.13.0 delivers powerful features and flexible solutions. We believe Volcano v1.13.0 will help users achieve greater heights in cloud-native batch computing, ushering in a new era of AI and Big Data scheduling!</p>
<p><strong>Experience Volcano v1.13.0 now and step into a new era of efficient computing!</strong></p>
<p><strong>v1.13.0 release:</strong> <a href="https://github.com/volcano-sh/volcano/releases/tag/v1.13.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.13.0</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="acknowledgments"><strong>Acknowledgments</strong><a href="https://volcano.sh/blog/Volcano-1.13.0-release#acknowledgments" class="hash-link" aria-label="Direct link to acknowledgments" title="Direct link to acknowledgments" translate="no">​</a></h2>
<p>Volcano v1.13.0 includes contributions from 36 community members. Sincerely thanks to all contributors:</p>
<table><thead><tr><th style="text-align:left">@ElectricFish7</th><th style="text-align:left">@philandstuff</th><th style="text-align:left">@junzebao</th></tr></thead><tbody><tr><td style="text-align:left">@ShuhanYan</td><td style="text-align:left">@GautamBytes</td><td style="text-align:left">@coldzerofear</td></tr><tr><td style="text-align:left">@houyuting</td><td style="text-align:left">@lhlxc</td><td style="text-align:left">@cyf-2002</td></tr><tr><td style="text-align:left">@neo502721</td><td style="text-align:left">@suyiiyii</td><td style="text-align:left">@dafu-wu</td></tr><tr><td style="text-align:left">@ditingdapeng</td><td style="text-align:left">@GoingCharlie</td><td style="text-align:left">@Wonki4</td></tr><tr><td style="text-align:left">@zhaoqi612</td><td style="text-align:left">@huntersman</td><td style="text-align:left">@JesseStutler</td></tr><tr><td style="text-align:left">@LY-today</td><td style="text-align:left">@XbaoWu</td><td style="text-align:left">@kingeasternsun</td></tr><tr><td style="text-align:left">@Monokaix</td><td style="text-align:left">@wuyueandrew</td><td style="text-align:left">@mahdikhashan</td></tr><tr><td style="text-align:left">@bibibox</td><td style="text-align:left">@archlitchi</td><td style="text-align:left">@guoqinwill</td></tr><tr><td style="text-align:left">@ouyangshengjia</td><td style="text-align:left">@Poor12</td><td style="text-align:left">@dongjiang1989</td></tr><tr><td style="text-align:left">@zhifei92</td><td style="text-align:left">@halcyon-r</td><td style="text-align:left">@Xu-Wentao</td></tr><tr><td style="text-align:left">@hajnalmt</td><td style="text-align:left">@kevin-wangzefeng</td><td style="text-align:left">@linuxfhy</td></tr></tbody></table>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>llm</category>
            <category>scheduling</category>
        </item>
        <item>
            <title><![CDATA[iFlytek Enhances AI Infrastructure with Volcano, Wins CNCF End-User Case Study Award]]></title>
            <link>https://volcano.sh/blog/iflytek_case_study</link>
            <guid>https://volcano.sh/blog/iflytek_case_study</guid>
            <pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[iFlytek was awarded for its innovative use of Volcano in the CNCF End-User Case Study Competition and shared its success in large-scale AI model training at KubeCon + CloudNativeCon China 2025.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/iflytek-0b0689e3a068c599cda4bf4609865fa0.jpeg" width="1080" height="567" class="img_ev3q"></p>
<p>[HONG KONG, CHINA — June 10, 2025] — The Cloud Native Computing Foundation (CNCF) today announced that iFlytek has won the CNCF End-User Case Study Competition. The CNCF, which is committed to building a sustainable ecosystem for cloud native software, recognized iFlytek for its innovative use of Volcano. The company shared its success in large-scale AI model training at the KubeCon + CloudNativeCon China conference, held in Hong Kong from June 10-11.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="iflyteks-challenges">iFlytek's Challenges<a href="https://volcano.sh/blog/iflytek_case_study#iflyteks-challenges" class="hash-link" aria-label="Direct link to iFlytek's Challenges" title="Direct link to iFlytek's Challenges" translate="no">​</a></h3>
<p>As a leading Chinese technology company specializing in voice and language AI, iFlytek faced significant scaling challenges amid its rapid business growth. Inefficient scheduling led to underutilized GPU resources, while complex workflow management and intense resource contention among teams slowed down research and development, straining the company's infrastructure.</p>
<p><strong>By adopting Volcano, iFlytek implemented elastic scheduling, DAG-based workflows, and multi-tenancy isolation, which simplified operations and significantly improved resource utilization.</strong></p>
<p>"Before using Volcano, coordinating training across our large-scale GPU clusters was a constant exercise in firefighting, with frequent resource bottlenecks, task failures, and complex pipeline debugging," said <strong>DongJiang, Senior Platform Architect at iFlytek</strong>. "Volcano gives us the flexible control we need to scale our AI training efficiently and reliably. We are honored to be recognized by the CNCF and look forward to sharing our experiences with the community at KubeCon + CloudNativeCon China."</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="about-volcano">About Volcano<a href="https://volcano.sh/blog/iflytek_case_study#about-volcano" class="hash-link" aria-label="Direct link to About Volcano" title="Direct link to About Volcano" translate="no">​</a></h3>
<p>Volcano is a cloud-native batch computing system built on Kubernetes. It is designed for high-performance workloads, including AI/machine learning, big data processing, and scientific computing. Volcano offers advanced scheduling capabilities such as job orchestration, fair-share resource allocation, and queue management to efficiently handle large-scale distributed tasks. After joining the CNCF as a Sandbox project in 2020 and graduating to the Incubating stage in 2022, Volcano has become a critical tool for compute-intensive workloads.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="significant-results-iflytek-achieved-with-volcano">Significant Results iFlytek Achieved with Volcano<a href="https://volcano.sh/blog/iflytek_case_study#significant-results-iflytek-achieved-with-volcano" class="hash-link" aria-label="Direct link to Significant Results iFlytek Achieved with Volcano" title="Direct link to Significant Results iFlytek Achieved with Volcano" translate="no">​</a></h3>
<p>As the demand for AI grew, iFlytek turned to Volcano to manage its increasingly large and complex training infrastructure. The engineering team required a more efficient way to allocate resources, handle complex multi-stage training workflows, minimize job interruptions, and ensure fair resource access across teams. <strong>With Volcano, they achieved:</strong></p>
<ul>
<li class=""><strong>A 40% improvement in GPU utilization,</strong> leading to significantly lower infrastructure costs and reduced resource idling.</li>
<li class=""><strong>A 70% faster recovery from task failures,</strong> ensuring continuous training operations.</li>
<li class=""><strong>A 50% reduction in resource interference,</strong> ensuring service stability and resource usage flexibility.</li>
</ul>
<p><strong>Chris Aniszczyk, CTO of the CNCF,</strong> commented, "iFlytek's story is a great example of how open source technology can solve complex and critical challenges at scale. By leveraging Volcano to improve GPU efficiency and streamline their training workflows, they have reduced costs, accelerated development, and built a more reliable AI infrastructure on Kubernetes—a critical advantage for any organization at the forefront of AI."</p>
<p>As AI workloads become more complex and resource-intensive, iFlytek's success demonstrates that cloud-native tools like Volcano are essential for teams looking to simplify operations and enhance scalability. Their presentation at KubeCon + CloudNativeCon China [1] offers practical insights into managing distributed training more effectively in a Kubernetes environment.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="references">References<a href="https://volcano.sh/blog/iflytek_case_study#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h3>
<p>[1] Presentation: <a href="https://kccncchn2025.sched.com/event/23EWS?iframe=no" target="_blank" rel="noopener noreferrer" class="">https://kccncchn2025.sched.com/event/23EWS?iframe=no</a></p>]]></content:encoded>
            <category>case-study</category>
            <category>iflytek</category>
            <category>ai</category>
            <category>infrastructure</category>
            <category>award</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.12.0 Available Now]]></title>
            <link>https://volcano.sh/blog/Volcano-1.12.0-release</link>
            <guid>https://volcano.sh/blog/Volcano-1.12.0-release</guid>
            <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[New features: Network Topology-Aware Scheduling (Alpha), Dynamic MIG Partitioning for GPU Virtualization, DRA Support, Queue Capacity Management in Volcano Global, Security Enhancements, Performance Optimizations, Gang Scheduling for Generic Workloads, Job Flow Improvements, and Kubernetes v1.32 Support.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="volcano-v112-released-advancing-cloud-native-ai-and-batch-computing">Volcano v1.12 released: Advancing Cloud-Native AI and Batch Computing<a href="https://volcano.sh/blog/Volcano-1.12.0-release#volcano-v112-released-advancing-cloud-native-ai-and-batch-computing" class="hash-link" aria-label="Direct link to Volcano v1.12 released: Advancing Cloud-Native AI and Batch Computing" title="Direct link to Volcano v1.12 released: Advancing Cloud-Native AI and Batch Computing" translate="no">​</a></h2>
<p>As AI large model technology rapidly evolves, enterprises are placing higher demands on computing resource efficiency and application performance. For complex application scenarios such as AI, big data, and high-performance computing (HPC), efficiently utilizing accelerators like GPUs, ensuring high system availability, and managing resources with fine granularity are the core areas of focus for the Volcano community's continuous innovation.</p>
<p>Each version of Volcano is an active response to these challenges. With contributions from <strong>over 1,000 developers from more than 30 countries, resulting in nearly 40,000 contributions</strong>, Volcano has been adopted in production environments by more than 60 enterprises worldwide. Its scheduling performance and resource management capabilities have been widely proven in practice.</p>
<p>Today, the <strong>Volcano community officially releases v1.12.</strong> This new version focuses on the core requirements of modern AI and big data scenarios, and introduces a series of key features and usability improvements:</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="highlights-of-v112"><strong>Highlights of v1.12</strong><a href="https://volcano.sh/blog/Volcano-1.12.0-release#highlights-of-v112" class="hash-link" aria-label="Direct link to highlights-of-v112" title="Direct link to highlights-of-v112" translate="no">​</a></h3>
<ul>
<li class=""><strong>Network Topology-Aware Scheduling (Alpha):</strong> Optimizes the deployment of large-scale AI training and inference tasks by using network topology awareness to reduce cross-switch communication and improve runtime efficiency.</li>
<li class=""><strong>Enhanced GPU Virtualization:</strong> Adds support for NVIDIA GPU dynamic MIG partitioning besides the existing vCUDA solution. This provides users with both software and hardware virtualization options for more flexible and efficient GPU resource sharing.</li>
<li class=""><strong>DRA Support:</strong> Enhances the flexibility and capabilities of heterogeneous resource management.</li>
<li class=""><strong>Queue Capacity Management in Volcano Global:</strong> Supports unified limits and management of resource quotas (capabilities) for tenant queues in a multi-cluster environment.</li>
<li class=""><strong>Comprehensive Security Enhancements:</strong> Implements multi-dimensional security hardening, from API access control to container runtime permissions, to improve system robustness.</li>
<li class=""><strong>Performance Optimization for Large-Scale Scenarios:</strong> Improves concurrent task processing efficiency by reducing unnecessary webhook calls.</li>
<li class=""><strong>Enhanced Gang Scheduling for Generic Workloads:</strong> Adds support for custom minimum member counts (<code>minMember</code>) for Gang scheduling of generic workloads like Deployments and StatefulSets via annotations, providing more fine-grained Gang Scheduling strategies.</li>
<li class=""><strong>Job Flow Enhancements:</strong> Improves the robustness and observability of the built-in workflow orchestration engine.</li>
<li class="">And many other stability and usability improvements.</li>
</ul>
<p>We believe these updates in v1.12 will further enhance intelligent task scheduling, resource utilization, and overall system performance, helping users to better meet the challenges of the AI and big data era.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="core-feature-details">Core Feature Details<a href="https://volcano.sh/blog/Volcano-1.12.0-release#core-feature-details" class="hash-link" aria-label="Direct link to Core Feature Details" title="Direct link to Core Feature Details" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="network-topology-aware-scheduling-alpha-release">Network Topology-Aware Scheduling (Alpha Release)<a href="https://volcano.sh/blog/Volcano-1.12.0-release#network-topology-aware-scheduling-alpha-release" class="hash-link" aria-label="Direct link to Network Topology-Aware Scheduling (Alpha Release)" title="Direct link to Network Topology-Aware Scheduling (Alpha Release)" translate="no">​</a></h3>
<p>Previously a preview feature in v1.11, Volcano's Network Topology-Aware Scheduling is now an Alpha release in v1.12. This feature is designed to optimize the deployment of AI tasks in large-scale training and inference scenarios (e.g., model-parallel training, leader-worker inference). By scheduling tasks within the same network topology performance domain, it reduces cross-switch communication, thereby significantly improving task efficiency. Volcano uses the HyperNode CRD to abstract and represent heterogeneous hardware network topologies and supports a hierarchical structure for easier management.</p>
<p>Version 1.12 integrates the following key features:</p>
<ul>
<li class=""><strong>HyperNode Auto-Discovery:</strong> Volcano can now automatically discover the cluster's network topology. Users can configure the discovery type, and the system will automatically create and maintain hierarchical HyperNodes that reflect the cluster's actual network topology. It currently supports obtaining topology information from InfiniBand (IB) networks via the UFM (Unified Fabric Manager) interface to automatically update HyperNodes. Support for more network protocols like RoCE is planned for the future.</li>
<li class=""><strong>Prioritized HyperNode Selection:</strong> This version introduces a scoring strategy based on a combination of node-level and HyperNode-level scores to determine the final priority of a HyperNode.<!-- -->
<ul>
<li class=""><strong>Node-level:</strong> It is recommended to configure the BinPack plugin to pack nodes within a HyperNode first, reducing resource fragmentation.</li>
<li class=""><strong>HyperNode-level:</strong> Lower-level HyperNodes are prioritized for better performance, as they involve fewer cross-switch traversals. For HyperNodes at the same level, those containing more tasks receive a higher score to reduce HyperNode-level resource fragmentation.</li>
</ul>
</li>
<li class=""><strong>Node Matching with Label Selectors:</strong> HyperNode leaf nodes are associated with physical nodes in the cluster and support the following three matching strategies:<!-- -->
<ul>
<li class=""><strong>Exact Match:</strong> Directly matches node names.</li>
<li class=""><strong>Regex Match:</strong> Matches node names using regular expressions.</li>
<li class=""><strong>Label Match:</strong> Matches nodes using standard Label Selectors.</li>
</ul>
</li>
</ul>
<p>Related documentation:</p>
<ul>
<li class=""><a class="" href="https://volcano.sh/docs/KeyFeatures/NetworkTopologyAware">Network Topology-Aware Scheduling Introduction and Usage</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/Network%20Topology%20Aware%20Scheduling.md" target="_blank" rel="noopener noreferrer" class="">Network Topology-Aware Scheduling Design Document</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/hyperNode-auto-discovery.md" target="_blank" rel="noopener noreferrer" class="">HyperNode Auto-Discovery Design Document</a></li>
<li class=""><a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_hypernode_auto_discovery">HyperNode Auto-Discovery Usage Guide</a></li>
</ul>
<p>Related PRs:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3874" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3874</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3894" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3894</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3969" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3969</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3971" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3971</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4068" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4068</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4213" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4213</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3897" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3897</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3887" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3887</a></li>
</ul>
<p>Thanks to the following community developers for their contributions to this feature: <strong>@ecosysbin, @weapons97, @Xu-Wentao, @penggu, @JesseStutler, @Monokaix</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="dynamic-mig-partitioning-for-gpu-virtualization">Dynamic MIG Partitioning for GPU Virtualization<a href="https://volcano.sh/blog/Volcano-1.12.0-release#dynamic-mig-partitioning-for-gpu-virtualization" class="hash-link" aria-label="Direct link to Dynamic MIG Partitioning for GPU Virtualization" title="Direct link to Dynamic MIG Partitioning for GPU Virtualization" translate="no">​</a></h3>
<p>Volcano's GPU virtualization feature allows users to request partial GPU resources based on memory and compute power. It works with a Device Plugin to achieve hardware isolation and improve GPU utilization. While traditional GPU virtualization limits GPU usage by intercepting CUDA APIs, the MIG (Multi-Instance GPU) technology in the NVIDIA Ampere architecture allows a single physical GPU to be partitioned into multiple independent instances. However, typical MIG solutions often use pre-configured, fixed-size instances, which can lead to resource waste and inflexibility.</p>
<p><strong>Volcano v1.12 introduces dynamic MIG partitioning and scheduling capabilities.</strong> It can select the appropriate MIG instance size in real-time based on the user's requested GPU amount and uses a Best-Fit algorithm to reduce resource waste. It also supports GPU scoring strategies like BinPack and Spread to minimize resource fragmentation and improve GPU utilization. Users can request resources using the unified APIs <code>volcano.sh/vgpu-number</code>, <code>volcano.sh/vgpu-cores</code>, and <code>volcano.sh/vgpu-memory</code>, without needing to be aware of the underlying implementation details.</p>
<ul>
<li class="">Design Document: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/dynamic-mig.md" target="_blank" rel="noopener noreferrer" class="">Dynamic MIG Design Document</a></li>
<li class="">Usage Guide: <a class="" href="https://volcano.sh/docs/KeyFeatures/GPUVirtualization">Dynamic MIG Usage Guide</a></li>
</ul>
<p>Related PRs:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4290" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4290</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3953" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3953</a></li>
</ul>
<p>Thanks to the following community developers for their contributions to this feature: <strong>@sailorvii, @archlitchi</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="support-for-dynamic-resource-allocation-dra">Support for Dynamic Resource Allocation (DRA)<a href="https://volcano.sh/blog/Volcano-1.12.0-release#support-for-dynamic-resource-allocation-dra" class="hash-link" aria-label="Direct link to Support for Dynamic Resource Allocation (DRA)" title="Direct link to Support for Dynamic Resource Allocation (DRA)" translate="no">​</a></h3>
<p>Kubernetes DRA (Dynamic Resource Allocation) is a native feature that provides a more flexible and powerful way to manage heterogeneous hardware resources in a cluster, such as GPUs, FPGAs, and high-performance network cards. It addresses the limitations of the traditional Device Plugin model in some advanced scenarios. Volcano v1.12 adds support for DRA, allowing the cluster to dynamically allocate and manage external resources, which enhances Volcano's integration with the Kubernetes ecosystem and improves the flexibility of resource management.</p>
<ul>
<li class="">Usage Guide: <a class="" href="https://volcano.sh/docs/KeyFeatures/UnifiedScheduling">Enabling DRA in Volcano</a></li>
</ul>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3799" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3799</a></li>
</ul>
<p>Thanks to community developer <strong>@JesseStutler</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="queue-capacity-management-in-volcano-global">Queue Capacity Management in Volcano Global<a href="https://volcano.sh/blog/Volcano-1.12.0-release#queue-capacity-management-in-volcano-global" class="hash-link" aria-label="Direct link to Queue Capacity Management in Volcano Global" title="Direct link to Queue Capacity Management in Volcano Global" translate="no">​</a></h3>
<p>Queues are a core concept in Volcano. To support quota management in multi-cluster and multi-tenant environments, Volcano v1.12 extends its global queue capacity management capabilities. Users can now uniformly limit tenant resource usage in a multi-cluster environment. The configuration is consistent with the single-cluster scenario: the <code>capability</code> field in the queue configuration is used to limit tenant quotas.</p>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano-global/pull/16" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano-global/pull/16</a></li>
</ul>
<p>Thanks to community developer <strong>@tanberBro</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="security-enhancements">Security Enhancements<a href="https://volcano.sh/blog/Volcano-1.12.0-release#security-enhancements" class="hash-link" aria-label="Direct link to Security Enhancements" title="Direct link to Security Enhancements" translate="no">​</a></h3>
<p>The Volcano community is committed to security. In v1.12, in addition to fine-grained control over sensitive permissions like ClusterRoles, the following security risks have been addressed and hardened:</p>
<ul>
<li class=""><strong>Set Timeouts for HTTP Servers:</strong> The Metric and Healthz endpoints of all Volcano components now have server-side <code>ReadHeader</code>, <code>Read</code>, and <code>Write</code> timeouts to prevent prolonged resource occupation. (PR: <a href="https://github.com/volcano-sh/volcano/pull/4208" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4208</a>)</li>
<li class=""><strong>Add Warning for Skipping SSL Certificate Verification:</strong> When a client request sets <code>insecureSkipVerify</code> to <code>true</code>, a warning is logged to recommend enabling SSL certificate verification in production environments. (PR: <a href="https://github.com/volcano-sh/volcano/pull/4211" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4211</a>)</li>
<li class=""><strong>Disable Volcano Scheduler's pprof Endpoint by Default:</strong> To prevent the leakage of sensitive program information, the profiling data port used for troubleshooting is now disabled by default. (PR: <a href="https://github.com/volcano-sh/volcano/pull/4173" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4173</a>)</li>
<li class=""><strong>Remove Unnecessary File Permissions:</strong> Unnecessary execute permissions have been removed from Go source files to follow the principle of least privilege. (PR: <a href="https://github.com/volcano-sh/volcano/pull/4171" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4171</a>)</li>
<li class=""><strong>Set Security Context for Containers and Run as Non-Root:</strong> All Volcano components now run with non-root privileges. Security contexts have been added with <code>seccompProfile</code> and <code>SELinuxOptions</code>, and <code>allowPrivilegeEscalation</code> is set to <code>false</code> to prevent container privilege escalation. Only necessary Linux capabilities are retained, comprehensively restricting container permissions. (PR: <a href="https://github.com/volcano-sh/volcano/pull/4207" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4207</a>)</li>
<li class=""><strong>Limit HTTP Response Body Size:</strong> For HTTP requests sent by the Extender Plugin and ElasticSearch Service, the response body size is limited to prevent issues like OOM caused by excessive resource consumption. (Advisory: <a href="https://github.com/volcano-sh/volcano/security/advisories/GHSA-hg79-fw4p-25p8" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/security/advisories/GHSA-hg79-fw4p-25p8</a>)</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="performance-improvements-for-large-scale-scenarios">Performance Improvements for Large-Scale Scenarios<a href="https://volcano.sh/blog/Volcano-1.12.0-release#performance-improvements-for-large-scale-scenarios" class="hash-link" aria-label="Direct link to Performance Improvements for Large-Scale Scenarios" title="Direct link to Performance Improvements for Large-Scale Scenarios" translate="no">​</a></h3>
<p>Volcano's performance is continuously being optimized. The new version removes and disables some non-essential webhooks by default without affecting functionality, improving performance in large-scale batch creation scenarios:</p>
<ul>
<li class=""><strong>PodGroup Mutating Webhook Disabled by Default:</strong> Previously, when a PodGroup was created without a specified queue, the queue could be populated from the Namespace. Since this scenario is uncommon, this webhook is now disabled by default. Users can enable it if needed.</li>
<li class=""><strong>Queue Status Check Moved from Pod to PodGroup:</strong> Task submission is not allowed when a queue is in a closed state. The original validation logic was performed at the Pod creation stage. Since Volcano's basic scheduling unit is the PodGroup, moving the validation to the PodGroup creation stage is more efficient. As the number of PodGroups is less than the number of Pods, this change reduces webhook calls and improves performance.</li>
</ul>
<p>Related PRs:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4128" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4128</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4132" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4132</a></li>
</ul>
<p>Thanks to community developer <strong>@Monokaix</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="gang-scheduling-for-various-workload-types">Gang Scheduling for Various Workload Types<a href="https://volcano.sh/blog/Volcano-1.12.0-release#gang-scheduling-for-various-workload-types" class="hash-link" aria-label="Direct link to Gang Scheduling for Various Workload Types" title="Direct link to Gang Scheduling for Various Workload Types" translate="no">​</a></h3>
<p>Gang scheduling is a core capability of Volcano. For Volcano Job and PodGroup objects, users can directly set <code>minMember</code> to define the required minimum number of replicas. In the new version, users can specify this minimum by setting the annotation <code>scheduling.volcano.sh/group-min-member</code> on other types of workloads such as Deployments, StatefulSets, and Jobs. This means that when using Volcano for scheduling, either the specified number of replicas are all scheduled successfully, or none are scheduled at all, enabling Gang scheduling for a wider variety of workload types.</p>
<p>For example, to set <code>minMember=10</code> for a Deployment:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> apps/v1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Deployment</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> volcano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">group</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">deployment</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">annotations</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Set min member=10</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">scheduling.volcano.sh/group-min-member</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"10"</span><br></span></code></pre></div></div>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4000" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4000</a></li>
</ul>
<p>Thanks to community developer <strong>@sceneryback</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="job-flow-enhancements">Job Flow Enhancements<a href="https://volcano.sh/blog/Volcano-1.12.0-release#job-flow-enhancements" class="hash-link" aria-label="Direct link to Job Flow Enhancements" title="Direct link to Job Flow Enhancements" translate="no">​</a></h3>
<p>Job Flow is a lightweight workflow orchestration framework for Volcano Jobs. In v1.12, Job Flow has been enhanced with the following improvements:</p>
<ul>
<li class="">New Monitoring Metrics: Added metrics for the number of successful and failed Job Flows.</li>
<li class="">DAG Validity Check: Introduced a function to validate the structure of a Job Flow's Directed Acyclic Graph (DAG).</li>
<li class="">State Synchronization Fix: Resolved an issue that caused inaccurate Job Flow state synchronization.</li>
</ul>
<p>Related PRs:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4169" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4169</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4090" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4090</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4135" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4135</a></li>
</ul>
<p>Thanks to community developer <strong>@dongjiang1989</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="finer-grained-permission-control-in-multi-tenant-scenarios">Finer-Grained Permission Control in Multi-Tenant Scenarios<a href="https://volcano.sh/blog/Volcano-1.12.0-release#finer-grained-permission-control-in-multi-tenant-scenarios" class="hash-link" aria-label="Direct link to Finer-Grained Permission Control in Multi-Tenant Scenarios" title="Direct link to Finer-Grained Permission Control in Multi-Tenant Scenarios" translate="no">​</a></h3>
<p>Volcano natively supports multi-tenant environments and emphasizes permission control in such scenarios. In the new version, Volcano has enhanced permission control for Volcano Jobs by adding read-only and read-write ClusterRoles. Users can assign different permissions to tenants as needed to achieve better isolation.</p>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4174" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4174</a></li>
</ul>
<p>Thanks to community developer <strong>@Hcryw</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="kubernetes-132-support">Kubernetes 1.32 Support<a href="https://volcano.sh/blog/Volcano-1.12.0-release#kubernetes-132-support" class="hash-link" aria-label="Direct link to Kubernetes 1.32 Support" title="Direct link to Kubernetes 1.32 Support" translate="no">​</a></h3>
<p>Volcano stays current with Kubernetes releases. Version 1.12 supports the latest Kubernetes v1.32 and ensures functionality and reliability through comprehensive unit and end-to-end (E2E) tests.</p>
<p>To participate in Volcano's adaptation work for new Kubernetes versions, please refer to: <a href="https://github.com/volcano-sh/volcano/pull/4318" target="_blank" rel="noopener noreferrer" class="">adapt-k8s-todo</a>.</p>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4099" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4099</a></li>
</ul>
<p>Thanks to community developers <strong>@guoqinwill</strong> and <strong>@danish9039</strong> for their contributions to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="enhanced-queue-monitoring-metrics">Enhanced Queue Monitoring Metrics<a href="https://volcano.sh/blog/Volcano-1.12.0-release#enhanced-queue-monitoring-metrics" class="hash-link" aria-label="Direct link to Enhanced Queue Monitoring Metrics" title="Direct link to Enhanced Queue Monitoring Metrics" translate="no">​</a></h3>
<p>Volcano queues now include several new key resource metrics. The system now supports monitoring and visualization of <code>request</code>, <code>allocated</code>, <code>deserved</code>, <code>capacity</code>, and <code>real_capacity</code> for CPU, memory, and extended resources, providing a detailed view of the status of key queue resources.</p>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3937" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3937</a></li>
</ul>
<p>Thanks to community developer <strong>@zedongh</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="fuzz-testing-support">Fuzz Testing Support<a href="https://volcano.sh/blog/Volcano-1.12.0-release#fuzz-testing-support" class="hash-link" aria-label="Direct link to Fuzz Testing Support" title="Direct link to Fuzz Testing Support" translate="no">​</a></h3>
<p>Fuzz testing is an automated software testing technique. In this release, Volcano introduces a fuzz testing framework to test key function units. It uses Google's open-source OSS-Fuzz framework for continuous testing, which helps to discover potential vulnerabilities and defects early, enhancing the security and robustness of Volcano.</p>
<p>Related PR:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4205" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4205</a></li>
</ul>
<p>Thanks to community developer <strong>@AdamKorcz</strong> for their contribution to this feature.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="stability-enhancements">Stability Enhancements<a href="https://volcano.sh/blog/Volcano-1.12.0-release#stability-enhancements" class="hash-link" aria-label="Direct link to Stability Enhancements" title="Direct link to Stability Enhancements" translate="no">​</a></h3>
<p>This release includes several stability fixes, addressing issues such as panics caused by improper queue capacity settings, hierarchical queue validation failures, unnecessary PodGroup refreshes, and StatefulSets with zero replicas consuming queue resources. These improvements further enhance the stability of the system in complex scenarios.</p>
<p>Related PRs:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4273" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4273</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4272" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4272</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4179" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4179</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4141" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4141</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4033" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4033</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/4012" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/4012</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/pull/3603" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3603</a></li>
</ul>
<p>Thanks to the following community developers for their contributions: <strong>@halcyon-r, @guoqinwill, @JackyTYang, @JesseStutler, @zhutong196, @Wang-Kai, @HalfBuddhist</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="pre-upgrade-notes">Pre-Upgrade Notes<a href="https://volcano.sh/blog/Volcano-1.12.0-release#pre-upgrade-notes" class="hash-link" aria-label="Direct link to Pre-Upgrade Notes" title="Direct link to Pre-Upgrade Notes" translate="no">​</a></h4>
<p>Before upgrading to Volcano v1.12, please note the following changes:</p>
<ul>
<li class=""><strong>PodGroup Mutating Webhook Disabled by Default:</strong> In v1.12, the PodGroup's Mutating Webhook is disabled by default. If you have workflows that rely on the webhook to automatically populate a PodGroup's queue from its Namespace, you must manually enable this webhook after upgrading.</li>
<li class=""><strong>Queue Status Check Migration and Behavioral Change:</strong> The queue status validation logic for task submission has been moved from the Pod creation stage to the PodGroup creation stage. Now, when a queue is closed, the system will prevent task submission at the PodGroup creation time. However, individual Pods (not submitted via a PodGroup) can still be submitted to a closed queue, but they will not be scheduled by the Volcano Scheduler.</li>
<li class=""><strong>Volcano Scheduler pprof Endpoint Disabled by Default:</strong> For security reasons, the Volcano Scheduler's pprof endpoint is disabled by default in this version. If needed, it can be explicitly enabled via the Helm parameter <code>custom.scheduler_pprof_enable=true</code> or the command-line argument <code>--enable-pprof=true</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="summary-and-future-work">Summary and Future Work<a href="https://volcano.sh/blog/Volcano-1.12.0-release#summary-and-future-work" class="hash-link" aria-label="Direct link to Summary and Future Work" title="Direct link to Summary and Future Work" translate="no">​</a></h2>
<p>The release of Volcano v1.12 is the result of the joint efforts of community contributors and users. This version brings enhancements to AI task scheduling, GPU resource utilization, heterogeneous resource management, security, and performance and stability in large-scale scenarios.</p>
<p>Version 1.12 aims to improve the performance and efficiency of running AI, big data, and other batch computing tasks in cloud-native environments. We recommend that users upgrade to the new version and welcome feedback and suggestions for improvement through our community channels.</p>
<p>In the future, the Volcano community will continue to focus on the core needs of CNAI, big data, and other fields, iterating continuously.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="roadmap-and-call-for-contributions"><strong>Roadmap and Call for Contributions</strong><a href="https://volcano.sh/blog/Volcano-1.12.0-release#roadmap-and-call-for-contributions" class="hash-link" aria-label="Direct link to roadmap-and-call-for-contributions" title="Direct link to roadmap-and-call-for-contributions" translate="no">​</a></h2>
<p>The Volcano community is committed to building a more powerful, flexible, and user-friendly batch computing platform while actively responding to evolving technology trends and user needs. In upcoming releases, we plan to focus on the following areas:</p>
<ol>
<li class="">
<p><strong>Deepen Network Topology-Aware Scheduling Capabilities:</strong> Building on the v1.12 Alpha version, we will continue to enhance our network topology-aware capabilities. Key areas include providing automatic discovery support for RoCE networks, intelligent identification and use of node labels, and moving towards more fine-grained, task-level topology-aware scheduling. We will also explore and implement more advanced scheduling features to meet the performance requirements of complex AI training scenarios. Related issues:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4331" target="_blank" rel="noopener noreferrer" class="">HyperNode based binpack scheduling policy needed</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4188" target="_blank" rel="noopener noreferrer" class="">Support task level network topology constraint</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4145" target="_blank" rel="noopener noreferrer" class="">Support identifying network topology from node labels and converting into hyperNode resources</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4233" target="_blank" rel="noopener noreferrer" class="">Network-topology-aware scheduling optimization: node reordering for tasks</a></li>
</ul>
</li>
<li class="">
<p><strong>Introduce Advanced Resource Management Mechanisms:</strong> We will focus on developing and improving job rescheduling and resource reservation functions. This will help to more flexibly respond to dynamic changes in cluster load, ensure resource guarantees for critical tasks, and further improve overall cluster resource utilization. Related issue:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/3948" target="_blank" rel="noopener noreferrer" class="">GPU fragmentation across nodes and Job/Pod rescheduling strategy request</a></li>
</ul>
</li>
<li class="">
<p><strong>Enhance Queue Scheduling Flexibility:</strong> We will provide fine-grained configuration for queue-level scheduling policies. This will allow users to customize scheduling behavior and resource allocation strategies based on the characteristics, priorities, and SLA requirements of different business queues. Related issue:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/3992" target="_blank" rel="noopener noreferrer" class="">volcano supports queue-level scheduling policies</a></li>
</ul>
</li>
<li class="">
<p><strong>Deepen Ecosystem Collaboration and Integration:</strong> We will actively promote collaboration with the upstream Kubernetes community and other cloud-native projects, such as integrating LWS (Leader Worker Set) with Volcano to better provide Gang Scheduling capabilities for distributed applications. Related issue:</p>
<ul>
<li class=""><a href="https://github.com/kubernetes-sigs/lws/issues/407" target="_blank" rel="noopener noreferrer" class="">Support custom scheduler to enable gang scheduling</a>
We warmly welcome other open-source projects to join with Volcano to build and enrich the cloud-native batch computing ecosystem.</li>
</ul>
</li>
<li class="">
<p><strong>Expand Heterogeneous Hardware Support and Cooperation:</strong> We will strengthen cooperation with hardware ecosystem partners, such as adapting and optimizing Ascend's Device Plugin and DRA Driver, and collaborating with major GPU vendors on DRA Drivers. This will ensure that Volcano can efficiently and stably schedule and manage various cutting-edge heterogeneous accelerator resources.</p>
</li>
<li class="">
<p><strong>Improve JobFlow Workflow Capabilities:</strong> We will continue to optimize Volcano's built-in lightweight workflow engine, JobFlow. Plans include enhancing its capabilities in complex job dependency management, status monitoring, error handling, and user-defined extensions to provide users with a more powerful and user-friendly workflow orchestration solution. Related issues:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4098" target="_blank" rel="noopener noreferrer" class="">Support JobFlowTemplate CRD</a></li>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4275" target="_blank" rel="noopener noreferrer" class="">Enhance JobFlow Functionality</a></li>
</ul>
</li>
<li class="">
<p><strong>Introduce Volcano Scheduler Simulator to Enhance Scheduling Transparency and Testability:</strong> To improve the transparency of the scheduling process and simplify testing, Volcano plans to introduce a scheduling simulator. This tool will allow users to accurately reproduce Volcano's core scheduling process in a lightweight environment by flexibly configuring a simulated cluster state (nodes, Pods, queue configurations, etc.). By outputting detailed scheduling logs and optional performance analysis, the simulator will make it easier for developers to test new features, help users understand and validate Volcano's scheduling behavior in different scenarios, and efficiently evaluate the impact of various scheduling policies. Related issue:</p>
<ul>
<li class=""><a href="https://github.com/volcano-sh/volcano/issues/4276" target="_blank" rel="noopener noreferrer" class="">Implement Volcano Scheduler Simulator</a></li>
</ul>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="community-engagement"><strong>Community Engagement</strong><a href="https://volcano.sh/blog/Volcano-1.12.0-release#community-engagement" class="hash-link" aria-label="Direct link to community-engagement" title="Direct link to community-engagement" translate="no">​</a></h2>
<p>The above roadmap is a preliminary plan. We welcome developers and users to participate in discussions and contribute ideas and suggestions for the future of Volcano.</p>
<ul>
<li class=""><strong>GitHub Issues:</strong> Create a <code>kind/feature</code> issue in the Volcano GitHub repository, detailing your use case and feature expectations.</li>
<li class=""><strong>Community Communication:</strong> Participate in community meetings, or start a discussion in the WeChat group, Slack channel, or mailing list to communicate with developers and community members.</li>
<li class=""><strong>Roadmap Contribution:</strong> Feel free to make suggestions regarding our proposed roadmap or other features you consider important.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="acknowledgments"><strong>Acknowledgments</strong><a href="https://volcano.sh/blog/Volcano-1.12.0-release#acknowledgments" class="hash-link" aria-label="Direct link to acknowledgments" title="Direct link to acknowledgments" translate="no">​</a></h2>
<p>Volcano v1.12 includes hundreds of code commits from 43 community contributors. We would like to express our sincere thanks to all of them for their contributions. Their GitHub IDs are listed below:</p>
<table><tbody><tr><td>@AdamKorcz</td><td>@HalfBuddhist</td><td>@Hcryw</td></tr><tr><td>@JackyTYang</td><td>@JesseStutler</td><td>@MondayCha</td></tr><tr><td>@Monokaix</td><td>@Poor12</td><td>@SataQiu</td></tr><tr><td>@Wang-Kai</td><td>@archlitchi</td><td>@baddoub</td></tr><tr><td>@cnmcavoy</td><td>@co63oc</td><td>@de6p</td></tr><tr><td>@dongjiang1989</td><td>@ecosysbin</td><td>@fengruotj</td></tr><tr><td>@feyounger</td><td>@fjq123123</td><td>@googs1025</td></tr><tr><td>@guoqinwill</td><td>@halcyon-r</td><td>@hansongChina</td></tr><tr><td>@hiwangzhihui</td><td>@hwdef</td><td>@kingeasternsun</td></tr><tr><td>@linuxfhy</td><td>@mahdikhashan</td><td>@mahmut-Abi</td></tr><tr><td>@murali1539</td><td>@ouyangshengjia</td><td>@qGentry</td></tr><tr><td>@sailorvii</td><td>@sceneryback</td><td>@sfc-gh-raravena</td></tr><tr><td>@wangyang0616</td><td>@weapons97</td><td>@xieyanke</td></tr><tr><td>@ytcisme</td><td>@yuyue9284</td><td>@zedongh</td></tr><tr><td>@zhutong196</td><td></td><td></td></tr></tbody></table>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>scheduling</category>
        </item>
        <item>
            <title><![CDATA[Volcano completes security audit]]></title>
            <link>https://volcano.sh/blog/volcano-2025-security-audit</link>
            <guid>https://volcano.sh/blog/volcano-2025-security-audit</guid>
            <pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Volcano completes 2025 security audit]]></description>
            <content:encoded><![CDATA[<p>Volcano is excited to announce the completion of our CNCF-funded security audit carried out by <a href="https://adalogics.com/" target="_blank" rel="noopener noreferrer" class="">Ada Logics</a> and facilitated by <a href="https://ostif.org/" target="_blank" rel="noopener noreferrer" class="">OSTIF</a> in collaboration with the Volcano maintainers. The audit was scoped to cover the Volcano source code, supply-chain risks and fuzzing. The auditing team identified 10 security issues which the Volcano security team has fixed with the completion of the audit.</p>
<p>Volcano has addressed several infrastructure-level security issues by making targeted configuration changes that reduce risk and improve the default security posture of its default deployment. Below is a breakdown of each issue, the associated risks, and how Volcano resolved them, along with the resulting security improvements.</p>
<p>One issue involved several Volcano components running with root privileges by default. Containers running as root pose an increased security risk in that if compromised, an attacker gains access to capabilities they can use to escalate their privileges. Volcano fixed this by configuring all components - including the scheduler, admission controller, controllers, and dashboard - to run as non-root by default. This change limits the scope of what an attacker can do inside a container and helps contain breaches more effectively.</p>
<p>Another issue was the absence of seccomp profiles across Volcano’s workloads. Without seccomp, containers can invoke any Linux system call which increases the attack surface for kernel-level attacks and container escapes. Volcano addressed this by adding seccomp profiles, specifically using <code>RuntimeDefault</code>, which restricts containers to a safe subset of system calls. This reduces the kernel’s exposure and strengthens runtime isolation.</p>
<p>Volcano also lacked SELinux in its containers. SELinux manages access control at the kernel level and limits how processes can interact with files, system resources, and other processes. Volcano added <code>SELinux</code> to all its pods and containers.</p>
<p>In addition, Volcano had previously assigned containers with unnecessary Linux capabilities—fine-grained permissions that determine what a containerized process can do. For example, capabilities like <code>CAP_NET_ADMIN</code> or <code>CAP_SYS_ADMIN</code> grant significant power and are often unnecessary for typical application logic. Volcano mitigated this risk by removing non-essential capabilities using a “drop all” approach and only adding back specific permissions if needed. This reduces the attack surface and enforces the principle of least privilege.</p>
<p>Prior to the audit, Volcano allowed containers to escalate privileges during execution, which could permit non-privileged processes to gain additional privileges. Such privilege escalation increases the risk of bypassing container security controls. Volcano resolved this by setting <code>allowPrivilegeEscalation: false</code> in its containers and pods ensuring that processes run only with the privileges they were initially assigned.</p>
<p>These changes help contain potential attacks, reduce the avenues for privilege escalation or container breakout, and enhance the overall resilience of the system in multi-tenant and production environments.</p>
<p>On the application side, the auditors identified 5 issues, of which the most interesting was an issue where an attacker who had compromised an elastic service or an extender plugin in the cluster could cause denial of service of the Volcano scheduler. This issue was assigned CVE-2025-32777 of HIGH severity.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="fuzzing">Fuzzing<a href="https://volcano.sh/blog/volcano-2025-security-audit#fuzzing" class="hash-link" aria-label="Direct link to Fuzzing" title="Direct link to Fuzzing" translate="no">​</a></h2>
<p>During the audit, Ada Logics integrated volcano into <a href="https://github.com/google/oss-fuzz/tree/master/projects/volcano" target="_blank" rel="noopener noreferrer" class="">Googles OSS-Fuzz project</a> with two initial fuzz tests. OSS-Fuzz is an open source project that other critical open source projects can integrate into. Google runs integrated projects’ fuzzers on vast amounts of compute and reports any findings to the projects team via email. OSS-Fuzz’s reports contain information such as stack traces, steps to reproduce, which fuzz harness found the issue and more. Periodically, OSS-Fuzz reproduces the issue to assert that it still exists. If it can’t reproduce it, OSS-Fuzz automatically marks the issue fixed.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="getting-involved-in-volcano">Getting involved in Volcano<a href="https://volcano.sh/blog/volcano-2025-security-audit#getting-involved-in-volcano" class="hash-link" aria-label="Direct link to Getting involved in Volcano" title="Direct link to Getting involved in Volcano" translate="no">​</a></h2>
<p>Volcano is the industry's first cloud-native batch computing engine and the sole batch computing project within the CNCF. It operates as a Kubernetes-native batch scheduling system, enhancing the standard kube-scheduler. Volcano provides comprehensive features to manage and optimize diverse batch and elastic workloads, including AI/ML/DL, Bioinformatics/Genomics, and other "Big Data" applications. It offers robust integration with frameworks such as Spark, Flink, Ray, TensorFlow, PyTorch, Argo, MindSpore, PaddlePaddle, Kubeflow, MPI, Horovod, MXNet, and KubeGene. Drawing from over fifteen years of experience in high-performance workload operations, Volcano combines proven practices and innovative concepts to deliver a powerful and flexible scheduling solution.</p>
<p>We encourage you to join our community and contribute to Volcano's development. Your participation is valuable, whether you're asking questions, sharing experiences, or contributing code.</p>
<ul>
<li class="">GitHub: Access our main repository to contribute code or report issues: <a href="https://github.com/volcano-sh/volcano" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano</a>.</li>
<li class="">Website &amp; Documentation: Find comprehensive documentation and news on our official website: <a href="https://volcano.sh/en/" target="_blank" rel="noopener noreferrer" class="">https://volcano.sh/en/</a>.</li>
<li class="">Contributing Code: Our <a href="https://github.com/volcano-sh/volcano/blob/master/contribute.md" target="_blank" rel="noopener noreferrer" class="">Contribution Guide</a> offers detailed instructions on finding good first issues and submitting pull requests. We welcome contributions of all sizes.</li>
<li class="">Slack Channel: Join our Slack workspace for real-time discussions and support. First, join the CNCF Slack at <a href="https://slack.cncf.io/" target="_blank" rel="noopener noreferrer" class="">https://slack.cncf.io/</a>, then navigate to the #volcano channel: <a href="https://www.google.com/search?q=https://cloud-native.slack.com/archives/C011GJDQS0N" target="_blank" rel="noopener noreferrer" class="">https://cloud-native.slack.com/archives/C011GJDQS0N</a>.</li>
<li class="">Community Meetings: Participate in our regular community meetings to discuss project updates, roadmaps, and proposals.<!-- -->
<ul>
<li class=""><a href="https://zoom.us/j/91804791393" target="_blank" rel="noopener noreferrer" class="">Meeting Link</a></li>
<li class=""><a href="https://docs.google.com/document/d/1YLbF8zjZBiR9PbXQPB22iuc_L0Oui5A1lddVfRnZrqs/edit" target="_blank" rel="noopener noreferrer" class="">Meeting Notes</a></li>
</ul>
</li>
<li class="">Mailing List: Subscribe to our <a href="https://groups.google.com/forum/#!forum/volcano-sh" target="_blank" rel="noopener noreferrer" class="">mailing list</a> for important announcements and broader discussions.</li>
</ul>
<p>You can find the audit report <a href="https://volcano.sh/reports/Ada-Logics-Volcano-Security-Audit-2025.pdf" target="_blank" rel="noopener noreferrer" class="">here</a>.
We would like to thank all involved parties in the audit for their great work.</p>]]></content:encoded>
            <category>security</category>
            <category>audit</category>
            <category>volcano</category>
            <category>cncf</category>
        </item>
        <item>
            <title><![CDATA[How volcano boosts distributed training and inference performance]]></title>
            <link>https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance</link>
            <guid>https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance</guid>
            <pubDate>Tue, 01 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Join Volcano at KubeCon + CloudNativeCon Europe, 1-4 April 2025 in London!]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="the-growing-demand-for-llm-workloads-and-associated-challenges">The Growing Demand for LLM Workloads and Associated Challenges<a href="https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance#the-growing-demand-for-llm-workloads-and-associated-challenges" class="hash-link" aria-label="Direct link to The Growing Demand for LLM Workloads and Associated Challenges" title="Direct link to The Growing Demand for LLM Workloads and Associated Challenges" translate="no">​</a></h2>
<p>The increasing adoption of large language models (LLMs) has led to heightened demand for efficient AI training and inference workloads. As model size and complexity grow, distributed training and inference have become essential. However, this expansion introduces challenges in network communication, resource allocation, and fault recovery within large-scale distributed environments. These issues often create performance bottlenecks that hinder scalability.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="addressing-network-bottlenecks-through-topology-aware-scheduling">Addressing Network Bottlenecks Through Topology-Aware Scheduling<a href="https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance#addressing-network-bottlenecks-through-topology-aware-scheduling" class="hash-link" aria-label="Direct link to Addressing Network Bottlenecks Through Topology-Aware Scheduling" title="Direct link to Addressing Network Bottlenecks Through Topology-Aware Scheduling" translate="no">​</a></h2>
<p>In LLM training, model parallelism distributes workloads across multiple nodes, requiring frequent data exchanges. Network communication can become a bottleneck, particularly in heterogeneous environments with InfiniBand (IB), RoCE, or NVSwitch configurations. Communication efficiency depends on network topology—fewer switches between nodes typically result in lower latency and higher throughput.
One approach to mitigating this challenge is Network Topology-Aware Scheduling, which optimizes workload placement to minimize cross-switch communication. A key component of this strategy is the HyperNode, an abstraction for representing network topology via Custom Resource Definitions (CRDs). Unlike label-based methods, HyperNode provides a hierarchical structure that reflects actual network layouts, improving management and optimization. Nodes within the same HyperNode communicate more efficiently than those spanning multiple layers.</p>
<p>Topology constraints can also be specified for jobs through the networkTopology field, with options for strict (Hard Mode) or flexible (Soft Mode) enforcement. This granular control helps ensure workloads are deployed in optimal network environments, reducing latency and improving throughput.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="managing-multi-cluster-environments-for-scalability">Managing Multi-Cluster Environments for Scalability<a href="https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance#managing-multi-cluster-environments-for-scalability" class="hash-link" aria-label="Direct link to Managing Multi-Cluster Environments for Scalability" title="Direct link to Managing Multi-Cluster Environments for Scalability" translate="no">​</a></h2>
<p>As AI workloads expand, single Kubernetes clusters may no longer suffice for large-scale training and inference. While multiple clusters can address this limitation, managing them efficiently presents challenges.
The Volcano Global subproject extends scheduling capabilities to multi-cluster environments, integrating with Karmada to enable cross-cluster scheduling for distributed workloads. Features such as Queue Priority Scheduling, Job Priority Scheduling, and Multi-Tenant Fair Scheduling help optimize resource allocation and ensure equitable access across tenants. This approach simplifies multi-cluster management while supporting scalable AI workloads.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="improving-stability-with-fine-grained-fault-recovery">Improving Stability with Fine-Grained Fault Recovery<a href="https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance#improving-stability-with-fine-grained-fault-recovery" class="hash-link" aria-label="Direct link to Improving Stability with Fine-Grained Fault Recovery" title="Direct link to Improving Stability with Fine-Grained Fault Recovery" translate="no">​</a></h2>
<p>Fault recovery is critical in distributed AI training and inference. Traditional methods often restart entire jobs upon a single Pod failure, leading to resource inefficiencies. With checkpointing and resume-from-checkpoint techniques, full restarts are often unnecessary.
Fine-Grained Job Fault Recovery allows policies to restart only failed Pods or associated tasks, reducing unnecessary disruptions. Timeout configurations can further minimize interventions—if a Pod recovers within the allotted time, no restart is triggered. This approach enhances stability and efficiency in distributed workloads.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="future-developments-in-distributed-workload-management">Future Developments in Distributed Workload Management<a href="https://volcano.sh/blog/how-volcano-boosts-distributed-training-and-inference-performance#future-developments-in-distributed-workload-management" class="hash-link" aria-label="Direct link to Future Developments in Distributed Workload Management" title="Direct link to Future Developments in Distributed Workload Management" translate="no">​</a></h2>
<p>Ongoing advancements in distributed workload management include:</p>
<ul>
<li class="">
<p>Task-Level Network Topology Affinity Scheduling: Support for distributed inference scenarios, such as integration with lws.</p>
</li>
<li class="">
<p>HyperNode Auto-Discovery and Status Updates: Automation for HyperNode lifecycle management.</p>
</li>
<li class="">
<p>Dynamic Resource Allocation (DRA): Improved management of heterogeneous resources.</p>
</li>
<li class="">
<p>Dynamic GPU Partitioning: Support for MIG and MPS to enhance GPU utilization.</p>
</li>
</ul>
<p>More information for Volcano:</p>
<ul>
<li class="">
<p>Website: <a href="https://volcano.sh/" target="_blank" rel="noopener noreferrer" class="">https://volcano.sh/</a></p>
</li>
<li class="">
<p>GitHub: <a href="https://github.com/volcano-sh/volcano" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano</a></p>
</li>
<li class="">
<p>Slack: Join the conversation onVolcano Slack.</p>
</li>
<li class="">
<p>Weekly Meetings: Attend our weekly meetings and review meeting notes:</p>
<ul>
<li class="">
<p>Meeting Link: <a href="https://zoom.us/j/91804791393" target="_blank" rel="noopener noreferrer" class="">Zoom</a></p>
</li>
<li class="">
<p>Meeting Notes: <a href="https://docs.google.com/document/d/1YLbF8zjZBiR9PbXQPB22iuc_L0Oui5A1lddVfRnZrqs/edit?tab=t.0#heading=h.u99fvvct3m1z" target="_blank" rel="noopener noreferrer" class="">Google Docs</a></p>
</li>
</ul>
</li>
<li class="">
<p>Twitter: Follow us on <a href="https://x.com/volcano_sh" target="_blank" rel="noopener noreferrer" class="">X (formerly Twitter)</a> for the latest updates.</p>
</li>
</ul>]]></content:encoded>
            <category>performance</category>
            <category>distributed-training</category>
            <category>inference</category>
            <category>kubecon</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.11.0 Available Now]]></title>
            <link>https://volcano.sh/blog/Volcano-1.11.0-release</link>
            <guid>https://volcano.sh/blog/Volcano-1.11.0-release</guid>
            <pubDate>Fri, 07 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[New Features: Network topology-aware scheduling, Elastic hierarchical queues, Multi-cluster AI job scheduling, online/offline workloads colocation with dynamic resource oversubscription, Load-aware descheduling, Fine-grained job fault recovery policies, Volcano Dashboard for resource visualization, Supports for Kubernetes v1.31, Volcano Job supports for Preemption Policy, and Performance optimizations for large-scale scenarios]]></description>
            <content:encoded><![CDATA[<p>As the de facto standard in cloud-native batch computing, Volcano has been widely adopted across various scenarios, including AI, Big Data, and High-Performance Computing (HPC). With over 800 contributors from more than 30 countries and tens of thousands of code commits, Volcano has been deployed in production environments by over 60 enterprises worldwide. It provides the industry with excellent practical standards and solutions for cloud native batch computing.</p>
<p>As user scenarios grow increasingly complex, especially in the scenarios of LLMs, there is a heightened demand for performance, GPU resource utilization, and availability in both training and inference workloads. This has driven Volcano to continuously expand its capabilities and address core user needs. Over the course of 28 releases, Volcano has introduced a series of enhancements and optimizations tailored to batch computing scenarios, helping users seamlessly migrate their workloads to cloud-native platforms. These improvements have resolved numerous pain points, earning the platform widespread praise and fostering a vibrant community with over 30 approvers and reviewers, creating a win-win ecosystem.</p>
<p>The new release of Volcano will mark a new milestone in the New Year 2025, where the community will introduce a series of major features that will continue to deepen its focus on areas such as CNAI (Cloud Native AI) and Big Data, with key features including:</p>
<p><strong>AI Scenarios:</strong></p>
<ul>
<li class=""><strong>Network Topology-Aware Scheduling:</strong> Reduces network communication overhead between training tasks, optimizing performance for large AI model training.</li>
<li class=""><strong>NPU Scheduling and Virtualization:</strong> Enhances NPU resource utilization.</li>
<li class=""><strong>GPU Dynamic Partitioning:</strong> Introduces MIG and MPS dynamic partitioning to improve GPU resource utilization.</li>
<li class=""><strong>Volcano Global Multi-Cluster AI Job Scheduling:</strong> Supports Multi-cluster AI job deployment and distribution.</li>
<li class=""><strong>Checkpointing and Fault Recovery Optimization:</strong> Enables finer-grained job restart policies.</li>
<li class=""><strong>Dynamic Resource Allocation (DRA):</strong> Supports flexible and efficient management of heterogeneous resources.</li>
</ul>
<p><strong>Big Data Scenarios:</strong></p>
<ul>
<li class=""><strong>Elastic Hierarchical Queues:</strong> Facilitates smooth migration of Big Data workloads to cloud-native platforms.</li>
</ul>
<p><strong>Microservices Scenarios:</strong></p>
<ul>
<li class=""><strong>Online and Offline Workloads colocation with Dynamic Resource Oversubscription:</strong> Boosts resource utilization while ensuring QoS for online workloads.</li>
<li class=""><strong>Load-Aware Scheduling and Descheduling:</strong> Provides resource defragmentation and load balancing capabilities.</li>
</ul>
<p><strong>The official release of <a href="https://github.com/volcano-sh/volcano/releases/tag/v1.11.0" target="_blank" rel="noopener noreferrer" class="">Volcano v1.11</a></strong> marks a new chapter in cloud-native batch computing! This update focuses on the core needs of AI and Big Data, introducing <strong>network topology-aware scheduling</strong> and <strong>multi-cluster AI job scheduling</strong>, significantly enhancing the performance of AI training and inference tasks. Additionally, <strong>online and offline workloads colocation with dynamic resource oversubscription</strong> and <strong>load-aware descheduling</strong> further optimize resource utilization, ensuring high availability for online services. The introduction of <strong>elastic hierarchical queues</strong> offers more flexible scheduling strategies for Big Data scenarios.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="deep-dive-into-key-features"><strong>Deep Dive into Key Features</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#deep-dive-into-key-features" class="hash-link" aria-label="Direct link to deep-dive-into-key-features" title="Direct link to deep-dive-into-key-features" translate="no">​</a></h2>
<p>The v1.11 version released this time provides a series of major feature updates for AI, Big data and resource utilization improvement scenarios, mainly including:</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="network-topology-aware-scheduling-optimizing-ai-large-model-training-performance"><strong>Network Topology-Aware Scheduling: Optimizing AI Large Model Training Performance</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#network-topology-aware-scheduling-optimizing-ai-large-model-training-performance" class="hash-link" aria-label="Direct link to network-topology-aware-scheduling-optimizing-ai-large-model-training-performance" title="Direct link to network-topology-aware-scheduling-optimizing-ai-large-model-training-performance" translate="no">​</a></h3>
<p>In AI large model training, model parallelism splits the model across multiple nodes, requiring frequent data exchange between nodes. Network communication often becomes a bottleneck, significantly impacting training efficiency. Data centers feature diverse network types like InfiniBand (IB), RoCE, and NVSwitch, with complex multi-layer switch topologies. The fewer switches spanned between two nodes, the lower the communication latency and the higher the throughput. Thus, users aim to schedule workloads in the optimal performance domain with the highest throughput and lowest latency.</p>
<p>To address this, Volcano introduces <strong>Network Topology-Aware Scheduling</strong>, leveraging a unified network topology API and intelligent scheduling strategies to tackle network communication performance issues in large-scale AI training jobs.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="unified-network-topology-api-precise-network-structure-representation"><strong>Unified Network Topology API: Precise Network Structure Representation</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#unified-network-topology-api-precise-network-structure-representation" class="hash-link" aria-label="Direct link to unified-network-topology-api-precise-network-structure-representation" title="Direct link to unified-network-topology-api-precise-network-structure-representation" translate="no">​</a></h4>
<p>To abstract away the differences in data center network types, Volcano defines a new CRD <strong>HyperNode</strong>, to represent network topology, providing a standardized API. Compared to traditional label-based approaches, HyperNode offers several advantages:</p>
<ul>
<li class=""><strong>Semantic Consistency:</strong> HyperNode provides a standardized way to describe network topology, avoiding inconsistencies in label semantics.</li>
<li class=""><strong>Hierarchical Structure:</strong> HyperNode supports tree-like hierarchies, accurately reflecting actual network topologies.</li>
<li class=""><strong>Ease of Management:</strong> Cluster administrators can manually create HyperNodes or use automated network topology discovery tools to maintain them.</li>
</ul>
<p>A HyperNode represents a network topology performance domain, typically mapped to a switch. Multiple HyperNodes connect hierarchically to form a tree structure. For example:</p>
<p><img decoding="async" loading="lazy" alt="HyperNode Network Topology Example" src="https://volcano.sh/assets/images/hypernode-example-f0420fcea8f3cce58f806a592faf9095.png" width="747" height="404" class="img_ev3q"></p>
<ul>
<li class=""><strong>Leaf HyperNodes</strong> (s0, s1, s2, s3): Represent actual cluster nodes.</li>
<li class=""><strong>Non-Leaf HyperNodes</strong> (s4, s5, s6): Represent other HyperNodes.</li>
</ul>
<p>In this structure, communication efficiency between nodes depends on the number of HyperNode layers they span. For instance:</p>
<ul>
<li class=""><strong>node0</strong> and <strong>node1</strong> within s0 have the highest communication efficiency.</li>
<li class=""><strong>node1</strong> and <strong>node2</strong> spanning two HyperNode layers (s0→s4→s1) have lower efficiency.</li>
<li class=""><strong>node0</strong> and <strong>node4</strong> spanning three HyperNode layers (s0→s4→s6) have the lowest efficiency.</li>
</ul>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="hypernode-configuration-example"><strong>HyperNode Configuration Example</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#hypernode-configuration-example" class="hash-link" aria-label="Direct link to hypernode-configuration-example" title="Direct link to hypernode-configuration-example" translate="no">​</a></h5>
<p>Here’s an example of leaf and non-leaf HyperNode configurations:</p>
<p><strong>Leaf HyperNode Example:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> topology.volcano.sh/v1alpha1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> HyperNode</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> s0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">spec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">tier</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Lower tiers indicate higher communication efficiency</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">members</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># List of child nodes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Node  </span><span class="token comment" style="color:#999988;font-style:italic"># Child node type</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">selector</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">exactMatch</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Exact match</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> node</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Node</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">selector</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">regexMatch</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Regex match</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">pattern</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> node</span><span class="token punctuation" style="color:#393A34">-</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">01</span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre></div></div>
<p><strong>Non-Leaf HyperNode Example:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> topology.volcano.sh/v1alpha1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> HyperNode</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> s6</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">spec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">tier</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># HyperNode tier</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">members</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># List of child nodes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> HyperNode  </span><span class="token comment" style="color:#999988;font-style:italic"># Child node type</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">selector</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">exactMatch</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Exact match</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> s4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> HyperNode</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">selector</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">exactMatch</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Exact match</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> s5</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="network-topology-aware-scheduling-strategy"><strong>Network Topology-Aware Scheduling Strategy</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#network-topology-aware-scheduling-strategy" class="hash-link" aria-label="Direct link to network-topology-aware-scheduling-strategy" title="Direct link to network-topology-aware-scheduling-strategy" translate="no">​</a></h4>
<p>Volcano Job and PodGroup can set topology constraints via the <code>networkTopology</code> field, supporting the following configurations:</p>
<ul>
<li class=""><strong>mode:</strong> Supports <code>hard</code> and <code>soft</code> modes.<!-- -->
<ul>
<li class=""><code>hard</code>: Enforces strict constraints, requiring tasks within a job to be deployed within the same HyperNode.</li>
<li class=""><code>soft</code>: Prefers deploying tasks within the same HyperNode but allows flexibility.</li>
</ul>
</li>
<li class=""><strong>highestTierAllowed:</strong> Used with <code>hard</code> mode to specify the maximum HyperNode tier a job can span.</li>
</ul>
<p>For example, the following configuration restricts a job to HyperNodes of tier 2 or lower (e.g., s4 or s5), otherwise, the job remains in a Pending state:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">spec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">networkTopology</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">mode</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> hard</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">highestTierAllowed</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><br></span></code></pre></div></div>
<p>This scheduling strategy allows users to precisely control job topology constraints, ensuring optimal performance and significantly improving training efficiency.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="future-plans"><strong>Future Plans</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#future-plans" class="hash-link" aria-label="Direct link to future-plans" title="Direct link to future-plans" translate="no">​</a></h4>
<p>Volcano will continue to refine network topology-aware scheduling, with future plans including:</p>
<ul>
<li class="">Automating the conversion of node labels to HyperNode CRs to simplify migration.</li>
<li class="">Integrating network topology discovery tools to streamline HyperNode management.</li>
<li class="">Providing CLI tools for easier HyperNode hierarchy visualization and management.</li>
</ul>
<p>For detailed design and user guide, please refer to:</p>
<p>Design Document: <strong><a class="" href="https://volcano.sh/docs/KeyFeatures/NetworkTopologyAware">Network Topology Aware Scheduling</a></strong>.</p>
<p>Usage Document: <strong><a class="" href="https://volcano.sh/docs/KeyFeatures/NetworkTopologyAware">Network Topology Aware Scheduling | Volcano</a></strong>.</p>
<p>Sincerely thanks to community developers: <strong>@ecosysbin, @weapons97, @Xu-Wentao, @penggu, @JesseStutler, @Monokaix</strong> for their contributions!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="elastic-hierarchical-queues-flexible-multi-tenant-resource-management"><strong>Elastic Hierarchical Queues: Flexible Multi-Tenant Resource Management</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#elastic-hierarchical-queues-flexible-multi-tenant-resource-management" class="hash-link" aria-label="Direct link to elastic-hierarchical-queues-flexible-multi-tenant-resource-management" title="Direct link to elastic-hierarchical-queues-flexible-multi-tenant-resource-management" translate="no">​</a></h3>
<p>In multi-tenant environments, fair resource allocation, isolation, and job prioritization are critical. Different departments or teams often share cluster resources while ensuring their jobs receive resources on demand, avoiding contention or waste. Volcano v1.11 introduces <strong>Elastic Hierarchical Queues</strong>, significantly enhancing queue resource management. Hierarchical queues enable finer-grained resource quota management, cross-level resource sharing and reclamation, and flexible preemption policies, creating an efficient and fair unified scheduling platform. For users migrating from YARN, Volcano seamlessly transitions Big Data workloads to Kubernetes clusters.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="core-capabilities-of-elastic-hierarchical-queues"><strong>Core Capabilities of Elastic Hierarchical Queues</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#core-capabilities-of-elastic-hierarchical-queues" class="hash-link" aria-label="Direct link to core-capabilities-of-elastic-hierarchical-queues" title="Direct link to core-capabilities-of-elastic-hierarchical-queues" translate="no">​</a></h4>
<p>Volcano’s elastic hierarchical queues offer the following key features to meet complex multi-tenant demands:</p>
<ol>
<li class=""><strong>Configurable Queue Hierarchies:</strong> Users can create multi-level queues in a tree structure, each with independent resource quotas and priorities.</li>
<li class=""><strong>Cross-Level Resource Sharing and Reclamation:</strong> Idle resources in child queues can be shared with sibling queues and reclaimed when needed.</li>
<li class=""><strong>Fine-Grained Resource Quota Management:</strong> Each queue can set parameters like:<!-- -->
<ul>
<li class=""><code>capability</code>: Maximum resource capacity.</li>
<li class=""><code>deserved</code>: Fair share of resources; excess can be reclaimed.</li>
<li class=""><code>guarantee</code>: Reserved resources, ensuring minimum guarantees.</li>
</ul>
</li>
<li class=""><strong>Flexible Preemption Policies:</strong> Supports priority-based preemption to ensure high-priority tasks receive resources promptly.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="hierarchical-queue-example"><strong>Hierarchical Queue Example</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#hierarchical-queue-example" class="hash-link" aria-label="Direct link to hierarchical-queue-example" title="Direct link to hierarchical-queue-example" translate="no">​</a></h4>
<p>A simple hierarchical queue structure might look like this:</p>
<p><img decoding="async" loading="lazy" alt="Hierarchical Queue Example" src="https://volcano.sh/assets/images/hierarchical-queue-example-65e92bc17288dce4f93639823af22913.png" width="1700" height="1374" class="img_ev3q"></p>
<ul>
<li class=""><strong>Root Queue:</strong> Manages global resource allocation.</li>
<li class=""><strong>Department Queues:</strong> Represent resource pools for different departments or teams.</li>
<li class=""><strong>Child Queues:</strong> Represent specific projects or tasks, where users submit jobs.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="use-cases"><strong>Use Cases</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#use-cases" class="hash-link" aria-label="Direct link to use-cases" title="Direct link to use-cases" translate="no">​</a></h4>
<ul>
<li class=""><strong>Multi-Department Resource Sharing:</strong> Large enterprises can use hierarchical queues to fairly allocate and isolate resources across departments.</li>
<li class=""><strong>Big Data Task Scheduling:</strong> Users migrating from YARN to Kubernetes can leverage hierarchical queues for seamless Big Data workload migration.</li>
<li class=""><strong>AI Training and Inference:</strong> Hierarchical queues enable dynamic resource allocation and reclamation for AI tasks.</li>
</ul>
<p>For detailed design and user guide, please refer to:</p>
<p>Design Document: <strong><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/hierarchical-queue-on-capacity-plugin.md" target="_blank" rel="noopener noreferrer" class="">hierarchical-queue-on-capacity-plugin</a></strong>.</p>
<p>Usage Document: <strong><a class="" href="https://volcano.sh/docs/KeyFeatures/HierarchicalQueue">Hierarchical Queue | Volcano</a></strong>.</p>
<p>Sincerely thanks to community developer: <strong>@Rui-Gan</strong> for this contribution!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="multi-cluster-ai-job-scheduling-unified-management-and-efficient-scheduling-across-clusters"><strong>Multi-Cluster AI Job Scheduling: Unified Management and Efficient Scheduling Across Clusters</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#multi-cluster-ai-job-scheduling-unified-management-and-efficient-scheduling-across-clusters" class="hash-link" aria-label="Direct link to multi-cluster-ai-job-scheduling-unified-management-and-efficient-scheduling-across-clusters" title="Direct link to multi-cluster-ai-job-scheduling-unified-management-and-efficient-scheduling-across-clusters" translate="no">​</a></h3>
<p>As enterprise workloads grow, single Kubernetes clusters often fall short of meeting the demands of large-scale AI training and inference jobs. Users typically manage multiple Kubernetes clusters to achieve unified workload distribution, deployment, and management. Many users already deploy Volcano across multiple clusters, managed by <strong><a href="https://karmada.io/" target="_blank" rel="noopener noreferrer" class="">Karmada</a></strong>. To better support AI jobs in multi-cluster environments, Volcano has incubated the <strong><a href="https://github.com/volcano-sh/volcano-global" target="_blank" rel="noopener noreferrer" class="">Volcano Global</a></strong> sub-project, extending Volcano’s powerful scheduling capabilities to multi-cluster scenarios. This project provides a unified scheduling platform for multi-cluster AI jobs, supporting cross-cluster job distribution, resource management, and priority control.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="core-capabilities"><strong>Core Capabilities</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#core-capabilities" class="hash-link" aria-label="Direct link to core-capabilities" title="Direct link to core-capabilities" translate="no">​</a></h4>
<p>Volcano Global enhances Karmada with the following features to meet the complex demands of multi-cluster AI job scheduling:</p>
<ol>
<li class=""><strong>Cross-Cluster Volcano Job Scheduling:</strong> Users can deploy and schedule Volcano Jobs across multiple clusters, maximizing resource utilization.</li>
<li class=""><strong>Queue Priority Scheduling:</strong> Supports cross-cluster queue priority management, ensuring high-priority queues receive resources first.</li>
<li class=""><strong>Job Priority Scheduling and Queuing:</strong> Enables job-level priority scheduling and queuing across clusters, ensuring critical tasks are executed promptly.</li>
<li class=""><strong>Multi-Tenant Fair Scheduling:</strong> Provides fair resource allocation across tenants, preventing resource contention.</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Volcano Global Architecture" src="https://volcano.sh/assets/images/volcano_global_design-d84b770a5c1eda9163fe0a6cdd750e1e.svg" width="1225" height="1054" class="img_ev3q"></p>
<p>For detailed deployment and user guide, please refer to: <strong><a class="" href="https://volcano.sh/docs/KeyFeatures/MultiClusterScheduling">Multi-Cluster AI Job Scheduling | Volcano</a></strong>.</p>
<p>Sincerely thanks to community developers: <strong>@Vacant2333, @MondayCha, @lowang-bh, @Monokaix</strong> for their contributions!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="online-and-offline-workloads-colocation-with-dynamic-resource-oversubscription-maximizing-resource-utilization-while-ensuring-slo"><strong>Online and Offline Workloads colocation with Dynamic Resource Oversubscription: Maximizing Resource Utilization While Ensuring SLO</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#online-and-offline-workloads-colocation-with-dynamic-resource-oversubscription-maximizing-resource-utilization-while-ensuring-slo" class="hash-link" aria-label="Direct link to online-and-offline-workloads-colocation-with-dynamic-resource-oversubscription-maximizing-resource-utilization-while-ensuring-slo" title="Direct link to online-and-offline-workloads-colocation-with-dynamic-resource-oversubscription-maximizing-resource-utilization-while-ensuring-slo" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="background-the-challenge-of-resource-utilization"><strong>Background: The Challenge of Resource Utilization</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#background-the-challenge-of-resource-utilization" class="hash-link" aria-label="Direct link to background-the-challenge-of-resource-utilization" title="Direct link to background-the-challenge-of-resource-utilization" translate="no">​</a></h4>
<p>As cloud-native technologies advance, Kubernetes has become the "operating system" of the cloud-native era, with more workloads migrating to Kubernetes platforms. However, despite the flexibility and scalability of cloud-native technologies, data center resource utilization remains low. Online workloads (e.g., microservices) often exhibit peak-and-trough patterns, leaving resources idle during troughs and insufficient during peaks. To improve resource utilization while ensuring high-priority workload <strong>SLOs (Service Level Objectives)</strong>, Volcano introduces a <strong>cloud-native colocation solution</strong>, combining online and offline workloads with dynamic resource oversubscription to maximize cluster resource utilization while ensuring online workload stability.</p>
<p><strong>Cloud-native colocation</strong> involves deploying <strong>online workloads</strong> (e.g., real-time services) and <strong>offline workloads</strong> (e.g., batch jobs) on the same cluster. During online workload troughs, offline workloads utilize idle resources; during peaks, offline workloads are throttled to ensure online workload resource needs. This dynamic resource allocation mechanism not only improves resource utilization but also ensures online workload quality of service.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="industry-practices-volcanos-unique-advantages"><strong>Industry Practices: Volcano’s Unique Advantages</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#industry-practices-volcanos-unique-advantages" class="hash-link" aria-label="Direct link to industry-practices-volcanos-unique-advantages" title="Direct link to industry-practices-volcanos-unique-advantages" translate="no">​</a></h4>
<p>While many companies have explored colocation technologies, existing solutions often fall short, such as being tightly coupled with Kubernetes, using rough oversubscription calculations, or offering inconsistent user experiences. Volcano addresses these issues with the following unique advantages:</p>
<ul>
<li class=""><strong>Native Support for Offline Job Scheduling:</strong> Volcano Scheduler natively supports offline job scheduling without additional adaptation.</li>
<li class=""><strong>Non-Invasive Design:</strong> No modifications to Kubernetes are required, allowing users to adopt Volcano without altering existing cluster architectures.</li>
<li class=""><strong>Dynamic Resource Oversubscription:</strong> Real-time calculation of resources can be oversold ensures a balance between resource utilization and QoS.</li>
<li class=""><strong>OS-Level Isolation and Guarantees:</strong> Kernel-level resource isolation ensures online workload priority and stability.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="volcano-cloud-native-colocation-solution-end-to-end-resource-optimization"><strong>Volcano Cloud-Native Colocation Solution: End-to-End Resource Optimization</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#volcano-cloud-native-colocation-solution-end-to-end-resource-optimization" class="hash-link" aria-label="Direct link to volcano-cloud-native-colocation-solution-end-to-end-resource-optimization" title="Direct link to volcano-cloud-native-colocation-solution-end-to-end-resource-optimization" translate="no">​</a></h4>
<p>Volcano’s cloud-native colocation solution provides end-to-end resource isolation and sharing mechanisms, including the following core components:</p>
<p><strong>Volcano Scheduler:</strong> Manages unified scheduling of online and offline workloads, offering abstractions like queues, groups, job priorities, fair scheduling, and resource reservations to meet the needs of microservices, Big Data, and AI workloads.</p>
<p><strong>Volcano SLO Agent:</strong> A daemonset running on each node, the SLO Agent monitors node resource usage, dynamically calculates resources that can be oversold, and allocates them to offline workloads. It also detects CPU/memory pressure and evicts offline workloads when necessary to ensure online workload priority.</p>
<p><strong>Enhanced OS:</strong> Volcano implements fine-grained QoS guarantees at the kernel level, using cgroups to set resource limits for online and offline workloads, ensuring online workloads receive sufficient resources even under high load.</p>
<p><img decoding="async" loading="lazy" alt="Colocation Architecture" src="https://volcano.sh/assets/images/architecture-11aa1dc0f267e4c1d1059908cc5821ad.png" width="3614" height="1654" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="core-capabilities-balancing-resource-utilization-and-stability"><strong>Core Capabilities: Balancing Resource Utilization and Stability</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#core-capabilities-balancing-resource-utilization-and-stability" class="hash-link" aria-label="Direct link to core-capabilities-balancing-resource-utilization-and-stability" title="Direct link to core-capabilities-balancing-resource-utilization-and-stability" translate="no">​</a></h4>
<p>Volcano’s cloud-native colocation solution offers the following key capabilities to achieve both resource utilization and workload stability:</p>
<ul>
<li class=""><strong>Unified Scheduling:</strong> Supports unified scheduling of microservices, batch and AI jobs.</li>
<li class=""><strong>QoS-Based Resource Model:</strong> Provides QoS-based resource management for online and offline workloads, ensuring high-priority workload stability.</li>
<li class=""><strong>Dynamic Resource Oversubscription:</strong> Dynamically calculates oversellable resources based on real-time CPU/memory usage, maximizing resource utilization.</li>
<li class=""><strong>CPU Burst:</strong> Allows containers to temporarily exceed CPU limits, avoiding throttling during critical moments and improving responsiveness.</li>
<li class=""><strong>Network Bandwidth Isolation:</strong> Supports node-level network bandwidth limits, ensuring online workload network requirements.</li>
</ul>
<p>For detailed design and user guide, please refer to: <strong><a class="" href="https://volcano.sh/docs/KeyFeatures/cloudNativeColocation">Cloud Native Colocation | Volcano</a></strong>.</p>
<p>Sincerely thanks to community developer: <strong>@william-wang</strong> for this contribution!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="load-aware-descheduling-intelligent-cluster-resource-balancing"><strong>Load-Aware Descheduling: Intelligent Cluster Resource Balancing</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#load-aware-descheduling-intelligent-cluster-resource-balancing" class="hash-link" aria-label="Direct link to load-aware-descheduling-intelligent-cluster-resource-balancing" title="Direct link to load-aware-descheduling-intelligent-cluster-resource-balancing" translate="no">​</a></h3>
<p>In Kubernetes clusters, dynamic workload changes often lead to uneven node resource utilization, causing hotspots that impact cluster stability and efficiency. To address this, Volcano v1.11 introduces <strong>Load-Aware Descheduling</strong>, dynamically adjusting Pod distribution based on real node load to ensure balanced resource utilization and avoid hotspots, improving overall cluster performance and reliability. Load-aware descheduling is incubated in the sub-project: <a href="https://github.com/volcano-sh/descheduler" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/descheduler</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="core-capabilities-1"><strong>Core Capabilities:</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#core-capabilities-1" class="hash-link" aria-label="Direct link to core-capabilities-1" title="Direct link to core-capabilities-1" translate="no">​</a></h4>
<ul>
<li class=""><strong>Load-Aware Scheduling:</strong> Monitors real CPU and memory load metrics to dynamically adjust Pod distribution, avoiding reliance on Pod Request-based scheduling.</li>
<li class=""><strong>Timed and Dynamic Triggers:</strong> Supports CronTab-based or fixed-interval descheduling to adapt to different scenarios.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="use-cases-1"><strong>Use Cases:</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#use-cases-1" class="hash-link" aria-label="Direct link to use-cases-1" title="Direct link to use-cases-1" translate="no">​</a></h4>
<ul>
<li class=""><strong>Uneven Node Resource Utilization:</strong> Balances node load when some nodes are overutilized while others are underutilized.</li>
<li class=""><strong>Hotspot Node Management:</strong> Migrates Pods from overloaded nodes to ensure stability.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="LoadAware Descheduling" src="https://volcano.sh/assets/images/descheduler_EN-10773d4413f504082d23fac3511ad5bf.svg" width="465" height="241" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="technical-highlights"><strong>Technical Highlights:</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#technical-highlights" class="hash-link" aria-label="Direct link to technical-highlights" title="Direct link to technical-highlights" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Descheduling Based on Actual Load:</strong></p>
<p>Unlike traditional scheduling strategies based on Pod Requests, Volcano's load-aware descheduling is more precise, accurately reflecting the actual resource usage of nodes.</p>
</li>
<li class="">
<p><strong>Seamless Integration with Kubernetes Ecosystem:</strong></p>
<p>Compatible with the native Kubernetes scheduler, enabling load-aware descheduling without requiring additional configurations.</p>
</li>
<li class="">
<p><strong>Flexible Policy Configuration:</strong></p>
<p>Users can customize descheduling intervals or trigger conditions based on business requirements , ensuring flexibility and controllability in scheduling.</p>
</li>
</ul>
<p>For detailed user guide, please refer to: <strong><a class="" href="https://volcano.sh/docs/KeyFeatures/LoadAwareDescheduling">Load-aware Descheduling | Volcano</a></strong>.</p>
<p>Sincerely thanks to community developer: <strong>@Monokaix</strong> for this contribution!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="fine-grained-job-fault-recovery-efficient-task-interruption-handling"><strong>Fine-Grained Job Fault Recovery: Efficient Task Interruption Handling</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#fine-grained-job-fault-recovery-efficient-task-interruption-handling" class="hash-link" aria-label="Direct link to fine-grained-job-fault-recovery-efficient-task-interruption-handling" title="Direct link to fine-grained-job-fault-recovery-efficient-task-interruption-handling" translate="no">​</a></h3>
<p>In AI, Big Data, and HPC scenarios, job stability and fault recovery are critical. Traditional fault recovery strategies often restart entire Jobs when a single Pod fails, wasting resources and potentially restarting training from scratch. With the rise of <strong>checkpointing</strong> and <strong>resume-from-checkpoint</strong> techniques, single Pod failures no longer require full Job restarts. Volcano v1.11 introduces <strong>Fine-Grained Job Fault Recovery</strong> feature, offering flexible fault handling mechanisms to efficiently manage task interruptions and improve training efficiency.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="core-capabilities-2"><strong>Core Capabilities:</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#core-capabilities-2" class="hash-link" aria-label="Direct link to core-capabilities-2" title="Direct link to core-capabilities-2" translate="no">​</a></h4>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="supporting-pod-granular-restart-policies">Supporting Pod-Granular Restart Policies<a href="https://volcano.sh/blog/Volcano-1.11.0-release#supporting-pod-granular-restart-policies" class="hash-link" aria-label="Direct link to Supporting Pod-Granular Restart Policies" title="Direct link to Supporting Pod-Granular Restart Policies" translate="no">​</a></h5>
<p>Users can configure policies to restart only failed Pods or their associated Tasks, avoiding unnecessary Job restarts and reducing resource waste.</p>
<ul>
<li class="">
<p><strong>Restarting a Single Pod:</strong><br>
<!-- -->When a specific Pod fails, only that Pod is restarted, leaving other running tasks unaffected.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">policies</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">event</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> PodFailed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> RestartPod</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Restarting an Entire Task:</strong><br>
<!-- -->When a Pod fails, the entire Task (a group of Pods) to which it belongs is restarted. This is suitable for scenarios requiring consistency within a task group.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">policies</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">event</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> PodFailed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> RestartTask</span><br></span></code></pre></div></div>
</li>
</ul>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="support-for-setting-timeouts-for-actions">Support for Setting Timeouts for Actions<a href="https://volcano.sh/blog/Volcano-1.11.0-release#support-for-setting-timeouts-for-actions" class="hash-link" aria-label="Direct link to Support for Setting Timeouts for Actions" title="Direct link to Support for Setting Timeouts for Actions" translate="no">​</a></h5>
<p>Pod failures may be caused by transient issues (e.g., network fluctuations or hardware problems). Volcano allows users to set timeout periods for failure recovery actions. If the Pod recovers within the timeout period, no restart is performed, avoiding unnecessary intervention.</p>
<ul>
<li class=""><strong>Example Configuration:</strong>
If a Pod fails and is restarted but does not recover within 10 minutes, the entire Job is restarted.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">policies</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">event</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> PodFailed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> RestartPod</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">event</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> PodEvicted</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> RestartJob</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">timeout</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 10m</span><br></span></code></pre></div></div>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="new-podpending-event-handling">New PodPending Event Handling<a href="https://volcano.sh/blog/Volcano-1.11.0-release#new-podpending-event-handling" class="hash-link" aria-label="Direct link to New PodPending Event Handling" title="Direct link to New PodPending Event Handling" translate="no">​</a></h5>
<p>When a Pod remains in the Pending state for an extended period due to insufficient resources or topological constraints, users can set a timeout for the Pending event. If the Pod does not start running after the timeout, the entire Job can be terminated to avoid resource waste.</p>
<ul>
<li class=""><strong>Example Configuration:</strong><br>
<!-- -->If a Pod remains in the Pending state for more than 10 minutes, the Job will be terminated.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">policies</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">event</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> PodPending</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> TerminateJob</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">timeout</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 10m</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="applicable-scenarios"><strong>Applicable Scenarios:</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#applicable-scenarios" class="hash-link" aria-label="Direct link to applicable-scenarios" title="Direct link to applicable-scenarios" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>AI Large Model Training:</strong><br>
<!-- -->In distributed training, the failure of a single Pod does not affect the overall training progress. Fine-grained failure recovery strategies enable quick task recovery, avoiding the need to restart training from scratch.</p>
</li>
<li class="">
<p><strong>Big Data Processing:</strong><br>
<!-- -->In batch processing tasks, failures of individual tasks can be resolved by restarting a single Pod or Task, eliminating the need to restart the entire Job and improving processing efficiency.</p>
</li>
<li class="">
<p><strong>High-Performance Computing (HPC):</strong><br>
<!-- -->In HPC scenarios, task stability and efficient recovery are critical. Fine-grained failure recovery strategies minimize task interruption time.</p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="technical-highlights-1"><strong>Technical Highlights:</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#technical-highlights-1" class="hash-link" aria-label="Direct link to technical-highlights-1" title="Direct link to technical-highlights-1" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Flexible Policy Configuration:</strong><br>
<!-- -->Users can customize failure recovery policies based on business requirements, supporting Pod, Task, and Job-level restart operations.</p>
</li>
<li class="">
<p><strong>Timeout Mechanism:</strong><br>
<!-- -->By setting timeout periods, unnecessary restarts due to transient issues are avoided, enhancing Job stability.</p>
</li>
<li class="">
<p><strong>Seamless Compatibility with Checkpointing:</strong><br>
<!-- -->Perfectly integrates with checkpointing and resumption technologies in AI scenarios, ensuring efficient recovery of training tasks.</p>
</li>
</ul>
<p>For detailed design and user guide, please refer to: <strong><a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_job_policy">How to use job policy</a></strong>.</p>
<p>Sincerely thanks to community developer: <strong>@bibibox</strong> for this contribution!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="volcano-dashboard-a-resource-visualization-component"><strong>Volcano Dashboard: A Resource Visualization Component</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#volcano-dashboard-a-resource-visualization-component" class="hash-link" aria-label="Direct link to volcano-dashboard-a-resource-visualization-component" title="Direct link to volcano-dashboard-a-resource-visualization-component" translate="no">​</a></h3>
<p>The Volcano Dashboard is an official resource visualization component for Volcano. After deploying Volcano, users can deploy the dashboard to view and manage cluster resources through a graphical interface. The project is available at: <a href="https://github.com/volcano-sh/dashboard" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/dashboard</a>.</p>
<p>Current features include:</p>
<ul>
<li class="">Cluster overview, including Job counts, statuses, completion rates, Queue counts, and resource utilization.</li>
<li class="">Job and Queue lists with filtering, sorting, and search capabilities.</li>
<li class="">Pod lists with filtering, sorting, and search capabilities.</li>
</ul>
<p>Sincerely thanks to community developers: <strong>@WY-Dev0, @Monokaix</strong> for their contributions!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="volcano-supports-kubernetes-v131"><strong>Volcano Supports Kubernetes v1.31</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#volcano-supports-kubernetes-v131" class="hash-link" aria-label="Direct link to volcano-supports-kubernetes-v131" title="Direct link to volcano-supports-kubernetes-v131" translate="no">​</a></h3>
<p>Volcano closely follows Kubernetes releases, with full support for Kubernetes v1.31, including comprehensive UT and E2E testing to ensure functionality and reliability.</p>
<p>To contribute to Volcano’s Kubernetes version adaptation, please refer to: <strong><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/adapt-k8s-todo.md" target="_blank" rel="noopener noreferrer" class="">adapt-k8s-todo</a></strong>.</p>
<p>Sincerely thanks to community developers: <strong>@vie-serendipity, @dongjiang1989</strong> for their contributions!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="volcano-job-supports-preemption-policy"><strong>Volcano Job Supports Preemption Policy</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#volcano-job-supports-preemption-policy" class="hash-link" aria-label="Direct link to volcano-job-supports-preemption-policy" title="Direct link to volcano-job-supports-preemption-policy" translate="no">​</a></h3>
<p>Volcano Jobs now support <strong>PreemptionPolicy</strong>, allowing users to configure whether Jobs can preempt other Pods. Jobs with <code>PreemptionPolicy: Never</code> will not preempt resources, ensuring stability.</p>
<p>For configuration examples, please refer to: <strong><a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_configure_priorityclass_for_job">how to configure priorityclass for job</a></strong>.</p>
<p>Sincerely thanks to community developer: <strong>@JesseStut</strong> for this contribution!</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="performance-optimization-efficient-scheduling-at-scale"><strong>Performance Optimization: Efficient Scheduling at Scale</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#performance-optimization-efficient-scheduling-at-scale" class="hash-link" aria-label="Direct link to performance-optimization-efficient-scheduling-at-scale" title="Direct link to performance-optimization-efficient-scheduling-at-scale" translate="no">​</a></h3>
<p>In Volcano, <strong>Queue</strong> is one of the most fundamental and critical resources. The <code>status</code> field of a Queue records the states of PodGroups, such as <code>Unknown</code>, <code>Pending</code>, <code>Running</code>, <code>Inqueue</code>, and <code>Completed</code>. However, in large-scale scenarios, frequent changes in PodGroups within a Queue (e.g., when a large number of short-lived tasks are repeatedly submitted) can cause many PodGroups to transition from <code>Running</code> to <code>Completed</code>. In such cases, the Volcano Controller needs to frequently refresh the <code>status</code> field of the Queue, placing significant pressure on the APIServer. Additionally, the Volcano Scheduler updates the <code>status.allocated</code> field of the Queue after Job scheduling, which can lead to Queue update conflicts in large-scale environments, further impacting system performance.</p>
<p>To completely resolve the issues of frequent Queue refreshes and update conflicts in large-scale scenarios, Volcano v1.11 has optimized the Queue management mechanism by migrating PodGroup statistics to <strong>Metrics</strong>, eliminating the need for persistent storage. This optimization significantly reduces the pressure on the APIServer while improving the overall performance and stability of the system.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="key-improvements-after-optimization"><strong>Key Improvements After Optimization</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#key-improvements-after-optimization" class="hash-link" aria-label="Direct link to key-improvements-after-optimization" title="Direct link to key-improvements-after-optimization" translate="no">​</a></h4>
<p><strong>Migration of PodGroup Statistics to Metrics</strong><br>
<!-- -->PodGroup state data (e.g., <code>Unknown</code>, <code>Pending</code>, <code>Running</code>) is no longer stored in the <code>status</code> field of the Queue. Instead, it is recorded and displayed through the metrics system. Users can view the statistics of PodGroups in a Queue using the following commands:</p>
<ul>
<li class="">
<p><strong>View statistics for a specific Queue</strong>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vcctl queue get -n [name]</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>View statistics for all Queues</strong>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vcctl queue list</span><br></span></code></pre></div></div>
</li>
</ul>
<p><strong>Reduced APIServer Pressure</strong><br>
<!-- -->By migrating PodGroup statistics to Metrics, frequent updates to the <code>status</code> field of the Queue are avoided, significantly reducing the load on the APIServer and improving system throughput.</p>
<p><strong>Resolved Queue Update Conflicts</strong><br>
<!-- -->In large-scale scenarios, Queue update conflicts have been effectively mitigated, ensuring the efficient operation of the scheduler.</p>
<p>For detailed design and metric names related to the migration of PodGroup state statistics to Metrics, please refer to: <strong><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/podgroup-statistics.md" target="_blank" rel="noopener noreferrer" class="">Queue podgroup statistics</a></strong>.</p>
<p>Sincerely thanks to community developer: <strong>@JesseStutler</strong> for this contribution!</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="conclusion-volcano-v111-a-new-era-of-cloud-native-batch-computing"><strong>Conclusion: Volcano v1.11, A New Era of Cloud-Native Batch Computing</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#conclusion-volcano-v111-a-new-era-of-cloud-native-batch-computing" class="hash-link" aria-label="Direct link to conclusion-volcano-v111-a-new-era-of-cloud-native-batch-computing" title="Direct link to conclusion-volcano-v111-a-new-era-of-cloud-native-batch-computing" translate="no">​</a></h2>
<p>Volcano v1.11 is not just a technological leap but a new chapter in cloud-native batch computing. Whether for AI large model training, Big Data scheduling, or resource optimization, Volcano v1.11 delivers powerful features and flexible solutions. We believe Volcano v1.11 will help users achieve greater heights in cloud-native batch computing, ushering in a new era of AI and Big Data scheduling!</p>
<p><strong>Experience Volcano v1.11.0 now and step into a new era of efficient computing!</strong></p>
<p><strong>v1.11.0 release:</strong> <a href="https://github.com/volcano-sh/volcano/releases/tag/v1.11.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.11.0</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="acknowledgments"><strong>Acknowledgments</strong><a href="https://volcano.sh/blog/Volcano-1.11.0-release#acknowledgments" class="hash-link" aria-label="Direct link to acknowledgments" title="Direct link to acknowledgments" translate="no">​</a></h2>
<p>Volcano v1.11.0 includes contributions from 39 community members. Sincerely thanks to all contributors:</p>
<table><thead><tr><th style="text-align:left">@QingyaFan</th><th style="text-align:left">@JesseStutler</th><th style="text-align:left">@bogo-y</th></tr></thead><tbody><tr><td style="text-align:left">@bibibox</td><td style="text-align:left">@zedongh</td><td style="text-align:left">@archlitchi</td></tr><tr><td style="text-align:left">@dongjiang1989</td><td style="text-align:left">@william-wang</td><td style="text-align:left">@fengruotj</td></tr><tr><td style="text-align:left">@SataQiu</td><td style="text-align:left">@lowang-bh</td><td style="text-align:left">@Rui-Gan</td></tr><tr><td style="text-align:left">@xovoxy</td><td style="text-align:left">@wangyang0616</td><td style="text-align:left">@PigNatovsky</td></tr><tr><td style="text-align:left">@Yanping-io</td><td style="text-align:left">@lishangyuzi</td><td style="text-align:left">@hwdef</td></tr><tr><td style="text-align:left">@bood</td><td style="text-align:left">@kerthcet</td><td style="text-align:left">@WY-Dev0</td></tr><tr><td style="text-align:left">@raravena80</td><td style="text-align:left">@SherlockShemol</td><td style="text-align:left">@zhifanggao</td></tr><tr><td style="text-align:left">@conghuhu</td><td style="text-align:left">@MondayCha</td><td style="text-align:left">@vie-serendipity</td></tr><tr><td style="text-align:left">@Prepmachine4</td><td style="text-align:left">@Monokaix</td><td style="text-align:left">@lengrongfu</td></tr><tr><td style="text-align:left">@jasondrogba</td><td style="text-align:left">@sceneryback</td><td style="text-align:left">@TymonLee</td></tr><tr><td style="text-align:left">@liuyuanchun11</td><td style="text-align:left">@Vacant2333</td><td style="text-align:left">@matbme</td></tr><tr><td style="text-align:left">@lekaf974</td><td style="text-align:left">@kursataktas</td><td style="text-align:left">@lut777</td></tr></tbody></table>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>scheduling</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.10.0 Available Now]]></title>
            <link>https://volcano.sh/blog/Volcano-1.10.0-release</link>
            <guid>https://volcano.sh/blog/Volcano-1.10.0-release</guid>
            <pubDate>Sun, 29 Sep 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[New features: Support Queue Priority Scheduling Strategy, Enable Fine-Grained GPU Resource Sharing and Reclaim, Introduce Pod Scheduling Readiness Support, Add Sidecar Container Scheduling Capabilities, Enhance Vcctl Command Line Tool, Ensure Compatibility with Kubernetes v1.30, Strengthen Volcano Security Measures, Optimize Volcano for Large-Scale Performance, Improve GPU Monitoring Function, Optimize Helm Chart Installation And Upgrade Processes, etc.]]></description>
            <content:encoded><![CDATA[<p>On Sep 19, 2024, UTC+8, Volcano version v1.10.0 was officially released. This version introduced the following new features:</p>
<ul>
<li class="">
<p><strong>Support Queue Priority Scheduling Strategy</strong></p>
</li>
<li class="">
<p><strong>Enable Fine-Grained GPU Resource Sharing and Reclaim</strong></p>
</li>
<li class="">
<p><strong>Introduce Pod Scheduling Readiness Support</strong></p>
</li>
<li class="">
<p><strong>Add Sidecar Container Scheduling Capabilities</strong></p>
</li>
<li class="">
<p><strong>Enhance Vcctl Command Line Tool</strong></p>
</li>
<li class="">
<p><strong>Ensure Compatibility with Kubernetes v1.30</strong></p>
</li>
<li class="">
<p><strong>Strengthen Volcano Security Measures</strong></p>
</li>
<li class="">
<p><strong>Optimize Volcano for Large-Scale Performance</strong></p>
</li>
<li class="">
<p><strong>Improve GPU Monitoring Function</strong></p>
</li>
<li class="">
<p><strong>Optimize Helm Chart Installation And Upgrade Processes</strong></p>
</li>
</ul>
<p>Volcano is the industry-first cloud native batch computing project. Open-sourced at KubeCon Shanghai in June 2019, it became an official CNCF project in April 2020. In April 2022, Volcano was promoted to a CNCF incubating project. By now, more than 600 global developers have committed code to the project. The community is seeing growing popularity among developers, partners, and users.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="key-features">Key Features<a href="https://volcano.sh/blog/Volcano-1.10.0-release#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="support-queue-priority-scheduling-strategy">Support Queue Priority Scheduling Strategy<a href="https://volcano.sh/blog/Volcano-1.10.0-release#support-queue-priority-scheduling-strategy" class="hash-link" aria-label="Direct link to Support Queue Priority Scheduling Strategy" title="Direct link to Support Queue Priority Scheduling Strategy" translate="no">​</a></h3>
<p>In traditional big data processing scenarios, users can directly set queue priorities to control the scheduling order of jobs. To ease the migration from Hadoop/Yarn to cloud-native platforms, Volcano supports setting priorities at the queue level, reducing migration costs for big data users while enhancing user experience and resource utilization efficiency.</p>
<p>Queues are a fundamental resource in Volcano, each with its own priority. By default, a queue's priority is determined by its <code>share</code> value, which is calculated by dividing the resources allocated to the queue by its total capacity. This is done automatically, with no manual configuration needed. The smaller the <code>share</code> value, the fewer resources the queue has, making it less saturated and more likely to receive resources first. Thus, queues with smaller <code>share</code> values have higher priority, ensuring fairness in resource allocation.</p>
<p>In production environments—especially in big data scenarios—users often prefer to manually set queue priorities to have a clearer understanding of the order in which queues are scheduled. Since the <code>share</code> value is dynamic and changes in real-time as resources are allocated, Volcano introduces a <code>priority</code> field to allow users to set queue priorities more intuitively. The higher the <code>priority</code>, the higher the queue's standing. High-priority queues receive resources first, while low-priority queues have their jobs reclaimed earlier when resources need to be recycled.</p>
<p>Queue Priority Definition:</p>
<div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">type</span><span class="token plain"> QueueSpec </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">`{</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">...</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">  // Priority define the priority of queue. Higher values are prioritized for scheduling and considered     later during reclamation.</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">  // +optional</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">  Priority int32 `</span><span class="token plain">json</span><span class="token punctuation" style="color:#393A34">:</span><span class="token string" style="color:#e3116c">"priority,omitempty"</span><span class="token plain"> protobuf</span><span class="token punctuation" style="color:#393A34">:</span><span class="token string" style="color:#e3116c">"bytes,10,opt,name=priority"</span><span class="token string" style="color:#e3116c">`</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">}`</span><br></span></code></pre></div></div>
<p>To ensure compatibility with the <code>share</code> mechanism, Volcano also considers the share value when calculating queue priorities. By default, if a user has not set a specific queue priority or if priorities are equal, Volcano will fall back to comparing share values. In this case, the queue with the smaller share has higher priority. Users have the flexibility to choose between different priority strategies based on their specific needs—either by using the priority or the share method.</p>
<p>For queue priority design doc, please refer to: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/queue-priority.md" target="_blank" rel="noopener noreferrer" class="">Queue priority</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="enable-fine-grained-gpu-resource-sharing-and-reclaim">Enable Fine-Grained GPU Resource Sharing and Reclaim<a href="https://volcano.sh/blog/Volcano-1.10.0-release#enable-fine-grained-gpu-resource-sharing-and-reclaim" class="hash-link" aria-label="Direct link to Enable Fine-Grained GPU Resource Sharing and Reclaim" title="Direct link to Enable Fine-Grained GPU Resource Sharing and Reclaim" translate="no">​</a></h3>
<p>Volcano introduced the elastic queue capacity scheduling feature in version v1.9, allowing users to directly set the capacity for each resource dimension within a queue. This feature also supports elastic scheduling based on the <code>deserved</code> value, enabling more fine-grained resource sharing and recycling across queues.</p>
<p>For detailed design information on elastic queue capacity scheduling, refer to the <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md" target="_blank" rel="noopener noreferrer" class="">Capacity Scheduling Design Document</a>.</p>
<p>For a step-by-step guide on using the capacity plugin, see the <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_capacity_plugin">Capacity Plugin User Guide</a>.</p>
<p>Configure each dimension deserved resource samples for the queue:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> scheduling.volcano.sh/v1beta1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Queue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> demo</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">queue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">spec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">reclaimable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">deserved</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># set the deserved field.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">cpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">64</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">memory</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 128Gi</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">nvidia.com/a100</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">40</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">nvidia.com/v100</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">80</span><br></span></code></pre></div></div>
<p>In version v1.10, Volcano extends its support to include reporting different types of GPU resources within elastic queue capacities. NVIDIA's default <code>Device Plugin</code> does not distinguish between GPU models, instead reporting all resources uniformly as <code>nvidia.com/gpu</code>. This limits AI training and inference tasks from selecting specific GPU models, such as A100 or T4, based on their particular needs. To address this, Volcano now supports reporting distinct GPU models at the <code>Device Plugin</code> level, working with the <code>capacity</code> plugin to enable more precise GPU resource sharing and recycling.</p>
<p>For instructions on using the <code>Device Plugin</code> to report various GPU models, please refer to the <a href="https://github.com/volcano-sh/devices/tree/release-1.1/docs/resource-naming" target="_blank" rel="noopener noreferrer" class="">GPU Resource Naming Guide</a>.</p>
<p><strong>Note:</strong></p>
<p>In version v1.10.0, the <code>capacity</code> plugin is the default for queue management. Note that the <code>capacity</code> and <code>proportion</code> plugins are incompatible, so after upgrading to v1.10.0, you must set the <code>deserved</code> field for queues to ensure proper functionality.</p>
<p>For detailed instructions, please refer to the <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_capacity_plugin">Capacity Plugin User Guide</a>.</p>
<p>The <code>capacity</code> plugin allocates cluster resources based on the <code>deserved</code> value set by the user, while the <code>proportion</code> plugin dynamically allocates resources according to queue weight. Users can select either the <code>capacity</code> or <code>proportion</code> plugin for queue management based on their specific needs.</p>
<p>For more details on the proportion plugin, please visit: <a class="" href="https://volcano.sh/docs/Scheduler/Plugins/proportion">Proportion Plugin</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="introduce-pod-scheduling-readiness-support">Introduce Pod Scheduling Readiness Support<a href="https://volcano.sh/blog/Volcano-1.10.0-release#introduce-pod-scheduling-readiness-support" class="hash-link" aria-label="Direct link to Introduce Pod Scheduling Readiness Support" title="Direct link to Introduce Pod Scheduling Readiness Support" translate="no">​</a></h3>
<p>Once a Pod is created, it is considered ready for scheduling. In Kube-scheduler, it will try its best to find a suitable node to place all pending Pods. However, in reality, some Pods may be in a "lack of necessary resources" state for a long time. These Pods actually interfere with the decision-making and operation of the scheduler (and downstream components such as Cluster AutoScaler) in an unnecessary way, causing problems such as resource waste. Pod Scheduling Readiness is a new feature of Kube-sheduler. In Kubernetes v.1.30 GA, it has become a stable feature. It controls the scheduling timing of Pods by setting the schedulingGates field of the Pod.</p>
<p><img decoding="async" loading="lazy" alt="Pod SchedulingGates" src="https://volcano.sh/assets/images/podSchedulingGates-6be4a2fe6d2d9c802c03b087b2f084fc.svg" width="871" height="730" class="img_ev3q"></p>
<p>In previous versions, Volcano has integrated all algorithms of the K8s default scheduler, fully covering the native scheduling functions of Kube-scheduler. Therefore, Volcano can completely replace Kube-scheduler as a unified scheduler under the cloud native platform, supporting unified scheduling of microservices and AI/big data workloads. In the latest version v1.10, Volcano has introduced Pod Scheduling Readiness scheduling capability to further meet users' scheduling needs in diverse scenarios.</p>
<p>For the documentation of Pod Scheduling Readiness features, please refer to: <a href="https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/" target="_blank" rel="noopener noreferrer" class="">Pod Scheduling Readiness | Kubernetes</a></p>
<p>For the Pod Scheduling Readiness design doc of volcano, please refer to: <a href="https://github.com/volcano-sh/volcano/pull/3581" target="_blank" rel="noopener noreferrer" class="">Proposal for Support of Pod Scheduling Readiness by ykcai-daniel · Pull Request #3581 · volcano-sh/volcano (github.com)</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="add-sidecar-container-scheduling-capabilities">Add Sidecar Container Scheduling Capabilities<a href="https://volcano.sh/blog/Volcano-1.10.0-release#add-sidecar-container-scheduling-capabilities" class="hash-link" aria-label="Direct link to Add Sidecar Container Scheduling Capabilities" title="Direct link to Add Sidecar Container Scheduling Capabilities" translate="no">​</a></h3>
<p>A Sidecar container is an auxiliary container designed to support the main business container by handling tasks such as logging, monitoring, and network initialization.</p>
<p>Prior to Kubernetes v1.28, the concept of Sidecar containers existed only informally, with no dedicated API to distinguish them from business containers. Both types of containers were treated equally, which meant that Sidecar containers could be started after the business container and might end before it. Ideally, Sidecar containers should start before and finish after the business container to ensure complete collection of logs and monitoring data.</p>
<p>Kubernetes v1.28 introduces formal support for Sidecar containers at the API level, implementing unified lifecycle management for init containers, Sidecar containers, and business containers. This update also adjusts how resource requests and limits are calculated for Pods, and the feature will enter Beta status in v1.29.</p>
<p>The development of this feature involved extensive discussions, mainly focusing on maintaining compatibility with existing APIs and minimizing disruptive changes. Rather than introducing a new container type, Kubernetes reuses the init container type and designates Sidecar containers by setting the init container’s restartPolicy to Always. This approach addresses both API compatibility and lifecycle management issues effectively.</p>
<p>With this update, the scheduling of Pods now considers the Sidecar container’s resource requests as part of the business container’s total requests. Consequently, the Volcano scheduler has been updated to support this new calculation method, allowing users to schedule Sidecar containers with Volcano.</p>
<p>For more information on Sidecar containers, visit <a href="https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/" target="_blank" rel="noopener noreferrer" class="">Sidecar Containers | Kubernetes</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="enhance-vcctl-command-line-tool">Enhance Vcctl Command Line Tool<a href="https://volcano.sh/blog/Volcano-1.10.0-release#enhance-vcctl-command-line-tool" class="hash-link" aria-label="Direct link to Enhance Vcctl Command Line Tool" title="Direct link to Enhance Vcctl Command Line Tool" translate="no">​</a></h3>
<p>vcctl is a command line tool for operating Volcano's built-in CRD resources. It can be conveniently used to view/delete/pause/resume vcjob resources, and supports viewing/deleting/opening/closing/updating queue resources. Volcano has enhanced vcctl in the new version, adding the following features:</p>
<ul>
<li class="">
<p>Support creating/deleting/viewing/describing <code>jobflow</code> and <code>jobtemplate</code> resources</p>
</li>
<li class="">
<p>Support querying vcjob in a specified queue</p>
</li>
<li class="">
<p>Support querying Pods by queue and vcjob filtering</p>
</li>
</ul>
<p>For detailed guidance documents on vcctl, please refer to: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/command-line-enhancement.md#new-format-of-volcano-command-line" target="_blank" rel="noopener noreferrer" class="">vcctl Command Line Enhancement</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="ensure-compatibility-with-kubernetes-v130">Ensure Compatibility with Kubernetes v1.30<a href="https://volcano.sh/blog/Volcano-1.10.0-release#ensure-compatibility-with-kubernetes-v130" class="hash-link" aria-label="Direct link to Ensure Compatibility with Kubernetes v1.30" title="Direct link to Ensure Compatibility with Kubernetes v1.30" translate="no">​</a></h3>
<p>Volcano closely follows the pace of Kubernetes community versions and supports every major version of Kubernetes. The latest supported version is v1.30, and runs complete UT and E2E use cases to ensure functionality and reliability.</p>
<p>If you want to participate in the development of Volcano adapting to the new version of Kubernetes, please refer to: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/adapt-k8s-todo.md" target="_blank" rel="noopener noreferrer" class="">adapt-k8s-todo</a> for community contributions.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="strengthen-volcano-security-measures">Strengthen Volcano Security Measures<a href="https://volcano.sh/blog/Volcano-1.10.0-release#strengthen-volcano-security-measures" class="hash-link" aria-label="Direct link to Strengthen Volcano Security Measures" title="Direct link to Strengthen Volcano Security Measures" translate="no">​</a></h3>
<p>Volcano has always attached great importance to the security of the open source software supply chain. It follows the specifications defined by OpenSSF in terms of license compliance, security vulnerability disclosure and repair, warehouse branch protection, CI inspection, etc. Volcano recently added a new workflow to Github Action, which will run OpenSSF security checks when the code is merged, and update the software security score in real time to continuously improve software security.</p>
<p>At the same time, Volcano has reduced the RBAC permissions of each component, retaining only the necessary permissions, avoiding potential risks of unauthorized access and improving the security of the system.</p>
<p>Related PRs:</p>
<p><a href="https://github.com/volcano-sh/volcano/pull/3655" target="_blank" rel="noopener noreferrer" class="">Added the scorecard github action and its badge by harshitasao · Pull Request #3655 · volcano-sh/volcano</a></p>
<p><a href="https://github.com/volcano-sh/volcano/pull/3545" target="_blank" rel="noopener noreferrer" class="">Shrink permissions of vc scheduler &amp; controller by Monokaix · Pull Request #3545 · volcano-sh/volcano (github.com)</a></p>
<p><a href="https://github.com/volcano-sh/volcano/pull/3504" target="_blank" rel="noopener noreferrer" class="">Add pre-install&amp;pre-upgrade hook for admission-init job by Monokaix · Pull Request #3504 · volcano-sh/volcano (github.com)</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="optimize-volcano-for-large-scale-performance">Optimize Volcano for Large-Scale Performance<a href="https://volcano.sh/blog/Volcano-1.10.0-release#optimize-volcano-for-large-scale-performance" class="hash-link" aria-label="Direct link to Optimize Volcano for Large-Scale Performance" title="Direct link to Optimize Volcano for Large-Scale Performance" translate="no">​</a></h3>
<p>In large-scale scenarios, Volcano has done a lot of performance optimization work, mainly including:</p>
<ul>
<li class="">Optimize vcjob update strategy, reduce vcjob update and synchronization frequency, reduce API Server pressure, and improve QPS of submitted tasks</li>
<li class="">Add controller gate switch to vc controller, users can choose to close unnecessary controllers, reduce memory usage and CPU load</li>
<li class="">All controllers use shared informer to reduce memory usage</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="improve-gpu-monitoring-function">Improve GPU Monitoring Function<a href="https://volcano.sh/blog/Volcano-1.10.0-release#improve-gpu-monitoring-function" class="hash-link" aria-label="Direct link to Improve GPU Monitoring Function" title="Direct link to Improve GPU Monitoring Function" translate="no">​</a></h3>
<p>The new version of Volcano optimizes and enhances GPU monitoring indicators, fixes the problem of inaccurate GPU monitoring, and adds node information to the GPU computing power and video memory monitoring indicators, allowing users to more intuitively view the computing power of each GPU on each node, the total amount and allocated amount of video memory.</p>
<p>Related PR: <a href="https://github.com/volcano-sh/volcano/pull/3620/" target="_blank" rel="noopener noreferrer" class="">Update volcano-vgpu monitoring system by archlitchi · Pull Request #3620 · volcano-sh/volcano (github.com)</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="optimize-helm-chart-installation-and-upgrade-processes">Optimize Helm Chart Installation And Upgrade Processes<a href="https://volcano.sh/blog/Volcano-1.10.0-release#optimize-helm-chart-installation-and-upgrade-processes" class="hash-link" aria-label="Direct link to Optimize Helm Chart Installation And Upgrade Processes" title="Direct link to Optimize Helm Chart Installation And Upgrade Processes" translate="no">​</a></h3>
<p>Volcano has optimized the installation and upgrade process of helm chart, and supports installing helm chart packages to set more custom parameters, mainly including:</p>
<ul>
<li class="">
<p>By using the helm hook mechanism, after successfully installing Volcano, the volcano-admission-init job is automatically deleted to avoid the subsequent upgrade failure using helm upgrade, related PR: <a href="https://github.com/volcano-sh/volcano/pull/3504" target="_blank" rel="noopener noreferrer" class="">Add pre-install&amp;pre-upgrade hook for admission-init job by Monokaix · Pull Request #3504 · volcano-sh/volcano (github.com)</a></p>
</li>
<li class="">
<p>Update the secret file required by Volcano admission after each successful installation to avoid the problem of repeated installation and uninstallation of Volcano without specifying the helm package name, which will cause the Volcano admission process to fail, related PR: <a href="https://github.com/volcano-sh/volcano/pull/3653" target="_blank" rel="noopener noreferrer" class="">Update volcano-admission secret when it already exists by Monokaix · Pull Request #3653 · volcano-sh/volcano (github.com)</a></p>
</li>
<li class="">
<p>Support setting common labels for resource objects in helm packages, related PR: <a href="https://github.com/volcano-sh/volcano/pull/3511" target="_blank" rel="noopener noreferrer" class="">Add common labels for chart objects by Aakcht · Pull Request #3511 · volcano-sh/volcano (github.com)</a></p>
</li>
<li class="">
<p>Support setting log level for Volcano components through helm, related PR: <a href="https://github.com/volcano-sh/volcano/pull/3656" target="_blank" rel="noopener noreferrer" class="">Expose volcano components (controller, scheduler, etc.) log level control to the helm chat values by chenshiwei-io · Pull Request #3656 · volcano-sh/volcano (github.com)</a></p>
</li>
<li class="">
<p>Support specifying the image registry of Volcano components through helm, related PR: <a href="https://github.com/volcano-sh/volcano/pull/3436" target="_blank" rel="noopener noreferrer" class="">add image registry for helm by calvin0327 · Pull Request #3436 · volcano-sh/volcano (github.com)</a></p>
</li>
<li class="">
<p>Support setting container-level securityContext through helm, related PR: <a href="https://github.com/volcano-sh/volcano/pull/3704" target="_blank" rel="noopener noreferrer" class="">feat: Add securityContext support at container level in helm chart templates by lekaf974 · Pull Request #3704 · volcano-sh/volcano (github.com)</a></p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="contributors">Contributors<a href="https://volcano.sh/blog/Volcano-1.10.0-release#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h3>
<p>Volcano 1.10.0 version includes hundreds of contributions from 36 community contributors. Thanks for your contributions.</p>
<p><strong>Contributors on GitHub:</strong></p>
<table><thead><tr><th><strong>@googs1025</strong></th><th><strong>@WulixuanS</strong></th><th><strong>@SataQiu</strong></th></tr></thead><tbody><tr><td><strong>@guoqinwill</strong></td><td><strong>@lowang-bh</strong></td><td><strong>@shruti2522</strong></td></tr><tr><td><strong>@lukasboettcher</strong></td><td><strong>@wangyysde</strong></td><td><strong>@bibibox</strong></td></tr><tr><td><strong>@Wang-Kai</strong></td><td><strong>@y-ykcir</strong></td><td><strong>@lekaf974</strong></td></tr><tr><td><strong>@yeahdongcn</strong></td><td><strong>@Monokaix</strong></td><td><strong>@Aakcht</strong></td></tr><tr><td><strong>@yxxhero</strong></td><td><strong>@babugeet</strong></td><td><strong>@liuyuanchun11</strong></td></tr><tr><td><strong>@MichaelXcc</strong></td><td><strong>@william-wang</strong></td><td><strong>@lengrongfu</strong></td></tr><tr><td><strong>@xieyanker</strong></td><td><strong>@lx1036</strong></td><td><strong>@archlitchi</strong></td></tr><tr><td><strong>@hwdef</strong></td><td><strong>@wangyang0616</strong></td><td><strong>@microyahoo</strong></td></tr><tr><td><strong>@snappyyouth</strong></td><td><strong>@harshitasao</strong></td><td><strong>@chenshiwei-io</strong></td></tr><tr><td><strong>@TaiPark</strong></td><td><strong>@ykcai-daniel</strong></td><td><strong>@JesseStutler</strong></td></tr><tr><td><strong>@belo4ya</strong></td><td></td><td></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="reference">Reference<a href="https://volcano.sh/blog/Volcano-1.10.0-release#reference" class="hash-link" aria-label="Direct link to Reference" title="Direct link to Reference" translate="no">​</a></h2>
<p>Release note: v1.10.0</p>
<p><a href="https://github.com/volcano-sh/volcano/releases/tag/v1.10.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.10.0</a></p>
<p>Branch：release-1.10</p>
<p><a href="https://github.com/volcano-sh/volcano/tree/release-1.10" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/tree/release-1.10</a></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="about-volcano">About Volcano<a href="https://volcano.sh/blog/Volcano-1.10.0-release#about-volcano" class="hash-link" aria-label="Direct link to About Volcano" title="Direct link to About Volcano" translate="no">​</a></h2>
<p>Volcano is designed for high-performance computing applications such as AI, big data, gene sequencing, and rendering, and supports mainstream general computing frameworks. More than 58,000 global developers joined us, among whom the in-house ones come from companies such as Huawei, AWS, Baidu, Tencent, JD, and Xiaohongshu. There are 4.1k+ Stars and 900+ Forks for the project. Volcano has been proven feasible for mass data computing and analytics, such as AI, big data, and gene sequencing. Supported frameworks include Spark, Flink, TensorFlow, PyTorch, Argo, MindSpore, Paddlepaddle, Kubeflow, MPI, Horovod, MXNet, KubeGene, and Ray. The ecosystem is thriving with more developers and use cases coming up.</p>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>scheduling</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.9.0 Available Now]]></title>
            <link>https://volcano.sh/blog/Volcano-1.9.0-release</link>
            <guid>https://volcano.sh/blog/Volcano-1.9.0-release</guid>
            <pubDate>Tue, 21 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[New features: Support elastic queue capacity scheduling, Supports affinity scheduling between queues and nodes, GPU sharing feature supports node scoring scheduling, Volcano Support for Kubernetes v1.29, Enhance scheduler metrics, Add license compliance check, Improve scheduling stability, etc.]]></description>
            <content:encoded><![CDATA[<p>On May 21, 2024, UTC+8, Volcano version v1.9.0 was officially released. This version added the following new features:</p>
<ul>
<li class="">
<p><strong>Support elastic queue capacity scheduling</strong></p>
</li>
<li class="">
<p><strong>Supports affinity scheduling between queues and nodes</strong></p>
</li>
<li class="">
<p><strong>GPU sharing feature supports node scoring scheduling</strong></p>
</li>
<li class="">
<p><strong>Volcano Support for Kubernetes v1.29</strong></p>
</li>
<li class="">
<p><strong>Enhance scheduler metrics</strong></p>
</li>
<li class="">
<p><strong>Add license compliance check</strong></p>
</li>
<li class="">
<p><strong>Improve scheduling stability</strong></p>
</li>
</ul>
<p>Volcano is the industry-first cloud native batch computing project. Open-sourced at KubeCon Shanghai in June 2019, it became an official CNCF project in April 2020. In April 2022, Volcano was promoted to a CNCF incubating project. By now, more than 600 global developers have committed code to the project. The community is seeing growing popularity among developers, partners, and users.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="key-features">Key Features<a href="https://volcano.sh/blog/Volcano-1.9.0-release#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="support-elastic-queue-capacity-scheduling">Support elastic queue capacity scheduling<a href="https://volcano.sh/blog/Volcano-1.9.0-release#support-elastic-queue-capacity-scheduling" class="hash-link" aria-label="Direct link to Support elastic queue capacity scheduling" title="Direct link to Support elastic queue capacity scheduling" translate="no">​</a></h4>
<p>Volcano now uses the proportion plugin for queue management. Users can set the guarantee, capacity and other fields of the queue to set the reserved resources and capacity limit of the queue. And by setting the weight value of the queue to realize the resource sharing within the cluster, the queue is proportionally divided into cluster resources according to the weight value, but this queue management method has the following problems:</p>
<ul>
<li class="">The capacity of the resources divided by the queue is reflected by the weight, which is not intuitive enough.</li>
<li class="">All resources in the queue are divided using the same ratio, and the capacity cannot be set separately for each dimension of the queue.</li>
</ul>
<p>Based on the above considerations, Volcano implements a new queue elasticity capacity management capability, it supports:</p>
<ul>
<li class="">Allows users to directly set the capacity of each dimension of resources for the queue instead of setting a weight value.</li>
<li class="">Elastic capacity scheduling based deserved resources, and queue's resources can be shared and reclaimed back.</li>
</ul>
<p>For example,  in AI large model training scenario, setting different resource capacities for different GPU models in the queue, such as A100 and V100, respectively. At the same time, when the cluster resources are idle, the queue can reuse the resources of other idle queues, and when needed, reclaim the resources set by the user for the queue, that is, the amount of resources deserved, so as to realize the elastic capacity scheduling.</p>
<p>To use this feature, you need to set the deserved field of the queue and set the amount of resources to be deserved for each dimension. At the same time, you need to turn on the capacity plugin and turn off the proportion plugin in the scheduling configuration.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> scheduling.volcano.sh/v1beta1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Queue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> demo</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">queue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">spec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">reclaimable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">deserved</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># set the deserved field.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">cpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">64</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">memeory</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 128Gi</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">nvidia.com/a100</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">40</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">nvidia.com/v100</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">80</span><br></span></code></pre></div></div>
<p>For a complete usage example of queue elastic capacity scheduling, please refer to:
<a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_capacity_plugin">How to use capacity plugin</a>.</p>
<p>For the elastic queue capacity design document, please refer to:
<a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md" target="_blank" rel="noopener noreferrer" class="">Capacity scheduling Design</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="supports-affinity-scheduling-between-queues-and-nodes">Supports affinity scheduling between queues and nodes<a href="https://volcano.sh/blog/Volcano-1.9.0-release#supports-affinity-scheduling-between-queues-and-nodes" class="hash-link" aria-label="Direct link to Supports affinity scheduling between queues and nodes" title="Direct link to Supports affinity scheduling between queues and nodes" translate="no">​</a></h4>
<p>Queues are usually associated with departments within the company, and different departments usually need to use different heterogeneous resource types. For example, the large model training team needs to use NIVDIA’s Tesla GPU, and the recommendation team needs to use AMD’s GPU. When users submit jobs to the queue , the job needs to be automatically scheduled to the node of the corresponding resource type according to the attributes of the queue.</p>
<p>Volcano has implemented affinity scheduling capabilities for queues and nodes. Users only need to set the node label that require affinity in the affinity field of the queue. Volcano will automatically schedule jobs submitted to the current queue to the nodes associated with the queue. Users do not need to Set the affinity of the job separately, and only need to set the affinity of the queue uniformly. Jobs submitted to the queue will be scheduled to the corresponding node based on the affinity of the queue and the node.</p>
<p>This feature supports hard affinity, soft affinity, and anti-affinity scheduling at the same time. When using it, you need to set a label with the key <code>volcano.sh/nodegroup-name</code> for the node, and then set the affinity field of the queue to specify hard affinity, soft affinity label values.</p>
<p>For example, the following queue setting means that jobs submitted to the queue need to be scheduled to nodes with label values of groupname1 and groupname2, and will be scheduled to nodes with label values of groupname2 first. At the same time, jobs cannot be scheduled to nodes with label values of groupname3 and groupname4, when resources are insufficient, it can also be scheduled to the node with the label value groupname3.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> scheduling.volcano.sh/v1beta1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Queue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> default</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">spec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">reclaimable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">weight</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">affinity</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">            </span><span class="token comment" style="color:#999988;font-style:italic"># added field</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">nodeGroupAffinity</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">requiredDuringSchedulingIgnoredDuringExecution</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> &lt;groupname1</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> &lt;groupname2</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain">	</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">preferredDuringSchedulingIgnoredDuringExecution</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> &lt;groupname1</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">nodeGroupAntiAffinity</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">requiredDuringSchedulingIgnoredDuringExecution</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> &lt;groupname3</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> &lt;gropuname4</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">preferredDuringSchedulingIgnoredDuringExecution</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> &lt;groupname3</span><span class="token punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>The scheduling plugin for this feature is called nodegroup, for a complete example of its use see: [How to use nodegroup plugin](<a href="https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to</a> _use_nodegroup_plugin.md).</p>
<p>For detailed design documentation, see <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md" target="_blank" rel="noopener noreferrer" class="">The nodegroup design</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="gpu-sharing-feature-supports-node-scoring-scheduling">GPU sharing feature supports node scoring scheduling<a href="https://volcano.sh/blog/Volcano-1.9.0-release#gpu-sharing-feature-supports-node-scoring-scheduling" class="hash-link" aria-label="Direct link to GPU sharing feature supports node scoring scheduling" title="Direct link to GPU sharing feature supports node scoring scheduling" translate="no">​</a></h4>
<p>GPU Sharing is a GPU sharing and isolation solution introduced in Volcano v1.8, which provides GPU sharing and device memory control capabilities to enhance the GPU resource utilization in AI training and inference scenarios. v1.9 adds a new scoring strategy for GPU nodes on top of this feature, so that the optimal node can be selected during job assignment to further enhance resource utilization. Users can set different scoring strategies. Currently, the following two strategies are supported:</p>
<ul>
<li class="">
<p>Binpack: Provides a binpack algorithm for GPU card granularity, prioritizing to fill up a node with GPU cards that have already been allocated resources to avoid resource fragmentation and waste.</p>
</li>
<li class="">
<p>Spread: Prioritizes the use of idle GPU cards over shared cards that have already been allocated resources.</p>
</li>
</ul>
<p>For detailed usage documentation, please refer to: <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_gpu_sharing">How to use gpu sharing</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="volcano-support-for-kubernetes-v129">Volcano Support for Kubernetes v1.29<a href="https://volcano.sh/blog/Volcano-1.9.0-release#volcano-support-for-kubernetes-v129" class="hash-link" aria-label="Direct link to Volcano Support for Kubernetes v1.29" title="Direct link to Volcano Support for Kubernetes v1.29" translate="no">​</a></h4>
<p>Volcano version follows the Kubernetes community version tempo and supports every base version of Kubernetes. The latest supported version is v1.29 and ran full UT, E2E use cases to ensure functionality and reliability. If you would like to participate in the development of Volcano adapting to new versions of Kubernetes, please refer to: <a href="https://github.com/volcano-sh/volcano/pull/3459" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/3459</a> to make community contributions.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="enhance-scheduler-metrics">Enhance scheduler metrics<a href="https://volcano.sh/blog/Volcano-1.9.0-release#enhance-scheduler-metrics" class="hash-link" aria-label="Direct link to Enhance scheduler metrics" title="Direct link to Enhance scheduler metrics" translate="no">​</a></h4>
<p>Volcano uses the client-go to talk with Kubernetes. Although the client can set the QPS to avoid requests from being flow-limited, it is difficult to observe how many QPS is actually used by the client, so in order to observe the frequency of requests from the client in real time, Volcano has added a new client-go metrics, which allows users to access the metrics to see the number of GET, POST and other requests per second, so as to get the actual QPS used per second, and thus decide whether or not the client needs to adjust the QPS. The client-go metrics also include client certificate rotation cycle statistics, response size per request statistics, etc.</p>
<p>Users can use curl http://$volcano_scheduler_pod_ip:8080/metrics to get all the detailed metrics of volcano scheduler.</p>
<p>Related PR: <a href="https://github.com/volcano-sh/volcano/pull/3274" target="_blank" rel="noopener noreferrer" class="">#3274</a>.(<a href="https://github.com/Monokaix" target="_blank" rel="noopener noreferrer" class="">@Monokaix</a>)</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="add-license-compliance-check">Add license compliance check<a href="https://volcano.sh/blog/Volcano-1.9.0-release#add-license-compliance-check" class="hash-link" aria-label="Direct link to Add license compliance check" title="Direct link to Add license compliance check" translate="no">​</a></h4>
<p>In order to enhance the open source license compliance governance standards of the Volcano community, avoid the introduction of infectious open source protocols, and avoid potential risks, the Volcano community has introduced an open source license compliance checking tool. The so-called infectious protocol refers to software that uses this protocol as an open source license. Derivative works generated after modification, use, and copying must also be open sourced under this agreement. If the third-party library introduced by the PR submitted by the developer contains infectious open source protocols such as GPL, LGPL, etc., CI Access Control will intercept it. The developer needs to replace the third-party library with a loose free software license protocol such as MIT, Apache 2.0, BSD, etc. , to pass the open source license compliance check.</p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="improve-scheduling-stability">Improve scheduling stability<a href="https://volcano.sh/blog/Volcano-1.9.0-release#improve-scheduling-stability" class="hash-link" aria-label="Direct link to Improve scheduling stability" title="Direct link to Improve scheduling stability" translate="no">​</a></h4>
<p>Volcano v1.9.0 has done more optimization in preemption, retry for scheduling failure, avoiding memory leaks, security enhancement, etc. The details include:</p>
<ul>
<li class="">
<p>Fix the problem of pods not being able to be scheduled due to frequent expansion and contraction of deployment in extreme cases, see PR for details: <a href="https://github.com/volcano-sh/volcano/pull/3376" target="_blank" rel="noopener noreferrer" class="">#3376</a>.(<a href="https://github.com/guoqinwill" target="_blank" rel="noopener noreferrer" class="">@guoqinwill</a>)</p>
</li>
<li class="">
<p>Fix Pod preemption: see PR for details: <a href="https://github.com/volcano-sh/volcano/pull/3458" target="_blank" rel="noopener noreferrer" class="">#3458</a>.(<a href="https://github.com/LivingCcj" target="_blank" rel="noopener noreferrer" class="">LivingCcj</a>)</p>
</li>
<li class="">
<p>Optimize Pod scheduling failure retry mechanism: see PR for details: <a href="https://github.com/volcano-sh/volcano/pull/3435" target="_blank" rel="noopener noreferrer" class="">#3435</a>.(<a href="https://github.com/bibibox" target="_blank" rel="noopener noreferrer" class="">@bibibox</a>)</p>
</li>
<li class="">
<p>Metrics optimization: <a href="https://github.com/volcano-sh/volcano/pull/3463" target="_blank" rel="noopener noreferrer" class="">#3463</a>.(<a href="https://github.com/Monokaix" target="_blank" rel="noopener noreferrer" class="">@Monokaix</a>)</p>
</li>
<li class="">
<p>Security enhancements: <a href="https://github.com/volcano-sh/volcano/pull/3449" target="_blank" rel="noopener noreferrer" class="">#3449</a>.(<a href="https://github.com/lekaf974" target="_blank" rel="noopener noreferrer" class="">@lekaf974</a>)</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="contributors">Contributors<a href="https://volcano.sh/blog/Volcano-1.9.0-release#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h3>
<p>Volcano 1.9.0 is brought into being from hundreds of code commits from many contributors. Thanks for your contributions.</p>
<p><strong>Contributors on GitHub:</strong><br></p>
<table><tbody><tr><td>@daniel-hutao</td><td>@wuyueandrew</td><td>@googs1025</td></tr><tr><td>@7sunarni</td><td>@flyingfang</td><td>@LivingCcj</td></tr><tr><td>@guoqinwill</td><td>@panoswoo</td><td>@william-wang</td></tr><tr><td>@lekaf974</td><td>@yangqz</td><td>@lowang-bh</td></tr><tr><td>@loheagn</td><td>@hwdef</td><td>@archlitchi</td></tr><tr><td>@Lily922</td><td>@bibibox</td><td>@Monokaix</td></tr><tr><td>@belo4ya</td></tr></tbody></table>
<p><strong>Reference</strong></p>
<p>Release note: v1.9.0</p>
<p><a href="https://github.com/volcano-sh/volcano/releases/tag/v1.9.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.9.0</a></p>
<p>Branch：release-1.9</p>
<p><a href="https://github.com/volcano-sh/volcano/tree/release-1.9" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/tree/release-1.9</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="about-volcano">About Volcano<a href="https://volcano.sh/blog/Volcano-1.9.0-release#about-volcano" class="hash-link" aria-label="Direct link to About Volcano" title="Direct link to About Volcano" translate="no">​</a></h3>
<p>Volcano is designed for high-performance computing applications such as AI, big data, gene sequencing, and rendering, and supports mainstream general computing frameworks. More than 58,000 global developers joined us, among whom the in-house ones come from companies such as Huawei, AWS, Baidu, Tencent, JD, and Xiaohongshu. There are 3.8k+ Stars and 800+ Forks for the project. Volcano has been proven feasible for mass data computing and analytics, such as AI, big data, and gene sequencing. Supported frameworks include Spark, Flink, TensorFlow, PyTorch, Argo, MindSpore, Paddlepaddle, Kubeflow, MPI, Horovod, MXNet, KubeGene, and Ray. The ecosystem is thriving with more developers and use cases coming up.</p>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>scheduling</category>
            <category>gpu</category>
        </item>
        <item>
            <title><![CDATA[Meet Cloud Native Batch Computing with Volcano in AI & Big Data Scenarios]]></title>
            <link>https://volcano.sh/blog/Meet  Cloud Native Batch Computing with Volcano in AI &amp; Big Data Scenarios</link>
            <guid>https://volcano.sh/blog/Meet  Cloud Native Batch Computing with Volcano in AI &amp; Big Data Scenarios</guid>
            <pubDate>Fri, 08 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Join Volcano at KubeCon + CloudNativeCon Europe, 19-22 March in Paris!]]></description>
            <content:encoded><![CDATA[<p>Cloud native batch computing engine Volcano is designed for high-performance computing applications such as AI, big data, gene sequencing, and rendering, and supports mainstream general computing frameworks. More than 58,000 global developers joined us, among whom the in-house ones come from companies such as Huawei, AWS, Baidu, Tencent, JD, and Xiaohongshu. There are 3.7k+ Stars and 800+ Forks for the project. Volcano has been proven feasible for mass data computing and analytics, such as AI, big data, and gene sequencing. Supported frameworks include Spark, Flink, TensorFlow, PyTorch, Argo, MindSpore, Paddlepaddle, Kubeflow, MPI, Horovod, MXNet, KubeGene, and Ray. The ecosystem is thriving with more developers and use cases coming up.
<img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/volcano_logo-83ea15125984f1a4c07dd035e2a55e3e.svg" width="476" height="82" class="img_ev3q"></p>
<p>As the industry-first cloud native batch computing project，Volcano was Open-sourced at KubeCon Shanghai in June 2019, it became an official CNCF project in April 2020. In April 2022, Volcano was promoted to a CNCF incubating project. By now, more than 600 global developers have committed code to the project. The community is seeing growing popularity among developers, partners, and users.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="try-new-features-in-volcano-v182">Try new features in Volcano v1.8.2<a href="https://volcano.sh/blog/Meet%20%20Cloud%20Native%20Batch%20Computing%20with%20Volcano%20in%20AI%20&amp;%20Big%20Data%20Scenarios#try-new-features-in-volcano-v182" class="hash-link" aria-label="Direct link to Try new features in Volcano v1.8.2" title="Direct link to Try new features in Volcano v1.8.2" translate="no">​</a></h3>
<p>In Volcano’s Latest release v1.8.2 ，the following new features are added :</p>
<ul>
<li class="">
<p><strong>Support for vGPU scheduling and isolation</strong></p>
</li>
<li class="">
<p><strong>Support for vGPU and user-defined resource preemption capabilities</strong></p>
</li>
<li class="">
<p><strong>Addition of JobFlow workflow scheduling engine</strong></p>
</li>
<li class="">
<p><strong>Node load-aware scheduling and rescheduling support for diverse monitoring systems</strong></p>
</li>
<li class="">
<p><strong>Optimization of Volcano’s ability to schedule microservices</strong></p>
</li>
<li class="">
<p><strong>Optimization of Volcano charts packages for publishing and archiving</strong></p>
</li>
</ul>
<p>Try Volcano v1.8.2:<a href="https://github.com/volcano-sh/volcano/releases/tag/v1.8.2" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.8.2</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="join-volcano-community-co-construction-program">Join Volcano Community Co-construction Program<a href="https://volcano.sh/blog/Meet%20%20Cloud%20Native%20Batch%20Computing%20with%20Volcano%20in%20AI%20&amp;%20Big%20Data%20Scenarios#join-volcano-community-co-construction-program" class="hash-link" aria-label="Direct link to Join Volcano Community Co-construction Program" title="Direct link to Join Volcano Community Co-construction Program" translate="no">​</a></h3>
<p>Recently，More than 50 cases related to Volcano have been implemented. These cases are widely distributed in industries such as Internet, advanced manufacturing, finance, life sciences, scientific research, autonomous driving, and medicine. They cover massive data computing and analysis scenarios like AI, big data, genomic sequencing, and rendering. The main users are Tencent, Amazon, ING Bank, Baidu, Xiaohongshu, DiDi, 360, iQIYI, Leinao, Pengcheng Laboratory, Cruise, Li Auto, Unisound, Ximalaya, Vipshop, GrandOmics, BOSS Zhipin, and so on. With the expansion of the Volcano ecosystems, more and more users are highly willing to join the community.</p>
<p>The Volcano community launched the co-construction program to welcome users into the Volcano community, to accelerate cloud native progress, and to ensure a diverse Volcano ecosystem.</p>
<p>Through this program, you will have opportunities for technological guidance, promotion, as well as online and offline technological sharing. If your company or organization recognizes the value that Volcano has to offer, wants help using Volcano, or wants to exert their technological influence, consider joining the program.
For details about the requirements and benefits, see <a href="https://github.com/volcano-sh/community/blob/master/community-building-program.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/community/blob/master/community-building-program.md</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="join-volcano-at-kubecon--cloudnativecon-europe-19-22-march-in-paris">Join Volcano at KubeCon + CloudNativeCon Europe, 19-22 March in Paris!<a href="https://volcano.sh/blog/Meet%20%20Cloud%20Native%20Batch%20Computing%20with%20Volcano%20in%20AI%20&amp;%20Big%20Data%20Scenarios#join-volcano-at-kubecon--cloudnativecon-europe-19-22-march-in-paris" class="hash-link" aria-label="Direct link to Join Volcano at KubeCon + CloudNativeCon Europe, 19-22 March in Paris!" title="Direct link to Join Volcano at KubeCon + CloudNativeCon Europe, 19-22 March in Paris!" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/2024-paris-8d718b79ff632af5d21215efe91350cc.png" width="820" height="312" class="img_ev3q">
Volcano will participate in several activities, including:</p>
<ul>
<li class="">Speech Schedule<!-- -->
<ul>
<li class="">March 19 at 14:05 - 14:30 am CET<!-- -->:Level<!-- --> 7.3 | Room S03
Volcano Maintainer Kevin Wang, Huawei， presents“Efficient Multi-Cluster GPU Workload Management with Karmada and Volcano”</li>
<li class="">March 22 at 11:55 - 12:30 am CET：Pavilion 7 | Level 7.3 | N03
Volcano Maintainer William Wang, Huawei &amp; Mengxuan Li, 4paradigm presents “Cloud Native Batch Computing with Volcano: Updates and Future ”</li>
<li class="">March 22 at 16:00 - 16:35 am CET：Pavilion 7 | Level 7.3 | Paris Room
Volcano Maintainer William Wang &amp; Hongcai Ren, Huawei  presents “Maximizing GPU Utilization Over Multi-Cluster: Challenges and Solutions for Cloud-Native AI Platform”</li>
</ul>
</li>
<li class="">Booth Hours:<!-- -->
<ul>
<li class="">March 20-22 PM(W, Th, F)   <!-- -->:Stop<!-- --> by CNCF Project Pavilion Booth PP18-B at KubeCon +CloudNativeCon Europe to speak with an expert or see a demo!</li>
</ul>
</li>
</ul>]]></content:encoded>
            <category>kubecon</category>
            <category>batch-computing</category>
            <category>ai</category>
            <category>big-data</category>
            <category>volcano</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.8.2 Available Now]]></title>
            <link>https://volcano.sh/blog/Volcano-1.8.2-release</link>
            <guid>https://volcano.sh/blog/Volcano-1.8.2-release</guid>
            <pubDate>Wed, 31 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[New features: Support for vGPU scheduling and isolation, support for vGPU and user-defined resource preemption capabilities, addition of JobFlow workflow scheduling engine, node load-aware scheduling and rescheduling support for diverse monitoring systems, optimization of Volcano's ability to schedule microservices, optimization of Volcano charts packages for publishing and archiving, etc.]]></description>
            <content:encoded><![CDATA[<p>On January 9, 2024, UTC+8, Volcano version v1.8.2  was officially released. This version added the following new features:</p>
<ul>
<li class="">
<p><strong>Support for vGPU scheduling and isolation</strong></p>
</li>
<li class="">
<p><strong>Support for vGPU and user-defined resource preemption capabilities</strong></p>
</li>
<li class="">
<p><strong>Addition of JobFlow workflow scheduling engine</strong></p>
</li>
<li class="">
<p><strong>Node load-aware scheduling and rescheduling support for diverse monitoring systems</strong></p>
</li>
<li class="">
<p><strong>Optimization of Volcano's ability to schedule microservices</strong></p>
</li>
<li class="">
<p><strong>Optimization of Volcano charts packages for publishing and archiving</strong></p>
</li>
</ul>
<!-- -->
<p>Volcano is the industry-first cloud native batch computing project. Open-sourced at KubeCon Shanghai in June 2019, it became an official CNCF project in April 2020. In April 2022, Volcano was promoted to a CNCF incubating project. By now, more than 600 global developers have committed code to the project. The community is seeing growing popularity among developers, partners, and users.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="key-features">Key Features<a href="https://volcano.sh/blog/Volcano-1.8.2-release#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="support-for-vgpu-scheduling-and-isolation">Support for vGPU scheduling and isolation<a href="https://volcano.sh/blog/Volcano-1.8.2-release#support-for-vgpu-scheduling-and-isolation" class="hash-link" aria-label="Direct link to Support for vGPU scheduling and isolation" title="Direct link to Support for vGPU scheduling and isolation" translate="no">​</a></h4>
<p>Since ChatGPT became popular, the research and development of AI big models has been endless, and different kinds of AI big models have been launched one after another. Due to its huge training tasks requiring a large amount of arithmetic power, the supply of arithmetic power with GPU as the core has become the key infrastructure for the development of the big model industry. In the actual use scenario, users have low resource utilization and inflexible resource allocation for GPU resources, and must purchase a large number of redundant heterogeneous arithmetic to meet the business needs, while the heterogeneous arithmetic itself is costly, which brings a great burden to the development of enterprises.
Starting from version 1.8, Volcano provides a common abstraction framework for shareable devices (GPUs, NPUs, FPGAs...) Volcano provides an abstract general framework for shareable devices (GPU, NPU, FPGA...), based on which developers can customize multiple types of shared devices; currently, Volcano has implemented GPU virtualization features based on this framework, which supports GPU device multiplexing, resource isolation and other capabilities, as follows:</p>
<ul>
<li class="">
<p>GPU Sharing: Each task can request to use part of the resources of a GPU card, and GPU cards can be shared among multiple tasks.</p>
</li>
<li class="">
<p>Device Video Memory Control: GPUs can be allocated according to memory (e.g., 3000M) or proportionally (e.g., 50%) to achieve GPU virtualization resource isolation capability.</p>
</li>
</ul>
<p>For more information about vGPU, please refer to:</p>
<ul>
<li class="">
<p>How to use the vGPU feature:</p>
<p>/docs/KeyFeatures/GPUVirtualization</p>
</li>
<li class="">
<p>How to add new heterogeneous arithmetic sharing strategies:</p>
<p><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/device-sharing.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/device-sharing.md</a></p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="support-for-vgpu-and-user-defined-resource-preemption-capabilities">Support for vGPU and user-defined resource preemption capabilities<a href="https://volcano.sh/blog/Volcano-1.8.2-release#support-for-vgpu-and-user-defined-resource-preemption-capabilities" class="hash-link" aria-label="Direct link to Support for vGPU and user-defined resource preemption capabilities" title="Direct link to Support for vGPU and user-defined resource preemption capabilities" translate="no">​</a></h4>
<p>Currently, Volcano supports CPU, Memory and other basic resources preemption, but does not yet support preemption of GPU resources and resources that users develop scheduling plug-ins based on the Volcano framework and manage on their own (e.g., NPU, network resources, etc.).
In version 1.8, Volcano restructured the node filtering related processing (PredicateFn callback function), and added the Status type in the return result, which is used to identify whether the current node meets the conditions of job issuance under the scenarios of scheduling, preemption, etc. The GPU preemption function has been released based on the optimized framework, and the user can use the scheduling plug-ins based on the secondary development of Volcano to combine with the business scenarios. The scheduling plug-in can be adapted and upgraded according to the business scenarios.
In version 1.8.2, Volcano supports the preemption of the number of node CSIs and the number of node Pods.</p>
<p>For more information on supporting extended resource preemption, please refer to:</p>
<p><a href="https://github.com/volcano-sh/volcano/pull/2916" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/pull/2916</a></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="addition-of-jobflow-workflow-scheduling-engine">Addition of JobFlow workflow scheduling engine<a href="https://volcano.sh/blog/Volcano-1.8.2-release#addition-of-jobflow-workflow-scheduling-engine" class="hash-link" aria-label="Direct link to Addition of JobFlow workflow scheduling engine" title="Direct link to Addition of JobFlow workflow scheduling engine" translate="no">​</a></h4>
<p>JobFlow orchestration engine is widely used in high-performance computing, AI biomedical, image processing and beauty, game AGI, scientific computing and other scenarios, to help users simplify the management of multiple tasks in parallel and dependencies, and significantly improve the overall computing efficiency.
JobFlow is a lightweight task flow orchestration engine that focuses on Volcano's job orchestration, providing Volcano with job probes, job completion dependencies, job failure rate tolerance and other diverse job dependency types, and supporting complex process control primitives, with the following specific capabilities:</p>
<ul>
<li class="">
<p>Supports large-scale job management and complex task flow scheduling.</p>
</li>
<li class="">
<p>Supports real-time query to all related jobs and task progress.</p>
</li>
<li class="">
<p>Supports automatic operation of jobs and timed startup to release labor costs.</p>
</li>
<li class="">
<p>Support for different tasks can set up a variety of action strategies, when the task meets specific conditions can trigger the corresponding action, such as timeout retry, node failure drift, etc.</p>
</li>
</ul>
<p>A demonstration of a JobFlow task running is shown below:</p>
<p><img decoding="async" loading="lazy" alt="JobFlow Demo" src="https://volcano.sh/assets/images/jobflow-cc09193ef1bdae39daea04f4128f6b0d.gif" width="1079" height="607" class="img_ev3q"></p>
<p>For more information about JobFlow, please refer to:</p>
<p><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/jobflow/README.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/jobflow/README.md</a></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="node-load-aware-scheduling-and-rescheduling-support-for-diverse-monitoring-systems">Node load-aware scheduling and rescheduling support for diverse monitoring systems<a href="https://volcano.sh/blog/Volcano-1.8.2-release#node-load-aware-scheduling-and-rescheduling-support-for-diverse-monitoring-systems" class="hash-link" aria-label="Direct link to Node load-aware scheduling and rescheduling support for diverse monitoring systems" title="Direct link to Node load-aware scheduling and rescheduling support for diverse monitoring systems" translate="no">​</a></h4>
<p>The state of a Kubernetes cluster changes in real time as tasks are created and finished. In some scenarios (e.g., adding or removing nodes, changing the affinity of Pods and Nodes, dynamic changes in the job lifecycle, etc.), there are problems such as unbalanced resource utilization among cluster nodes and node performance bottlenecks, etc. At this time, scheduling and re-scheduling based on the real load can help us solve the above problems.
Before version 1.8 of Volcano, the real load scheduling and rescheduling metrics acquisition only supports Prometheus, from version 1.8 onwards, Volcano optimizes the monitoring metrics acquisition framework, adds support for ElasticSearch monitoring system, and supports smooth docking of more types of monitoring systems with less adaptation workload.</p>
<p>For more information on supporting multiple monitoring systems, please refer to:</p>
<ul>
<li class="">
<p>Node load-aware based scheduling:</p>
<p><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/usage-based-scheduling.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/usage-based-scheduling.md</a></p>
</li>
<li class="">
<p>Re-scheduling:</p>
<p><a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/rescheduling.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/rescheduling.md</a></p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="optimization-of-volcanos-ability-to-schedule-microservices">Optimization of Volcano's ability to schedule microservices<a href="https://volcano.sh/blog/Volcano-1.8.2-release#optimization-of-volcanos-ability-to-schedule-microservices" class="hash-link" aria-label="Direct link to Optimization of Volcano's ability to schedule microservices" title="Direct link to Optimization of Volcano's ability to schedule microservices" translate="no">​</a></h4>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="add-kubernetes-default-scheduler-plugin-switch">Add Kubernetes default scheduler plugin switch<a href="https://volcano.sh/blog/Volcano-1.8.2-release#add-kubernetes-default-scheduler-plugin-switch" class="hash-link" aria-label="Direct link to Add Kubernetes default scheduler plugin switch" title="Direct link to Add Kubernetes default scheduler plugin switch" translate="no">​</a></h5>
<p>Volcano is a unified converged scheduling system that not only supports AI, BigData and other computation jobs, but also supports microservice workloads, and is compatible with PodTopologySpread, VolumeZone, VolumeLimits, NodeAffinity, and other scheduling plug-ins that are part of the Kubernetes default scheduler, PodAffinity, NodeAffinity, PodAffinity, and other scheduling plugins, and the default scheduling plugin capabilities of Kubernetes are enabled by default in Volcano.
Since Volcano 1.8, Kubernetes default scheduling plug-ins can be turned on and off freely by means of configuration files, and all of them are turned on by default. If you choose to turn off some of the plug-ins, for example, turn off the PodTopologySpread and VolumeZone plug-ins, you can set the corresponding value in the predicate plug-in to If you want to disable some plug-ins, such as PodTopologySpread and VolumeZone plug-ins, you can set the corresponding value in the predicate plug-in to false:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">actions</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"allocate, backfill, preempt"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">plugins</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> priority</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> conformance</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">plugins</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> drf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> predicates</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">arguments</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">predicate.VolumeZoneEnable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">predicate.PodTopologySpreadEnable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> proportion</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> nodeorder</span><br></span></code></pre></div></div>
<p>For more information, please refer to:</p>
<p><a href="https://github.com/volcano-sh/volcano/issues/2748" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/issues/2748</a></p>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="enhanced-cluster-autoscaling-compatibility">Enhanced Cluster Autoscaling Compatibility<a href="https://volcano.sh/blog/Volcano-1.8.2-release#enhanced-cluster-autoscaling-compatibility" class="hash-link" aria-label="Direct link to Enhanced Cluster Autoscaling Compatibility" title="Direct link to Enhanced Cluster Autoscaling Compatibility" translate="no">​</a></h5>
<p>In the Kubernetes platform, Volcano is increasingly used as a scheduler for general-purpose services, in addition to batch computing services.Node Autoscaler is one of the core features of Kubernetes, and it plays an important role in facing the surge in user traffic and saving operational costs. Volcano optimizes job scheduling and other related logic to enhance compatibility and interaction with ClusterAutoscaler, mainly in the following two areas:
Timely triggering of capacity expansion for pods entering pipeline state during scheduling phase
Candidate nodes are scored in gradients to reduce the impact of cluster terminating pods on the scheduling load, avoiding pods entering invalid pipeline states, which can lead to mis-expansion of the cluster.</p>
<p>For more information, please refer to:</p>
<p><a href="https://github.com/volcano-sh/volcano/issues/3000" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/issues/3000</a>
<a href="https://github.com/volcano-sh/volcano/issues/2782" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/issues/2782</a></p>
<h5 class="anchor anchorTargetStickyNavbar_zFqj" id="fine-grained-management-of-node-resources-for-increased-resilience">Fine-grained management of Node resources for increased resilience<a href="https://volcano.sh/blog/Volcano-1.8.2-release#fine-grained-management-of-node-resources-for-increased-resilience" class="hash-link" aria-label="Direct link to Fine-grained management of Node resources for increased resilience" title="Direct link to Fine-grained management of Node resources for increased resilience" translate="no">​</a></h5>
<p>When a node's total resources are less than the allocated resources due to some reasons such as device-plugin reporting anomalies, Volcano considers that the node's data is inconsistent, isolates the node, and stops scheduling any new workloads to the node. In version 1.8, node resource management is refined, for example: when the total GPU resource capacity of a node is less than the amount of allocated resources, pods applying for GPU resources are prohibited from scheduling to that node, while jobs applying for non-GPU resources will still be allowed to schedule to that node normally.</p>
<p>For more information, please refer to:</p>
<p><a href="https://github.com/volcano-sh/volcano/issues/2999" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/issues/2999</a></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="optimization-of-volcano-charts-packages-for-publishing-and-archiving">Optimization of Volcano charts packages for publishing and archiving<a href="https://volcano.sh/blog/Volcano-1.8.2-release#optimization-of-volcano-charts-packages-for-publishing-and-archiving" class="hash-link" aria-label="Direct link to Optimization of Volcano charts packages for publishing and archiving" title="Direct link to Optimization of Volcano charts packages for publishing and archiving" translate="no">​</a></h4>
<p>As Volcano is used in more and more production and cloud environments, it is important to have a clean and standardized installation process. Starting from version 1.8, Volcano optimizes the charts package release archive action, standardizes the installation and usage process, and completes the migration of historical versions (v1.6, v1.7) to the new helm repository in the following ways:</p>
<ul>
<li class="">Add Volcano charts bin address</li>
</ul>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo add volcano-sh https://volcano-sh.github.io/helm-charts</span><br></span></code></pre></div></div>
<ul>
<li class="">Search for all installable versions of Volcano</li>
</ul>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm search repo volcano -l</span><br></span></code></pre></div></div>
<ul>
<li class="">Install the latest version of Volcano</li>
</ul>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm install volcano volcano-sh/volcano -n volcano-system --create-namespace</span><br></span></code></pre></div></div>
<ul>
<li class="">Install the specified version of Volcano, e.g. 1.8.2.</li>
</ul>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm install volcano volcano-sh/volcano -n volcano-system --create-namespace --version 1.8.2</span><br></span></code></pre></div></div>
<p>For more information on the Volcano charts package, please refer to:</p>
<p><a href="https://github.com/volcano-sh/helm-charts" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/helm-charts</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="contributors">Contributors<a href="https://volcano.sh/blog/Volcano-1.8.2-release#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h3>
<p>Volcano 1.8.2 is brought into being from hundreds of code commits from 33 contributors. Thanks for your contributions.</p>
<p><strong>Contributors on GitHub:</strong><br></p>
<table><tbody><tr><td>@shaobo76</td><td>@william-wang</td><td>@gengwg</td></tr><tr><td>@kingeasternsun</td><td>@Aakcht</td><td>@waiterQ</td></tr><tr><td>@Shoothzj</td><td>@hwdef</td><td>@halegreen</td></tr><tr><td>@wulixuan</td><td>@Monokaix</td><td>@medicharlachiranjeevi</td></tr><tr><td>@WulixuanS</td><td>@rayoluo</td><td>@lowang-bh</td></tr><tr><td>@gj199575</td><td>@noyoshi</td><td>@Tongruizhe</td></tr><tr><td>@jinzhejz</td><td>@Cdayz</td><td>@Mufengzhe</td></tr><tr><td>@renwenlong-github</td><td>@wangyang0616</td><td>@jiamin13579</td></tr><tr><td>@zbbkeepgoing</td><td>@jiangkaihua</td><td>@z2Zhang</td></tr><tr><td>@archlitchi</td><td>@lixin963</td><td>@xiao-jay</td></tr><tr><td>@Yanping-io</td><td>@Lily922</td><td>@shusley244</td></tr></tbody></table>
<p><strong>Reference</strong></p>
<p>Release note: v1.8.0</p>
<p><a href="https://github.com/volcano-sh/volcano/releases/tag/v1.8.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.8.0</a></p>
<p>Release note: v1.8.1</p>
<p><a href="https://github.com/volcano-sh/volcano/releases/tag/v1.8.1" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.8.1</a></p>
<p>Release note: v1.8.2</p>
<p><a href="https://github.com/volcano-sh/volcano/releases/tag/v1.8.2" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/releases/tag/v1.8.2</a></p>
<p>Branch：release-1.8</p>
<p><a href="https://github.com/volcano-sh/volcano/tree/release-1.8" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/tree/release-1.8</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="about-volcano">About Volcano<a href="https://volcano.sh/blog/Volcano-1.8.2-release#about-volcano" class="hash-link" aria-label="Direct link to About Volcano" title="Direct link to About Volcano" translate="no">​</a></h3>
<p>Volcano is designed for high-performance computing applications such as AI, big data, gene sequencing, and rendering, and supports mainstream general computing frameworks. More than 58,000 global developers joined us, among whom the in-house ones come from companies such as Huawei, AWS, Baidu, Tencent, JD, and Xiaohongshu. There are 3.5k+ Stars and 800+ Forks for the project. Volcano has been proven feasible for mass data computing and analytics, such as AI, big data, and gene sequencing. Supported frameworks include Spark, Flink, TensorFlow, PyTorch, Argo, MindSpore, Paddlepaddle, Kubeflow, MPI, Horovod, MXNet, KubeGene, and Ray. The ecosystem is thriving with more developers and use cases coming up.</p>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>vgpu</category>
            <category>jobflow</category>
        </item>
        <item>
            <title><![CDATA[Volcano Community Co-construction Program]]></title>
            <link>https://volcano.sh/blog/Volcano-community-co-construction-program</link>
            <guid>https://volcano.sh/blog/Volcano-community-co-construction-program</guid>
            <pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Huawei Cloud Joins Hands with 11 Partners to Launch Volcano Community Co-construction Program]]></description>
            <content:encoded><![CDATA[<p>As artificial intelligence (AI) technologies advance and large language models (LLMs) grow more popular, the demand for AI compute has been booming. This has generated huge demand for high-performance scheduling for the AI and for hardware like AI chips.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/volcano_logo-83ea15125984f1a4c07dd035e2a55e3e.svg" width="476" height="82" class="img_ev3q"></p>
<p>Volcano is the first cloud native batch computing project in the industry. In 2019, it was donated by Huawei Cloud to the Cloud Native Computing Foundation (CNCF) and became CNCF's first and only batch computing incubator project. Volcano provides unified high-performance job management for AI, big data, and high-performance computing (HPC) and supports a variety of high-level scheduling policies, including online and offline scheduling, AI elastic training scheduling, service level agreement (SLA), topology-based scheduling, fairness, load aware scheduling, rescheduling, preemption, and reclamation. It offers unified lifecycle management, job dependency management, and task dependency management for workloads like Spark, Flink, PyTorch, MPI, and TensorFlow. In terms of fine-grained resource management, Volcano supports min-max queue resource management, queue resource reservation, and dynamic resource sharing for multi-tenant resource leasing or preemption. Additionally, Volcano schedules heterogeneous resources including x86, Arm, GPUs, and Ascend, and provides refined scheduling of CPUs and GPUs. Users can allocate resources based on their requirements and significantly improve cost-effectiveness using Volcano.</p>
<p>The Volcano community has attracted <strong>more than 58,000 developers worldwide</strong> and won more than <strong>3,200 Stars and over 730 Forks</strong> on GitHub. The contributors include Huawei, AWS, IBM, Baidu, Tencent, JD, Xiaohongshu, 4Paradigm, BoCloud, DaoCloud, Ruitian Capital, Qiniu Cloud, Yinqing Technology, ByteDance, Kuaishou, Unisound, Infosys, Visa, NetEase, Red Hat, Kingsoft Cloud, Inspur, ZTE, Oracle, and iQIYI.</p>
<p><strong>More than 50 cases</strong> related to Volcano have been implemented. These cases are widely distributed in industries such as Internet, advanced manufacturing, finance, life sciences, scientific research, autonomous driving, and medicine. They cover massive data computing and analysis scenarios like AI, big data, genomic sequencing, and rendering. The main users are Tencent, Amazon, ING Bank, Baidu, Xiaohongshu, DiDi, 360, iQIYI, Leinao, Pengcheng Laboratory, Cruise, Li Auto, Unisound, Ximalaya, Vipshop, GrandOmics, BOSS Zhipin, and so on. <strong>With the expansion of the Volcano ecosystems, more and more users are highly willing to join the community.</strong> <strong>Huawei Cloud has worked with 11 partners to launch the Volcano community co-construction program and cultivate a more prosperous Volcano ecosystem.</strong></p>
<p>According to <strong>Deng Mingkun, General Manager of Huawei Cloud Open Source Services</strong>, "The cloud native batch computing project, Volcano, has been widely adopted in domains such as AI, big data, genomic sequencing, rendering, transcoding, multimedia, and finance, since June 2019. A group of industry users not only actively promote the implementation of Volcano in production environments, but also contribute a lot to the Volcano community based on their own experience. Huawei Cloud intends to work with partners to launch the Volcano community co-construction program to create a more prosperous Volcano ecosystem and help more enterprises accelerate their cloud native progress."</p>
<p><strong>The first batch of members to join the program are Baidu, BoCloud, 4Paradigm, Vipshop, Ruitian Capital, Leinao, Pinlan, 360, NetEase Shufan, Ximalaya, and BOSS Zhipin.</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/co-construction-1-9c7e296e9e7bdc57b476ed973e3f63f1.jpg" width="711" height="496" class="img_ev3q"></p>
<p>According to <strong>Zhou Ti, the tech lead of Baidu's PaddlePaddle open source ecosystem</strong>, "PaddlePaddle and Volcano jointly released the PaddlePaddle on Volcano solution to improve PaddlePaddle's computing efficiency. As a platform for high-performance computing, Volcano makes up for Kubernetes' lack of basic capabilities in machine learning, deep learning, HPC, and big data computing. Additionally, Volcano enhances the batch creation and lifecycle management of computing tasks, fair-share scheduling and other aspects on the basis of the native Kubernetes capability. These features meet PaddlePaddle's basic requirements."</p>
<p><strong>Zhao Anquan, General Manager of BoCloud PaaS</strong>, said, "BoCloud's HPC solution, based on CNCF's Volcano scheduling engine, a product well respected by many customers, provides a high-concurrency computing platform that runs AI, big data, and simulation calculation applications, resolving many pain points in the industry. We also donated the industry's first HPC job orchestration component JobFlow to the Volcano community so that users can better apply cloud native technologies."</p>
<p><strong>Li Mengxuan, head of heterogeneous computing virtualization in 4Paradigm</strong>, said, "The Volcano project enables us to solve the pain points encountered during the implementation of cloud native technologies in AI projects at a low cost, especially in terms of device reuse. The use of Volcano will significantly improve the cluster resource utilization. 4Paradigm will continuously contribute code to the community to build Volcano into a reuse platform that supports all mainstream forms of heterogeneous compute such as NPUs, GPUs, MLUs, and DCUs."</p>
<p><strong>He Yingpeng, head of Vipshop's AI cloud platform</strong>, said, "As a top e-commerce platform in China, Vipshop faces problems associated with rapid growth, rapid product iteration, and maintaining a diverse product portfolio. A Volcano-based AI training platform with advanced scheduling policies like queue and gang scheduling can support scheduling of more than 100,000 vCPUs, accelerating Vipshop's service innovation."</p>
<p><strong>Chang Feng, head of the Leinao R&amp;D Center</strong>, said, "Volcano is one of the first open source cloud native projects for batch computing. It has dynamically configurable advanced scheduling policies and excellent resource management capabilities, which can address multiple challenges, like job scheduling, lifecycle management, and heterogeneous hardware support in AI scenarios. During the implementation, we expanded Volcano's capabilities to effectively improve our system stability and resource utilization."</p>
<p><strong>Peng Jingtian, co-founder and CTO of Pinlan</strong>, said, "CNCF's Volcano project has been successfully applied to our cloud native intelligent building design platform — AlphaDraw. Volcano provides AlphaDraw's algorithm services with batch processing and auto scaling capabilities in scenarios like AI-based model flipping of Computer Aided Design (CAD) two-dimensional drawings and intelligent design of three-dimensional building models, greatly improving Kubernetes cluster resource utilization and optimizing workload performance. As the first member of the Volcano community co-construction program, Pinlan continuously contributes best practices for Cloud+AI in the architectural design field to the community. We expect AlphaDraw and Volcano to develop together to continuously provide more excellent products and solutions for intelligent cloud computing and the cloud native progress of the industry in the future."</p>
<p><strong>Wang Xinyong, a cloud native technology expert from NetEase Shufan</strong>, said, "Volcano provides many useful supplements to Kubernetes' native capabilities, enabling it to better orchestrate batch processing tasks like AI training and big data computing. Volcano's excellent task abstraction and management capabilities, multiple scenario-based scheduling mechanisms, and out-of-the-box integration with multiple common open source computing frameworks enable us to focus more on providing business value for users without spending a lot of efforts on reinventing systems."</p>
<p><strong>The owner of the Ruitian Capital Infrastructure Team</strong> said, "Volcano supplements native Kubernetes capabilities such as batch task scheduling, resource sharing, and fair scheduling policies, and provides unified interfaces to reduce learning and maintenance costs. In the production environment, Volcano works with our proprietary level-2 scheduling to meet the requirements of tens of thousands of tasks per day, greatly improving the efficiency of policy research."</p>
<p><strong>The leader of the 360 container team</strong> said, "Volcano makes up for Kubernetes' lack of basic scheduling capabilities in machine learning and big data computing tasks. It provides various plug-ins to schedule tasks in different scenarios, greatly improving the cluster utilization. Additionally, Volcano supports most mainstream computing frameworks like Spark, TensorFlow, and Flink. The overall design of Volcano follows the design and mechanisms of Kubernetes, which reduces our learning costs."</p>
<p><strong>The head of the Ximalaya AI cloud team</strong> said, "Volcano enhances Kubernetes' capabilities like batch task scheduling, resource sharing, and fair scheduling; and provides elastic scheduling. As a basic component for resource scheduling of the machine learning platform, Volcano improves GPU utilization in the production environment.</p>
<p><strong>The owner of BOSS Zhipin AI fundamental platform team</strong> said, "BOSS Zhipin builds infrastructures based on Volcano in AI and big data computing scenarios. Volcano's powerful batch processing and robust scheduling policies are very convenient for us. They help support complex service scenarios and greatly improve BOSS Zhipin's cluster resource utilization and stability. With the support of its robust ecosystem and the community, Volcano has greatly helped our technological and business development."</p>
<p>We look forward to working with more organizations to build a more inclusive Volcano community.</p>
<p><strong>Introduction to the Volcano Community Co-construction Program</strong></p>
<p>The Volcano community launched the co-construction program to more quickly include users into the Volcano community, to accelerate cloud native progress, and to ensure a diverse Volcano ecosystem.</p>
<p>Through this program, you will have opportunities for technological guidance, promotion, as well as online and offline technological sharing. If your company or organization recognizes the value that Volcano has to offer, wants help using Volcano, or wants to exert their technological influence, consider joining the program.</p>
<p>For details about the requirements and benefits, see <a href="https://github.com/volcano-sh/community/blob/master/community-building-program.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/community/blob/master/community-building-program.md</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="application-to-the-program">Application to the program<a href="https://volcano.sh/blog/Volcano-community-co-construction-program#application-to-the-program" class="hash-link" aria-label="Direct link to Application to the program" title="Direct link to Application to the program" translate="no">​</a></h2>
<ul>
<li class="">Scan the QR code or click to read the full text and fill in the application form.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/co-construction-2-980d8bc69730f4c0b8080b77165c5baf.jpg" width="714" height="707" class="img_ev3q"></p>
<ul>
<li class="">The result will be sent by email. Please wait.</li>
</ul>
]]></content:encoded>
            <category>community</category>
            <category>co-construction</category>
            <category>partners</category>
            <category>volcano</category>
            <category>huawei</category>
        </item>
        <item>
            <title><![CDATA[Volcano 1.7.0 Available Now]]></title>
            <link>https://volcano.sh/blog/Volcano-1.7.0-release-en</link>
            <guid>https://volcano.sh/blog/Volcano-1.7.0-release-en</guid>
            <pubDate>Thu, 12 Jan 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[New features: enhanced plugin for PyTorch Jobs, Ray on Volcano, enhanced scheduling for general Kubernetes services, multi-architecture images of Volcano, and optimized queue status info]]></description>
            <content:encoded><![CDATA[<p></p>
<p>Volcano 1.7.0 is now available with the following new features:</p>
<ul>
<li class=""><strong>enhanced plugin for PyTorch Jobs</strong></li>
<li class=""><strong>Ray on Volcano</strong></li>
<li class=""><strong>enhanced scheduling for general Kubernetes services</strong></li>
<li class=""><strong>multi-architecture images of Volcano</strong></li>
<li class=""><strong>optimized queue status info</strong></li>
</ul>
<p><img decoding="async" loading="lazy" alt="volcano_logo.png" src="https://volcano.sh/assets/images/volcano_logo-83ea15125984f1a4c07dd035e2a55e3e.svg" width="476" height="82" class="img_ev3q"></p>
<p>Volcano is the industry-first cloud native batch computing project. Open-sourced at KubeCon Shanghai in June 2019, it became an official CNCF project in April 2020. In April 2022, Volcano was promoted to a CNCF incubating project. By now, more than 490 global developers have committed code to the project. The community is seeing growing popularity among developers, partners, and users.</p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="key-features">Key Features<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="1-enhanced-plugin-for-pytorch-jobs">1. Enhanced Plugin for PyTorch Jobs<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#1-enhanced-plugin-for-pytorch-jobs" class="hash-link" aria-label="Direct link to 1. Enhanced Plugin for PyTorch Jobs" title="Direct link to 1. Enhanced Plugin for PyTorch Jobs" translate="no">​</a></h4>
<p>As one of the most popular AI frameworks, PyTorch has been widely used in deep learning fields such as computer vision and natural language processing. More and more users turn to Kubernetes to run PyTorch in containers for higher resource utilization and parallel processing efficiency.</p>
<p>Volcano 1.7 enhanced the plugin for PyTorch Jobs, freeing you from the manual configuration of container ports, MASTER_ADDR, MASTER_PORT, WORLD_SIZE, and RANK environment variables.</p>
<p>Other enhanced plugins include those for TensorFlow, MPI, and PyTorch Jobs. They are designed to help you run computing jobs on desired training frameworks with ease.</p>
<p>Volcano also provides an extended development framework for you to tailor Job plugins to your needs.</p>
<p>Design Documentation: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md#pytorch-plugin" target="_blank" rel="noopener noreferrer" class="">Pytorch-plugin</a><br>
User Guide: <a class="" href="https://volcano.sh/docs/UserGuide/user_guide_how_to_use_pytorch_plugin">Pytorch Plugin User Guide</a><br>
Issue：<a href="https://github.com/volcano-sh/volcano/issues/2292" target="_blank" rel="noopener noreferrer" class="">#2292</a><br></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="2-ray-on-volcano">2. Ray on Volcano<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#2-ray-on-volcano" class="hash-link" aria-label="Direct link to 2. Ray on Volcano" title="Direct link to 2. Ray on Volcano" translate="no">​</a></h4>
<p>Ray is a unified framework for extending AI and Python applications. It can run on any machine, cluster, cloud, and Kubernetes cluster. Its community and ecosystem are growing steadily.</p>
<p>As machine learning workloads are hosting computing jobs at a density higher than ever before, single-node environments are failing in providing enough resources for training tasks. Here's where Ray comes in, which seamlessly coordinates resources of the entire cluster, instead of a single node, to run the same set of code. Ray is designed for common scenarios and any type of workloads.</p>
<p>For users running multiple types of Jobs, Volcano partners with Ray to provide high-performance batch scheduling. Ray on Volcano has been released in <a href="https://github.com/ray-project/kuberay/releases/tag/v0.4.0" target="_blank" rel="noopener noreferrer" class="">KubeRay v0.4</a>.</p>
<p>User Guide: <a href="https://ray-project.github.io/kuberay/guidance/volcano-integration/#kuberay-integration-with-volcano" target="_blank" rel="noopener noreferrer" class="">KubeRay-integration-with-Volcano</a><br>
Issue: <a href="https://github.com/volcano-sh/volcano/issues/2429" target="_blank" rel="noopener noreferrer" class="">#2429</a>，  <a href="https://github.com/ray-project/kuberay/issues/213" target="_blank" rel="noopener noreferrer" class="">#213</a><br></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="3-enhance-scheduling-for-general-kubernetes-services">3. Enhance Scheduling for General Kubernetes Services<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#3-enhance-scheduling-for-general-kubernetes-services" class="hash-link" aria-label="Direct link to 3. Enhance Scheduling for General Kubernetes Services" title="Direct link to 3. Enhance Scheduling for General Kubernetes Services" translate="no">​</a></h4>
<p>Schedulers have their own advantages according to the use case. For example, in batch computing, Volcano provides more scheduling policies and capabilities. In general scheduling, the Kubernetes default scheduler is more balanced. However, it's often the case that a user runs multiple types of tasks in the same cluster. When there are both batch computing and general tasks, scheduling can be a challenge.</p>
<p>Starting from version 1.7, Volcano becomes fully compatible with the Kubernetes default scheduler to schedule and manage long-running services. Now you can use Volcano to centrally schedule both batch computing and general workloads.</p>
<p><strong>Enhancements:</strong></p>
<ul><li>Supports multiple types of schedulers for Volcano scheduler and webhook.</li><li>Supports NodeVolumeLimits plugin.</li><li>Supports VolumeZone plugin.</li><li>Supports PodTopologySpread plugin.</li><li>Supports SelectorSpread plugin.</li></ul>
<p>Support for Kubernetes 1.25 is also available in Volcano 1.7.</p>
<p>Issue: <a href="https://github.com/volcano-sh/volcano/issues/2394" target="_blank" rel="noopener noreferrer" class="">#2394</a>，<a href="https://github.com/volcano-sh/volcano/issues/2510" target="_blank" rel="noopener noreferrer" class="">#2510</a></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="4-multi-architecture-images">4. Multi-architecture Images<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#4-multi-architecture-images" class="hash-link" aria-label="Direct link to 4. Multi-architecture Images" title="Direct link to 4. Multi-architecture Images" translate="no">​</a></h4>
<p>You can now compile multi-architecture Volcano images by a few clicks through cross compilation. For example, you can compile the base images of the amd64 and arm64 architectures on an amd64 host and push the images to the image repository. During installation and deployment, the system automatically selects a proper image based on the host architecture for you, more user-friendly than before.</p>
<p>User Guide: <a href="https://github.com/volcano-sh/volcano/blob/master/docs/development/development.md#building-docker-images" target="_blank" rel="noopener noreferrer" class="">building-docker-images</a><br>
Issue: <a href="https://github.com/volcano-sh/volcano/pull/2435" target="_blank" rel="noopener noreferrer" class="">#2435</a><br></p>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="5-optimized-queue-status-info">5. Optimized Queue Status Info<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#5-optimized-queue-status-info" class="hash-link" aria-label="Direct link to 5. Optimized Queue Status Info" title="Direct link to 5. Optimized Queue Status Info" translate="no">​</a></h4>
<p>Volcano can now collect statistics on allocated resources in real time to the queue status info, which eases dynamic resource adjustment and puts cluster resources into good use.</p>
<p>Volcano allocates and manages cluster resources by queues. The Capability field limits the resource use for each queue, which is a hard ceiling.</p>
<p>Before, users had no clear view on the allocated resources in queues and idle resources among those defined by Capability. Creating a large number of workloads against insufficient resources may cause job suspension and unexpected cluster scale-out triggered by autoscaler, increasing the cloud resource costs. Now with more detailed status info, you can manage cluster resources more efficiently and avoid excess costs.</p>
<p>Issue: <a href="https://github.com/volcano-sh/volcano/issues/2571" target="_blank" rel="noopener noreferrer" class="">#2571</a></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="contributors">Contributors<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h3>
<p>Volcano 1.7.0 is brought into being from hundreds of code commits from 29 contributors. Thanks for your contributions.</p>
<p><strong>Contributors on GitHub:</strong><br></p>
<table><tbody><tr><td>@xiaoxubeii</td><td>@jsolbrig</td><td>@Yikun</td></tr><tr><td>@tgaddair</td><td>@william-wang</td><td>@elinx</td></tr><tr><td>@Abirdcfly</td><td>@xiaoanyunfei</td><td>@qiankunli</td></tr><tr><td>@wpeng102</td><td>@waiterQ</td><td>@hwdef</td></tr><tr><td>@WingkaiHo</td><td>@Monokaix</td><td>@kerthcet</td></tr><tr><td>@WulixuanS</td><td>@autumn0207</td><td>@jinzhejz</td></tr><tr><td>@lucming</td><td>@jimoosciuc</td><td>@LY-today</td></tr><tr><td>@dontan001</td><td>@wangyang0616</td><td>@Akiqqqqqqq</td></tr><tr><td>@zhoumingcheng</td><td>@jiangkaihua</td><td>@Thor-wl</td></tr><tr><td>@ccchenjiahuan</td><td>@zhifanggao</td><td>&nbsp;</td></tr></tbody></table>
<h4 class="anchor anchorTargetStickyNavbar_zFqj" id="links">Links<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#links" class="hash-link" aria-label="Direct link to Links" title="Direct link to Links" translate="no">​</a></h4>
<p>Release note：<a href="https://github.com/volcano-sh/volcano/releases/tag/v1.7.0" target="_blank" rel="noopener noreferrer" class="">v1.7.0</a><br>
Branch：<a href="https://github.com/volcano-sh/volcano/tree/release-1.7" target="_blank" rel="noopener noreferrer" class="">release-1.7</a><br></p>
<h3 class="anchor anchorTargetStickyNavbar_zFqj" id="about-volcano">About Volcano<a href="https://volcano.sh/blog/Volcano-1.7.0-release-en#about-volcano" class="hash-link" aria-label="Direct link to About Volcano" title="Direct link to About Volcano" translate="no">​</a></h3>
<p>Volcano is designed for high-performance computing applications such as AI, big data, gene sequencing, and rendering, and supports mainstream general computing frameworks. More than 26,000 global developers joined us, among whom the in-house ones come from companies such as Huawei, AWS, Baidu, Tencent, JD, and Xiaohongshu. There are 2,800 Stars and 670 Forks for the project. Volcano has been proven feasible for mass data computing and analytics, such as AI, big data, and gene sequencing. Supported frameworks include Spark, Flink, TensorFlow, PyTorch, Argo, MindSpore, Paddlepaddle, Kubeflow, MPI, Horovod, MXNet, KubeGene, and Ray. The ecosystem is thriving with more developers and use cases coming up.</p>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>kubernetes</category>
            <category>pytorch</category>
            <category>ray</category>
        </item>
        <item>
            <title><![CDATA[ING Bank: How Volcano Empowers Their Big Data Analytics Platform]]></title>
            <link>https://volcano.sh/blog/ING_case-en</link>
            <guid>https://volcano.sh/blog/ING_case-en</guid>
            <pubDate>Wed, 28 Dec 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[ING Bank: How Volcano Empowers Their Big Data Analytics Platform]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>On October 26, 2022, Krzysztof Adamski and Tinco Boekestijn from ING Group delivered a keynote speech "Efficient Scheduling Of High Performance Batch Computing For Analytics Workloads With Volcano" at KubeCon North America. The speech focused on how Volcano, a cloud native batch computing project, supports high-performance scheduling for big data analytics jobs on ING's data management platform.
More details: <a href="https://events.linuxfoundation.org/archive/2022/kubecon-cloudnativecon-north-america/program/schedule/" target="_blank" rel="noopener noreferrer" class="">KubeCon + CloudNativeCon North America</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduction-to-ing">Introduction to ING<a href="https://volcano.sh/blog/ING_case-en#introduction-to-ing" class="hash-link" aria-label="Direct link to Introduction to ING" title="Direct link to Introduction to ING" translate="no">​</a></h2>
<p>Internationale Nederlanden Groep (ING), a global financial institution of Dutch origin, was created in 1991 with the merger of Dutch insurer Nationale-Nederlanden and national postal bank NMB Postbank.</p>
<p>ING provides services in more than 40 countries around the world. Core businesses are banking, insurance, and asset management. Their 56,000 employees serve 53.2 million customers worldwide, including natural persons, families, businesses, governments, and organizations such as IMF.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="business-background">Business Background<a href="https://volcano.sh/blog/ING_case-en#business-background" class="hash-link" aria-label="Direct link to Business Background" title="Direct link to Business Background" translate="no">​</a></h2>
<p>Regulations and restrictions on banking vary depending on the country/region. Data silos, data security, and compliance requirements can be really challenging. It is not easy to introduce new technologies. Therefore, ING builds their Data Analytics Platform (DAP) to provide secure, self-service functionality for employees to manage services throughout the entire process.</p>
<!-- -->
<p>In 2013, they conceptualized data platform. In 2018, ING introduced cloud native technologies to upgrade their infrastructure platform. Since then, more and more employees and departments turn to the platform, and by now, there are more than 400 projects on the data index platform.</p>
<p>They aim to meet all analytics needs in a highly secure, self-service platform that has the following features:</p>
<ul>
<li class="">Open source tool model</li>
<li class="">Powerful computing</li>
<li class="">Strict security and compliance measures</li>
<li class="">One platform for all</li>
<li class="">Both global and local</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="challenges-and-solutions">Challenges and Solutions<a href="https://volcano.sh/blog/ING_case-en#challenges-and-solutions" class="hash-link" aria-label="Direct link to Challenges and Solutions" title="Direct link to Challenges and Solutions" translate="no">​</a></h2>
<!-- -->
<p>ING is shifting from Hadoop to Kubernetes. They met some challenges in job management and multi-framework support. For example:</p>
<ul>
<li class="">Job management<!-- -->
<ul>
<li class="">Pod scheduling: Unaware of upper-layer applications.</li>
<li class="">Lack of fine-grained lifecycle management</li>
<li class="">Lack of dependencies of tasks and jobs</li>
</ul>
</li>
<li class="">Scheduling<!-- -->
<ul>
<li class="">Lack of job-based scheduling, such as sorting, priority, preemption, fair scheduling, and resource reservation</li>
<li class="">No advanced scheduling algorithms, such as those based on CPU topology, task topology, IO-awareness, and backfilling</li>
<li class="">Lack of resource sharing among jobs, queues, and namespaces</li>
</ul>
</li>
<li class="">Multi-framework support<!-- -->
<ul>
<li class="">Insufficient support for frameworks such as TensorFlow and PyTorch</li>
<li class="">Complex management of each framework (such as resource planning and sharing)</li>
</ul>
</li>
</ul>
<p>Managing applications (stateless and even stateful ones) with Kubernetes would be a perfect choice, if Kubernetes is as user-friendly as Yarn in the scheduling and management of batch computing jobs. Yarn also provides limited support, for example, on TensorFlow and PyTorch. Therefore, ING looked for better solutions.</p>
<p><strong>Kubernetes + Hadoop</strong></p>
<!-- -->
<p>When managing clusters, ING once separated Hadoop and Kubernetes. They ran almost all Spark jobs in Hadoop clusters, and other tasks and algorithms in Kubernetes clusters. They want to run all the jobs in Kubernetes clusters to simplify management.</p>
<!-- -->
<p>When Kubernetes and Yarn work together, Kubernetes and Hadoop resources are statically divided. During office hours, Hadoop applications and Kubernetes use their own resources. Spark tasks, when heavily pressured, cannot be allocated extra resources. At night, there are only batch processing tasks in clusters. All Kubernetes resources are idle but cannot be allocated to Hadoop. In this case, resources are not fully used.</p>
<p><strong>Kubernetes with Volcano</strong></p>
<!-- -->
<p>When managing clusters with Kubernetes and scheduling Spark tasks with Volcano, resources do not need to be statically divided. Cluster resources can be dynamically re-allocated based on the priorities and resource pressure of pods, batch tasks, and interactive tasks, which greatly improves the overall utilization of cluster resources.</p>
<p>For example, during office hours, idle resources of common service applications can be used by batch and interactive applications temporarily. In holidays or nights, batch applications can use all cluster resources for data computing.</p>
<!-- -->
<p>Volcano is a batch scheduling engine developed for Kubernetes with the following capabilities:</p>
<ul>
<li class="">Job queues with weighted priority</li>
<li class="">Able to commit above queue limits if the cluster has spare capacity</li>
<li class="">Able to preempt pods when more pods come in</li>
<li class="">Configurable strategies to deal with competing workloads</li>
<li class="">Compatible with Yarn scheduling</li>
</ul>
<p>Volcano supplements Kubernetes in batch scheduling. Since Apache Spark 3.3, Volcano has become the default batch scheduler of Spark on Kubernetes, making it easier to install and use.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="highlighted-features">Highlighted Features<a href="https://volcano.sh/blog/ING_case-en#highlighted-features" class="hash-link" aria-label="Direct link to Highlighted Features" title="Direct link to Highlighted Features" translate="no">​</a></h2>
<p><strong>Redundancy and Local Affinity</strong></p>
<!-- -->
<p>Volcano retains the affinity and anti-affinity policies for pods in Kubernetes, and adds those for tasks.</p>
<!-- -->
<p>The idea of DRF is that in a multi-resource environment, resource allocation should be determined by the dominant share of an entity (user or queue). The volcano-scheduler observes the dominant resource requested by each job and uses it as a measure of cluster resource usage. Based on this dominant resource, the volcano-scheduler calculates the share of the job. The job with a lower share has a higher scheduling priority.</p>
<p>For example, a cluster has 18 CPUs and 72 GB memory in total. User1 and User2 are each allocated one queue. Any submitted job will get its scheduling priority based on the dominant resource.</p>
<ul>
<li class="">For User1, the CPU share is 0.33 (6/18), the memory share is 0.33 (24/72), and the final share is 0.33.</li>
<li class="">For User2, the CPU share is 0.67 (12/18), the memory share is 0.33 (24/72), and the final share is 0.67.</li>
</ul>
<p>Under a DRF policy, the job with a lower share will be first scheduled, that is, the job committed by User1.</p>
<p>Queue resources in a cluster can be divided by configuring weights. However, overcommitted tasks in a queue can use the idle resources in other queues. In this example, after using up the CPUs of its own queue, User2 can use the idle CPUs of User1. When User1 commits a new task, it triggers resource preemption and reclaims the resources occupied by other queues.</p>
<p><strong>Resource Reservation</strong></p>
<!-- -->
<p>Batch computing tasks and other services may preempt resources and cause conflicts. Assume there are two available nodes in a cluster and we need to deploy a unified service layer in the cluster to provide services externally, such as Presto or cache services like Alluxio, batch computing tasks may have already taken all resources and we can't deploy or upgrade that service layer. Therefore, ING's platform now allows users to reserve some resources for other services.</p>
<p><strong>DRF Dashboard</strong></p>
<!-- -->
<p>ING built a DRF scheduling dashboard based on the monitoring data from Volcano to obtain scheduling data at different layers. In the service cluster, ING stores the tasks of interactive users in one queue, and the computing tasks of all key projects running on the data platform in another queue. ING can take certain resources from other queues to the key project queue, but that won't do any good to the tasks of interactive users.</p>
<p>ING is considering displaying the peak hours of cluster use to provide users with more information. With this, users can decide when to start their tasks based on the cluster resource readiness, improving computing performance without complex configurations in the background.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="summary">Summary<a href="https://volcano.sh/blog/ING_case-en#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Volcano abstracts batch task scheduling, allowing Kubernetes to better serve ING in task scheduling. ING will contribute their developed functions to the community, such as the DRF dashboard, idle resource reservation on each node, auto queue management, new Prometheus monitoring metrics, Grafana dashboard updates, kube-state-metrics update, and cluster role restrictions.</p>]]></content:encoded>
            <category>case-study</category>
            <category>big-data</category>
            <category>analytics</category>
            <category>banking</category>
        </item>
        <item>
            <title><![CDATA[Volcano v1.4 (Beta) Release Note]]></title>
            <link>https://volcano.sh/blog/1.4 release-en</link>
            <guid>https://volcano.sh/blog/1.4 release-en</guid>
            <pubDate>Mon, 13 Sep 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Volcano v1.4 (Beta) Release Includes New Features Such as NUMA-Aware]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>This article was firstly released at <code>Container Cube</code> on September 6th, 2021, refer to <a href="https://mp.weixin.qq.com/s/S5JAQI0uLoTEx0lvYDXM4Q" target="_blank" rel="noopener noreferrer" class="">Volcano v1.4.0-Beta发布，支持NUMA-Aware等多个重要特性</a></p>
</blockquote>
<p>Volcano, CNCF's first batch computing project, is now available with a new version, v1.4 (Beta). This version includes multiple important features, such as resource ratio-based partitions on GPU nodes, NUMA-aware, mixed deployment of multiple schedulers, and greatly improved stability.</p>
<p><strong>Resource ratio-based partitions on GPU nodes</strong> is developed to avoid idle GPUs while GPU-consuming jobs are starving. This is an important feature contributed by Leinao Cloud, a Volcano community member.</p>
<p>Previously, a scheduler had separate rules for allocating scarce resources such as GPUs and common resources such as CPUs. That is, CPU-consuming jobs can be directly allocated to GPU nodes to consume CPU and memory resources without considering the upcoming GPU jobs and reserving no resources for them. Alternatively, an independent scheduler was configured for GPU nodes, which did not allow CPU-consuming jobs to be scheduled to GPU nodes.</p>
<p>Now with resource ratio-based partitions, you can set a dominant resource (usually GPU) and configure a resource ratio (for example, GPU:CPU<!-- -->:Memory<!-- --> = 1:4:32) for the dominant resource. The scheduler ensures that the ratio of idle GPU, CPU, and memory resources on a GPU node is greater than or equal to the value you set.</p>
<p>In this way, GPU-consuming jobs that meet the ratio requirement can be scheduled to the node at any time, preventing GPU wastes. Compared with other solutions in the industry, this more flexible method improves node resource utilization.</p>
<p>For details about the feature design and usage, you can visit <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/proportional.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/proportional.md</a>.</p>
<p><strong>CPU NUMA-aware</strong> is another important feature of this version. For computing-intensive jobs such as AI and big data jobs, enabling NUMA will significantly improve the computing efficiency. With CPU NUMA-aware scheduling, you can configure the NUMA policy to determine whether to enable NUMA for workloads. The scheduler will select a node that meets the NUMA requirements.</p>
<p>For details about the feature design and usage, you can visit <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/numa-aware.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/numa-aware.md</a>.</p>
<p>You can now <strong>deploy different types of schedulers</strong> in a Kubernetes cluster to properly schedule resources. The most common use case is deploying default-scheduler and Volcano together. Native Kubernetes resource objects, such as Deployments and StatefulSets, can be scheduled by default-scheduler, and high-performance computing workloads, such as Volcano Jobs, TensorFlow Jobs, and Spark Jobs, can be scheduled by Volcano. This solution can make the best possible use of each type of schedulers and reduce the concurrency pressure of a single scheduler.</p>
<p>For details about the feature design and usage, you can visit <a href="https://github.com/volcano-sh/volcano/blob/master/docs/design/multi-scheduler.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/blob/master/docs/design/multi-scheduler.md</a>.</p>
<p>In addition to the preceding features, Volcano v1.4 (Beta) adds the stress testing automation framework and fixes bugs introduced by the resource comparison function robustness.</p>
<p>The community is collecting roadmap features for Volcano v1.5. We have received requirements on support for cluster resource monitoring, hierarchical queues, enhanced Spark integration, and task dependency. Every piece of your suggestions and issues is welcome.</p>]]></content:encoded>
            <category>release</category>
            <category>volcano</category>
            <category>cncf</category>
        </item>
        <item>
            <title><![CDATA[OpenI-Octopus: How to Avoid Resource Preemption in Kubernetes Clusters]]></title>
            <link>https://volcano.sh/blog/pengcheng-en</link>
            <guid>https://volcano.sh/blog/pengcheng-en</guid>
            <pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Volcano use case in scientific research]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>This article was firstly released at <code>Container Cube</code> on September 30th, 2020, refer to<a href="https://mp.weixin.qq.com/s/h4T7KbAiQZTKepYcTcgdlA" target="_blank" rel="noopener noreferrer" class="">鹏城实验室启智章鱼教你彻底摆脱Kubernetes集群资源抢占难题</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduction-to-openi-octopus">Introduction to OpenI-Octopus<a href="https://volcano.sh/blog/pengcheng-en#introduction-to-openi-octopus" class="hash-link" aria-label="Direct link to Introduction to OpenI-Octopus" title="Direct link to Introduction to OpenI-Octopus" translate="no">​</a></h2>
<p>OpenI-Octopus is a cluster management and resource scheduling system developed and maintained by Peng Cheng Laboratory, Peking University, and University of Science and Technology of China.</p>
<ul>
<li class="">
<p>This system is completely open-source, complying with the Open-Intelligence license.</p>
</li>
<li class="">
<p>It deploys, manages, and schedules jobs using Kubernetes.</p>
</li>
<li class="">
<p>AI jobs can be run in clusters. Hardware such as GPUs, NPUs, FPGAs, Huawei Ascend chips, and Cambricon MLUs are supported.</p>
</li>
<li class="">
<p>It provides high-performance networks for AI and supports InfiniBand networks.</p>
</li>
<li class="">
<p>Monitoring and analysis tools for networks, platforms, and AI jobs are available.</p>
</li>
<li class="">
<p>Mainstream deep learning frameworks are supported.</p>
</li>
<li class="">
<p>A microservice-based architecture is used.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-en1-d9b3528e1bd1e2c36594abff0e0b2f77.png" width="1551" height="778" class="img_ev3q"></p>
<p>The service architecture of OpenI-Octopus is illustrated above. The bottom layer is hardware. OpenI-Octopus supports various types of heterogeneous hardware, including CPUs, GPUs, NPUs, and FPGAs. Different hardware types are adapted so that the upper-layer Kubernetes services can identify and manage them.</p>
<p>The second layer is the platform layer. The blue panels on the left cover the node management functions. OpenI-Octopus employs native Kubernetes functions, including orchestration planning and controllers, and enhances scheduling by integrating Volcano.</p>
<p>Management components communicate with integrated development services through the API server.</p>
<p>The rest-server module developed by OpenI-Octopus carries the core functions of the system and integrates monitoring tools such as Grafana and Prometheus, Elasticsearch, Jupyterlab proxy, and model repository.</p>
<p>The panel on the right covers the capabilities of compute nodes, including image factory, O&amp;M, job monitoring, kubebox client, and Jupyterlab client for users to log in to containers.</p>
<p>The top layer is the services provided by the system, such as data engine, model repository, and project center. With remote interconnection, remote users can also enjoy cluster services.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="business-scenarios-and-challenges">Business Scenarios and Challenges<a href="https://volcano.sh/blog/pengcheng-en#business-scenarios-and-challenges" class="hash-link" aria-label="Direct link to Business Scenarios and Challenges" title="Direct link to Business Scenarios and Challenges" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-en2-f9f60cca1db907afeb840fc95dd7a37a.png" width="1366" height="837" class="img_ev3q"></p>
<p>OpenI-Octopus is built for research teams and laboratories. They develop and train models in fields such as transportation, healthcare, and finance, model training, and perform model inference. These models are used for vehicle tracking, medical image recognition, auxiliary diagnosis, financial quantization, and many other applications. Some deep learning algorithms are used in these courses, which require strong compute resources.</p>
<p>OpenI-Octopus aims to break the model, data, and compute resource silos on the traditional platforms, and provide computing power through a single platform.</p>
<ul>
<li class="">
<p>At the model layer, OpenI-Octopus provides a multi-architecture, heterogeneous model engine, which supports common open-source computing frameworks and provides model conversion for them.</p>
</li>
<li class="">
<p>At the data layer, OpenI-Octopus provides a multi-source, heterogeneous data engine, which supports heterogeneous data convergence and semi-automatic data labeling.</p>
</li>
<li class="">
<p>At the resource layer, OpenI-Octopus provides a distributed AI computing engine for job scheduling and the unified representation of heterogeneous hardware.</p>
</li>
</ul>
<p><strong>Service Requirements:</strong></p>
<ul>
<li class="">
<p>Excellent performance in scientific research and applications of AI, including algorithm training and inference in fields such as smart transportation, healthcare, and finance</p>
</li>
<li class="">
<p>High-end heterogeneous hardware resources, clusters with 150P+ computing, and 10 PB-level high-speed storage</p>
</li>
<li class="">
<p>Rapid and flexible deployment. The system runs reliably and stably for external teams to use.</p>
</li>
</ul>
<p><strong>Challenges:</strong></p>
<ul>
<li class="">
<p>No high-performance computing platform to meet service requirements in complex scenarios</p>
</li>
<li class="">
<p>Heterogeneous hardware resources need to be efficiently used and flexible scheduling policies must be supported. Resource preemption problems need to be resolved to avoid starvation of key task resources.</p>
</li>
<li class="">
<p>The system architecture must be scalable and services must be highly available.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="why-volcano">Why Volcano?<a href="https://volcano.sh/blog/pengcheng-en#why-volcano" class="hash-link" aria-label="Direct link to Why Volcano?" title="Direct link to Why Volcano?" translate="no">​</a></h2>
<p>At the beginning, OpenI-Octopus looked into several existing open source projects in the community. These projects can basically satisfy the service requirements and reduce the development workload. The OpenI-Octopus team narrowed down their choices to four resource schedulers. The first one was the default Kubernetes scheduler, which is not friendly to batch scheduling. The second choice was Yarn scheduler, which is based on Hadoop. However, the current architecture has been transformed to Kubernetes-based. Yarn does not fit. The last two were kube-batch and Volcano. Volcano is developed from kube-batch, and better supports deep learning and common computing frameworks. Volcano implements scheduling policies through plugins that can be easily customized to develop scenario-specific scheduling policies. That's why OpenI-Octopus chose to integrate Volcano.</p>
<p>Volcano brings the following benefits:</p>
<ul>
<li class="">
<p>Complete architecture and ecosystem; timely feedback from the fast growing community</p>
</li>
<li class="">
<p>Customizable plugins for scenario-specific scheduling policies. Take the binpack plug-in as an example. Its packing algorithm can reduce resource fragments, allowing your cluster resources to be fully used.</p>
</li>
<li class="">
<p>Job queue mechanism. Job queues allow clusters to be logically grouped. Users can configure compute resource quotas for different projects, and allocate different types of jobs to different queues for management. In this way, job and compute resource management can be finer-grained.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="secondary-development-based-on-volcano---resource-status-statistics-and-management">Secondary Development Based on Volcano - Resource Status Statistics and Management<a href="https://volcano.sh/blog/pengcheng-en#secondary-development-based-on-volcano---resource-status-statistics-and-management" class="hash-link" aria-label="Direct link to Secondary Development Based on Volcano - Resource Status Statistics and Management" title="Direct link to Secondary Development Based on Volcano - Resource Status Statistics and Management" translate="no">​</a></h2>
<p>OpenI-Octopus performed secondary development on Volcano and added some new capabilities.</p>
<p>The first capability is to collect statistics on resources and manage resource status. These resources include both cluster compute resources and resources such as jobs, tasks, and pods generated by Kubernetes after a user submits a job.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-en3-6c81a1126608464c852e3f32a185e0f3.png" width="1266" height="415" class="img_ev3q"></p>
<p>OpenI-Octopus manages to do so. It also allows users to customize the conditions and callback events of resource status transition and subscribe to the customized events and corresponding policies at the service logic layer.</p>
<p>Assume that there is a training job that uses an ensemble learning algorithm. Generally, a distributed training manner is used. It has a combination module and several individual learners, all of which can be regarded as tasks. Each individual learner is trained using one type of algorithm, and the combination module combines the results of each individual learner to output the final result. Once the final result is obtained, the entire training job is complete. In this job-task implementation based on Kubernetes, user can create one or more pods for a task. If you want the entire job to exit as long as the combination module runs to completion, instead of waiting until all tasks are successfully executed, You can customize a job exit policy in the scheduler and use the policy at the service layer. Different scenarios may require different policies, and that's why secondary development is needed.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-en4-a0709ca57259c5951adb150290320d64.png" width="1293" height="763" class="img_ev3q"></p>
<p>This flowchart shows job state information is transferred among OpenI-Octopus, Kubernetes, and Volcano.</p>
<p>First, both Volcano and OpenI-Octopus listen on all Kubernetes jobs. After the user submits a job to Kubernetes, Volcano updates the job state based on the monitored state of the pod started by the job.OpenI-Octopus will handle the job state changes.The key is how Volcano updates the job states to Kubernetes.</p>
<p>OpenI-Octopus worked out its solution:</p>
<p>1)Develop state machines for Jobs, Tasks, and Replicas.</p>
<ul>
<li class="">
<p>More detailed resource state statistics and command output</p>
</li>
<li class="">
<p>Finer-grained job lifecycle management</p>
</li>
</ul>
<p>2)Customize events and policies. Back to the ensemble learning example. The entire job can run to completion upon the customized event (e.g. MainTaskEvent) released by the scheduler that the specific task is successfully executed.</p>
<p>3)Implement lifecycle callback hooks, which can be added to any state transition event in any state machine. For example, the billing function collects statistics on the running duration of a job based on the start event and end event of the job.</p>
<p><strong>Volcano-based Secondary Development - Privilege Action</strong></p>
<p>Issues:</p>
<ul>
<li class="">
<p>Resources are starved, and a large number of jobs in the queue keep waiting.</p>
</li>
<li class="">
<p>Urgent and key jobs need to be preferentially scheduled.</p>
</li>
<li class="">
<p>Users' jobs may be developed online and cannot be terminated unless allowed.</p>
</li>
</ul>
<p>Existing Capabilities of Volcano:</p>
<ul>
<li class="">
<p>Jobs with different priorities in the same queue can be preempted.</p>
</li>
<li class="">
<p>Pod-based eviction</p>
</li>
<li class="">
<p>Immediate preemption</p>
</li>
</ul>
<p>Requirements:</p>
<ul>
<li class="">
<p>When jobs in the same queue are from different tenants, different tenants should have different priorities and preemption permissions.</p>
</li>
<li class="">
<p>Job-based eviction</p>
</li>
<li class="">
<p>Delayed preemption</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-en5-2cd1ab95ecf0d2e25524d48e373bd2ee.png" width="1618" height="803" class="img_ev3q"></p>
<p>This flowchart shows how the delayed preemption plugin works. On the left is the running logic of the plugin in the scheduler. Kubernetes services lie in the middle, and the right part is the core OpenI-Octopus modules.</p>
<p>Specifically, the plugin finds the jobs that need to be preempted in Volcano. The compute resources occupied by these jobs must be sufficient for the high-priority jobs that are waiting. Then, the plugin updates the states of these jobs in Kubernetes. As soon as the core OpenI-Octopus modules detect the state changes, they start a timer to prepare for eviction of these jobs. If the job preemption is canceled while the timer countdown does not end or because the required resources have been released, the timer is also canceled.</p>
<p>The following chart shows the service logic.</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="985" height="381" class="img_ev3q"></p>
<ol>
<li class="">A Boolean attribute called Preempt is added to each job, indicating whether the job is a preempted job.</li>
</ol>
<ul>
<li class="">Only jobs with lower priorities in the same queue can be preempted.</li>
</ul>
<ol start="2">
<li class="">The eviction is performed by job instead of by pod.</li>
</ol>
<ul>
<li class="">
<p>Pods are evicted based on the ID of the jobs to which the pods belong to reduce the number of affected jobs.</p>
</li>
<li class="">
<p>The scheduler notifies Openl-Octopus to stop the jobs at the service layer.</p>
</li>
</ul>
<ol start="3">
<li class="">Delayed preemption</li>
</ol>
<ul>
<li class="">
<p>The Privileged and WillEvicted states are added for the job state machine.</p>
</li>
<li class="">
<p>Jobs in Privileged or WillEvicted state cannot be preempted by other jobs.</p>
</li>
<li class="">
<p>If the state of a preempting or preempted job changes, the state of the other party changes accordingly.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-7-23dedc642d89566d7011067c29c0ad1c.png" width="699" height="157" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="benefits">Benefits<a href="https://volcano.sh/blog/pengcheng-en#benefits" class="hash-link" aria-label="Direct link to Benefits" title="Direct link to Benefits" translate="no">​</a></h2>
<p><strong>Enhanced capabilities</strong></p>
<ul>
<li class="">
<p>Large-scale distributed training jobs can run efficiently.</p>
</li>
<li class="">
<p>Multiple AI computing frameworks are supported.</p>
</li>
<li class="">
<p>Plugin-based scheduler supports customized development to satisfy scenario-specific requirements.</p>
</li>
<li class="">
<p>Multi-queue scheduling makes possible hardware resource grouping and dynamic resource allocation between groups.</p>
</li>
</ul>
<p><strong>Performance tuning</strong></p>
<ul>
<li class="">
<p>Hardware resource utilization is greatly improved to 90% or higher.</p>
</li>
<li class="">
<p>The average job scheduling latency is greatly reduced. The average job waiting time is reduced from 60 seconds (using the Yarn scheduler) to 10 seconds (using Volcano).</p>
</li>
<li class="">
<p>System stability is enhanced, cluster node resources are used in balance, and O&amp;M workloads are reduced.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/pengcheng-8-eb542f9bc62011e39742ebdf2902a092.png" width="693" height="591" class="img_ev3q"></p>
<ul>
<li class="">
<p>With 120+ nodes managed and 1100+ GPU cards in total, the GPU utilization can reach 90% or higher when the system is overloaded.</p>
</li>
<li class="">
<p>The resource usage of each node is balanced, and the difference is less than 20%.</p>
</li>
<li class="">
<p>Since the rollout in 2019, more than 120,000 jobs have been run.</p>
</li>
</ul>]]></content:encoded>
            <category>case-study</category>
            <category>scientific-research</category>
            <category>preemption</category>
            <category>kubernetes</category>
        </item>
        <item>
            <title><![CDATA[iQIYI: Volcano-based Cloud Native Migration Practices]]></title>
            <link>https://volcano.sh/blog/aiqiyi-en</link>
            <guid>https://volcano.sh/blog/aiqiyi-en</guid>
            <pubDate>Wed, 25 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Volcano use case in deep learning and service migration]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>This article was firstly released at <code>Container Cube</code> on September 30th, 2020, refer to<a href="https://mp.weixin.qq.com/s/YtP-ZURRBr5-ba1eWfKS2A" target="_blank" rel="noopener noreferrer" class="">揭秘爱奇艺深度学习平台云原生迁移实践</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduction-to-iqiyi-jarvis-deep-learning-platform">Introduction to iQIYI Jarvis Deep Learning Platform<a href="https://volcano.sh/blog/aiqiyi-en#introduction-to-iqiyi-jarvis-deep-learning-platform" class="hash-link" aria-label="Direct link to Introduction to iQIYI Jarvis Deep Learning Platform" title="Direct link to Introduction to iQIYI Jarvis Deep Learning Platform" translate="no">​</a></h2>
<p><strong>Overall Architecture of the Platform</strong></p>
<p>The platform supports GPU- and CPU-based training and inference. S3, HDFS, and NFS can be used for storing training data and models. The platform supports TensorFlow, PyTorch, Caffe, Caffe2 and MXNet. It uses TensorFlow and PyTorch. TensorFlow 1.X to 2.X are supported.</p>
<p>The platform can be used in advertising, search, recommendation, NLP, and other services. iQIYI uses Mesos + Marathon as their elastic container platform. When iQIYI started the platform, Kubernetes was not mature enough to be considered. Therefore, our containers do not run on K8s.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-en1-308026910833f437aa1b1d8ba6f9c572.png" width="1353" height="735" class="img_ev3q"></p>
<p><strong>One-stop Platform Service</strong></p>
<p>Four small platforms are used to provide the service. The first is the data preprocessing platform. It analyzes the training data in a visualized manner, helps users adjust parameters, and detects abnormal data in a timely manner.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-en2-47256b3a2448f9c8672ba290656ff238.png" width="1069" height="263" class="img_ev3q"></p>
<p>The second is the training code compilation platform. You can use the RunOnce or notebook training to obtain an environment that is the same as the training environment. You then can compile the training code, and commit the code to GitLab.</p>
<p>The third is the training job execution platform. You can run a training job by using the Jarvis training platform, and then the training code will be executed. An algorithm model will be output.</p>
<p>The last is the Jarvis inference platform. You can create an inference service using the platform and provide the inference service for external systems.</p>
<p><strong>Platform Development</strong></p>
<p>iQIYI started from the inference platform. iQIYI first enables the models to provide services for external systems, and then gradually extends the platform functions to support training, development, and data preprocessing. Currently, iQIYI is migrating the elastic container platform from Mesos + Marathon to K8s + Volcano.</p>
<p><strong>Training Platform Architecture Before Volcano Is Used</strong></p>
<p>The following figure shows the training platform architecture before Volcano is used.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-4-68fc34423a0767a414dd3dbc40199840.png" width="600" height="514" class="img_ev3q"></p>
<p>The process is as follows:</p>
<p>A.Compile training code and commit it to GitLab.</p>
<p>B.You can create a training job on the web page or using the command line tool. To create a training job, you need to enter the following information:</p>
<ul>
<li class="">
<p>Required resources</p>
</li>
<li class="">
<p>Images. Each version of each framework is supported by an image. Selecting an image means selecting an algorithm framework.</p>
</li>
<li class="">
<p>There may be multiple clusters. You need to specify the cluster where the job is expected to run.</p>
</li>
<li class="">
<p>The URL of the GitLab project. The project contains the training code you compiled.</p>
</li>
</ul>
<p>C.The Jarvis cli/web converts the request into gRPC and sends it to the Jarvis core.</p>
<p>D.The core converts the request and calls the Marathon API to create a container.</p>
<p>E.The container is started in the specified cluster and executes the training job.</p>
<p><strong>Challenges of Migrating the Training Platform to Kubernetes</strong></p>
<p>The challenges are as follows:</p>
<ul>
<li class="">
<p>Native pods, Deployments, and jobs cannot meet the requirements of distributed training.</p>
</li>
<li class="">
<p>Queue and quota management are not supported.</p>
</li>
<li class="">
<p>Lack of scheduling capabilities, such as Gang Scheduling.</p>
</li>
</ul>
<p><strong>Introducing Volcano</strong></p>
<p>The three most important concepts of Volcano are VolcanoJob, queue, and PodGroup. VolcanoJob, referred to as vcjob, is an extension of Kubernetes jobs or an encapsulation of pods.</p>
<p>Queues can be used to manage quotas.</p>
<p>PodGroup is a group of pods and can be used for advanced upper-layer scheduling.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-5-bbbcfb901b565af0bb67e8651ecdd068.png" width="692" height="239" class="img_ev3q"></p>
<p>So far:</p>
<ul>
<li class="">
<p>Volcano is the native batch system of Kubernetes and is highly suitable for AI training.</p>
</li>
<li class="">
<p>It does not intrude Kubernetes source code and complies with the Kubernetes development specifications, facilitating secondary development.</p>
</li>
<li class="">
<p>It has been accepted by Cloud Native Computing Foundation (CNCF) and is mature.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="power-of-volcano">Power of Volcano<a href="https://volcano.sh/blog/aiqiyi-en#power-of-volcano" class="hash-link" aria-label="Direct link to Power of Volcano" title="Direct link to Power of Volcano" translate="no">​</a></h2>
<p><strong>How Does Volcano Solve Problems of Migrating to Kubernetes?</strong></p>
<p><strong>Gang Scheduling</strong></p>
<p>1.1 Gang Scheduling</p>
<p>Gang scheduled pods run simultaneously or none of them run. This is important for AI training, especially distributed training in most scenarios. The feature of distributed training is that a large number of pods, for example, 40 or 50 pods, are started at a time. If some pods of a task are scheduled and some pods are not scheduled, the task cannot run properly. This will also cause resource waste, or even deadlocks.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-en6-322f5a002aff4be84766880635e647a6.png" width="785" height="434" class="img_ev3q"></p>
<p>For example, there are only four GPUs in a resource pool and tasks A and B. Each task has four pods, and each pod requires one GPU. When tasks A and B are created at the same time, without gang scheduling, each task may obtain only two GPUs. In this case, neither of the tasks can be completed, resulting in a deadlock. Unless resources are added to the pool, the deadlock cannot be resolved.</p>
<p>Volcano schedules jobs in the unit of PodGroup to implement gang scheduling, avoiding the preceding problem.</p>
<p>1.2 Native Support for Distributed Tasks</p>
<p>Take TensorFlow distributed training as an example. It has the following roles: Parameter Server (PS), master, and worker. PS is used to store parameters. Master and worker are used to calculate gradients. In each iteration, master and worker obtain parameters from PS and update the calculated gradients to PS. PS aggregates the gradients returned from master and worker, updates the parameters, and broadcasts the updated parameters to master and worker.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-7-711f9c37b91c178c9a81d606518ace78.png" width="694" height="288" class="img_ev3q"></p>
<p>Let's focus on one of its network structures. If master or worker needs to communicate with PS, problems will occur. When creating a pod, a user may not know the IP address of the pod. Multiple pods created in a deployment may not know the IP address or domain name of each other. Without Volcano, solutions to these problems are complicated.</p>
<p>Each role must know the IP address or domain name of the other roles, the role it plays, and the number of indexes. A TF_CONFIG configuration file is required to include the IP addresses or domain names of master, worker, and PS. These are difficult to implement in Kubernetes. However, with Volcano, the solutions become simple.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-8-bdeb0bffd2d9d7f1f990be3dc0006e70.png" width="682" height="193" class="img_ev3q"></p>
<p>Volcano can easily build TF_CONFIG through file injection to support TensorFlow distributed training. Volcano injects a folder (etc/volcano) to multiple pods under a vcjob. The folder includes all domain names of master, volcano, and PS. In this way, each pod knows the peers in the entire cluster, and the TensorFlow distributed training can be performed.</p>
<p>Currently, TensorFlow provides some high-level APIs, such as TF estimator. The single-node code and distributed code in the estimator are the same, but the configuration of TF_CONFIG is different. If the environment variables or configuration files in such a format are passed, distributed training can be performed. If platforms can build the TF_CONFIG file, users can directly run the file.</p>
<p>1.3 Horovod/MPI</p>
<p>Volcano supports Horovod, which is similar to TensorFlow. They are both used for distributed training but differ in the way of updating parameters.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-9-cb117af02bae86822e1906b6c0dd639f.png" width="651" height="426" class="img_ev3q"></p>
<p>Horovod uses the ring allreduce method to update parameters, and what does that mean for us when we want to build a basic environment for upper-layer applications to use? What does the ring allreduce architecture require?</p>
<p>First, we need to ensure that each node knows the domain name of each other, as mentioned earlier. Second, we need to enable a node to SSH log in to another through port 22 without a password. This passwordless SSH can be automatically implemented with Volcano's SSH plugin, saving a lot of trouble.</p>
<p>1.4 Quotas and Queues</p>
<p>Volcano uses queues (CRD objects) to schedule jobs. Let's assume that we have two queues, as shown in the following figure. Queue1 has a quota of 20 GPUs and queue2 has a quota of 10 GPUs. The resources of queue1 are abundant so new jobs in queue 1 can be scheduled. However, all resources in queue2 have been used, and new jobs in queue2 cannot be scheduled and have to wait in queue. As a result, the PodGroups changes to the pending state.</p>
<p>The teams in our platform are similar to the Volcano queues. How? Each team has a quota, and quotas are independent between teams. When the resource usage reaches the quota of a team, the jobs in the team have to wait in queue. When resources are available, the queued jobs will be executed based on the priority, which means the jobs with a higher priority will be run first. Considering this similarity, the interconnection between Volcano and iQIYI’s platform can be fairly easy.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-en10-79fde559c6f5ea2cf1f28453d4ffc478.png" width="965" height="445" class="img_ev3q"></p>
<p>1.5 Integration with Volcano</p>
<p>iQIYI has added the volcano_plugin, which encapsulates the RESTful APIs of vcjob, queue, and PodGroup. It converts the gRPC requests into YAML configurations that comply with the Kubernetes API specifications, and calls the Kubernetes API to create containers.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-11-95efa170fc80825abf293a0098078f24.png" width="637" height="615" class="img_ev3q"></p>
<p>Jarvis Core determines which backend to use based on the passed cluster information.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="encountered-issues">Encountered Issues<a href="https://volcano.sh/blog/aiqiyi-en#encountered-issues" class="hash-link" aria-label="Direct link to Encountered Issues" title="Direct link to Encountered Issues" translate="no">​</a></h2>
<p>Issue 1</p>
<p>Symptom<!-- -->:During<!-- --> Volcano upgrade, the image in <a href="https://github.com/volcano_x0002_sh/volcano/blob/master/installer/volcano-development.yaml" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano_x0002_sh/volcano/blob/master/installer/volcano-development.yaml</a> was directly modified, and kubectl apply -f <code>&lt;yaml file&gt;</code> was executed. The existing queues and vcjobs all disappeared.</p>
<p>Cause<!-- -->:volcano-admission-init<!-- --> in the YAML file was executed repeatedly. As a result, Volcano was reset.</p>
<p>Solution: Upgrade only the necessary components.
<img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-12-15ec72514f54ee6add7f53bcdf563f40.png" width="608" height="340" class="img_ev3q"></p>
<p>Issue 2</p>
<p>Symptom: When list_and_watch was used to monitor vcjob status, the watch connection broke every 80 to 90 seconds when there were no new events, and the disconnection duration varied. Such issue did not occur when the same code was used to monitor pods.</p>
<p>Cause: The default http timeout for CRD objects in Kubernetes is time.Duration(float64(minRequestTimeout) * (rand.Float64() + 1.0)), where miniRequestTimeout is set to 1 minute. You can specify timeoutSecond on the client to avoid this issue.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/aiqiyi-13-933872e65bafcb3798a4a29e20ae7690.png" width="684" height="220" class="img_ev3q"></p>
<p>Issue 3</p>
<p>Symptom: The container entry address in Jarvis is a bash script. When the script was run in Kubernetes, a container did not exit until 30 seconds after the stop command was delivered.</p>
<p>Cause<!-- -->:Bash<!-- --> did not pass the signal to child processes. When graceful stop timeout was reached, the daemon process detected that the container had not exited and sent a SIGKILL signal to kill the bash script and exit the container. However, other processes in the container had no chance to clean up.</p>
<p>Solution<!-- -->:Use<!-- --> dum-init to run a script such as the following entry script:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">#!/usr/bin/dumb-init /bin/bash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">my-web-server &amp; # launch a process in the background</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">my-other-server # launch another process in the foreground</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre></div></div>
<p>1.6Modifications on Volcano</p>
<ul>
<li class="">
<p>The SVC plugin now supports the input parameter nodeport. It means when we create a vcjob and pass the SVC parameter, a nodeport will be created, so our TensorBoard and other services can be accessed externally.</p>
</li>
<li class="">
<p>We have fixed the bug that creation fails when the name of the SSH plugin exceeds 63 bytes.</p>
</li>
<li class="">
<p>Volcano has fixed the bug in the queue capability that resources can be used over the capability. For details, see <a href="https://github.com/volcano-sh/volcano/issues/921" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano-sh/volcano/issues/921</a>.</p>
</li>
<li class="">
<p>After a vcjob is annotated, if a pod fails, the vcjob deletion is not triggered. For details, see <a href="https://github.com/volcano_x0002_sh/volcano/issues/805" target="_blank" rel="noopener noreferrer" class="">https://github.com/volcano_x0002_sh/volcano/issues/805</a>.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="summary">Summary<a href="https://volcano.sh/blog/aiqiyi-en#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Volcano makes up for the lack of basic deep learning capabilities in Kubernetes.</p>
<ul>
<li class="">
<p>Gang Scheduler</p>
</li>
<li class="">
<p>Queue management</p>
</li>
</ul>
<p>Volcano code complies with the Kubernetes standards and is non-intrusive.</p>
<ul>
<li class="">
<p>Lower development and interconnection costs</p>
</li>
<li class="">
<p>Easy for secondary development</p>
</li>
</ul>
<p>Volcano-based Jarvis has been released and is running properly.</p>]]></content:encoded>
            <category>case-study</category>
            <category>deep-learning</category>
            <category>migration</category>
            <category>kubernetes</category>
        </item>
        <item>
            <title><![CDATA[Using Volcano in Large-Scale, Distributed Offline Computing]]></title>
            <link>https://volcano.sh/blog/ruitian2-en</link>
            <guid>https://volcano.sh/blog/ruitian2-en</guid>
            <pubDate>Wed, 25 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Volcano use case in the financial sector]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>This article was firstly released at <code>Container Cube</code> on December 24th, 2020, refer to<a href="https://mp.weixin.qq.com/s/dC4IDNG7FMGLigNJaj_Qug" target="_blank" rel="noopener noreferrer" class="">锐天投资基于Volcano的大规模分布式离线计算平台的应用实践</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="service-scenarios-and-solution-selection">Service Scenarios and Solution Selection<a href="https://volcano.sh/blog/ruitian2-en#service-scenarios-and-solution-selection" class="hash-link" aria-label="Direct link to Service Scenarios and Solution Selection" title="Direct link to Service Scenarios and Solution Selection" translate="no">​</a></h2>
<p><strong>Service Scenarios</strong></p>
<ul>
<li class="">
<p>VMs for research and development for policy personnel</p>
</li>
<li class="">
<p>AI training and inference</p>
</li>
<li class="">
<p>Data ETL</p>
</li>
<li class="">
<p>General-purposed, distributed batch processing jobs</p>
</li>
</ul>
<p><strong>Why Use Kubernetes？</strong></p>
<p>A distributed batch processing platform can be used to manage compute and storage resources. In this use case, Ruitian decided to use Kubernetes to manage compute resources due to the following reasons:</p>
<ul>
<li class="">
<p>Containers streamline development for users in different environments. Ruitian has four to five groups of users who use different development environments and policies. Environment isolation posed a great challenge to resource management and development efficiency. Now with containers, environments are encapsulated in containers that can be scheduled using Kubernetes.</p>
</li>
<li class="">
<p>Heterogeneous devices such as GPUs can be supported through Device Plugins.</p>
</li>
<li class="">
<p>Data storage can be centralized by using etcd.</p>
</li>
<li class="">
<p>Kubernetes has a robust technology ecosystem.</p>
</li>
<li class="">
<p>The Go language complies with the technology stack in Ruitian.</p>
</li>
</ul>
<p><strong>Why Use CephFS</strong></p>
<p>CephFS is a type of distributed file storage interface provided by Ceph. Ceph provides three types of storage interfaces: S3, block storage, and CephFS. The reasons for using CephFS are as follows:</p>
<ul>
<li class="">
<p>Posix Filesystem permission and interface: Local file systems are widely used in our businesses and CephFS provides stable file system mounting. In multi-tenant scenarios, each user has a UID, and the data of each user can be accessed only by themselves. Posix Filesystem provides a permission mechanism that allows users to seamlessly migrate their file permissions to SAP.</p>
</li>
<li class="">
<p>Strong consistency: A file written to node A can be directly read on node B.</p>
</li>
<li class="">
<p>Small file access at scale and high-bandwidth I/O</p>
</li>
<li class="">
<p>Hierarchical hardware support</p>
</li>
<li class="">
<p>Kubernetes ReadWriteMany PV</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="why-volcano">Why Volcano<a href="https://volcano.sh/blog/ruitian2-en#why-volcano" class="hash-link" aria-label="Direct link to Why Volcano" title="Direct link to Why Volcano" translate="no">​</a></h2>
<p><strong>Why not default-scheduler</strong></p>
<p>Ruitian did not choose the default-scheduler, because it cannot provide queue scheduling, fair scheduling, multi-tenant isolation, and advanced scheduling policies such as gang scheduling. Fair scheduling and advanced scheduling policies are the most important factors. Fair scheduling decides which job to run first when there are too many jobs in a queue or when the cluster has available resources. To achieve this, each queue must be mapped to a team, and each namespace must correspond to a user. The default-scheduler cannot meet the preceding requirements.</p>
<p>Another option was kube-batch, a batch processing scheduler of the community. However, it is only a scheduler and does not provide any solution other than scheduling. What Ruitian needed was a batch processing solution that takes care of scheduling and processing for the environment and CRDs.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-1-ba89084c61d42c5320b7018dea04ce99.png" width="675" height="409" class="img_ev3q"></p>
<p><strong>Why is Volcano</strong></p>
<ul>
<li class="">
<p>Supports fair scheduling.</p>
</li>
<li class="">
<p>Supports advanced scheduling policies, such as gang scheduling and binpack.</p>
</li>
<li class="">
<p>Supports mutual access between pods through SSH plug-ins.</p>
</li>
<li class="">
<p>Supports injecting job dependencies to pods via ENV plug-ins and supports Tensorflow Worker Sharding.</p>
</li>
<li class="">
<p>Provides services externally via SVC plug-ins.</p>
</li>
</ul>
<p>Such a scheduling platform can satisfy Ruitian.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="system-architecture">System Architecture<a href="https://volcano.sh/blog/ruitian2-en#system-architecture" class="hash-link" aria-label="Direct link to System Architecture" title="Direct link to System Architecture" translate="no">​</a></h2>
<p><strong>Service Architecture</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-en2-4a10fe7113cff713b8c2fb25f96423d1.png" width="696" height="536" class="img_ev3q"></p>
<ul>
<li class="">
<p>Ceph-based high-performance storage</p>
</li>
<li class="">
<p>Kubernetes-based heterogeneous hardware management</p>
</li>
<li class="">
<p>Loki + Grafana for user and monitoring panel</p>
</li>
<li class="">
<p>Hybrid deployment of middleware and application layer, making full use of cluster resources</p>
</li>
<li class="">
<p>Extended service scenarios with Batch Jobs</p>
</li>
</ul>
<p><strong>Multi-tenancy</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-3-960db1c287c8bbabc743175e6e2650d0.png" width="640" height="644" class="img_ev3q"></p>
<p>When a user submits a job, multi-tenancy can be a problem. For example, when a user adds a pod to a cluster, the cluster needs to know the running user and the UID. By default, the UID of a running user is that of the image builder, which means the UIDs of the pods submitted by all users can be the same. This is not allowed because the data obtained and generated by a user should not be accessible to other users.</p>
<p>In this case, Ruitian uses Kubernetes namespaces to isolate all resources. One namespace corresponds to one user. Namespaces interconnect with the development information through the existing LDAP service and OIDC to authenticate users and authorize them through RBAC to use pod security policies (PSPs). A PSP requires users to specify UID and GID in SecurityContext when submitting a pod to a cluster. The entire runtime environment of the user is subject to these settings.</p>
<p>With PSPs, users can be isolated when accessing data, which is all stored in Ceph. Multi-tenancy is thereby easily managed.</p>
<p><strong>Workflows</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-4-f3ae0b7573602bf2edf534766994d20b.png" width="653" height="501" class="img_ev3q"></p>
<p>What comes next is basic workflows. The local configurations are rendered into a job YAML and then submitted. All dependency data of the user is synchronized to CephFS, and the pod is mounted with a PVC. Each user has the PVC permissions of their own directory in their own namespace. The permissions are managed and controlled through IBS. In this way, jobs are submitted to the cluster to run.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="in-depth-customization-on-volcano">In-depth Customization on Volcano<a href="https://volcano.sh/blog/ruitian2-en#in-depth-customization-on-volcano" class="hash-link" aria-label="Direct link to In-depth Customization on Volcano" title="Direct link to In-depth Customization on Volcano" translate="no">​</a></h2>
<p>In the basic submission framework, Ruitian provides libraries for users and is developing a submission tool, Jobctl. This tool can be used as a command line tool or as the Python list that is input to the notebook or directly to the Python script of the user. Jobctl supports asynchronous and synchronous submissions. In the asynchronous mode, jobs are continuously submitted to the entire cluster. After the jobs are submitted, Jobctl exits directly. In the synchronous mode, Jobctl submits and watches jobs, and returns the execution results to the user only after the jobs are complete.</p>
<p>With Jobctl, Kubernetes complexities can be shielded for users. In addition, command line submission and Python Lib integration are supported, and the most basic parallel execution by replicas and by day is provided.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-5-58cb111cb2616f41c72ba4d7e28d873b.png" width="711" height="674" class="img_ev3q"></p>
<p><strong>OOM Auto Scale Up</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-6-3ec8b5a382e967ebd5380603e666217a.png" width="677" height="228" class="img_ev3q"></p>
<p>The first customization is to scale up resources of the entire job during OOM. Users may not be able to configure the exact memory required, and need to submit the job again for verification after the OOM. Therefore, Ruitian customized OOMKill Auto Scale-Up to modify the Volcano Controller to automatically scale up the resources requested by the OOMKill pods. After the scale-up, the jobs are automatically submitted again. The user will be informed upon the successful submission. This function guarantees reasonable memory requests without manual intervention, combining the Volcano policy event mechanism mentioned above.</p>
<p><strong>MinSuccess</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-7-f30e26925fe2c531af7a00b2916b6728.png" width="509" height="374" class="img_ev3q"></p>
<ul>
<li class="">
<p>If the number of pods that run to completion reaches minAvailable, the job is complete.</p>
</li>
<li class="">
<p>Non-Gang jobs cannot be flexibly scheduled.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-8-b4befdd1d562de6062fe663b361f1eae.png" width="547" height="370" class="img_ev3q"></p>
<ul>
<li class="">
<p>If the number of pods that run to completion reaches minSuccess, the job is complete.</p>
</li>
<li class="">
<p>Decouple the number of jobs required by Gang and the number of jobs required for completing Jobs.</p>
</li>
</ul>
<p><strong>NodeZone</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-9-23f4cd6edeca3795315f7eb6883e5daa.png" width="683" height="569" class="img_ev3q"></p>
<ul>
<li class="">
<p>One Volcano instance manages all nodes.</p>
</li>
<li class="">
<p>Noisy Neighbor cannot be resolved.</p>
</li>
<li class="">
<p>Resources cannot be reserved for emergency.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-10-815cc26619136a82de9c9623fe3438e4.png" width="692" height="570" class="img_ev3q"></p>
<ul>
<li class="">
<p>Multiple Volcano instances manage multiple zones.</p>
</li>
<li class="">
<p>Certain jobs are physically isolated.</p>
</li>
</ul>
<p><strong>Volcano Namespace Quota</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-11-357ded56b05136dc9a03d56072113937.png" width="573" height="539" class="img_ev3q"></p>
<p>The default Kubernetes quotas cannot satisfy Ruitian's system. When the native namespace quota is triggered, pods directly fail. Therefore, Ruitian re-designed the quota in Volcano.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-12-a92fbee48b628d535ee4c344843d9884.png" width="569" height="536" class="img_ev3q"></p>
<ul>
<li class="">When the Volcano namespace quota is triggered, pod creation in a queue will be suspended.</li>
</ul>
<p><strong>Volcano Monitoring and Alarming</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-13-5af9e626b919530ee4bc6a2547775ac1.png" width="508" height="415" class="img_ev3q"></p>
<p>Volcano Exporter</p>
<ul>
<li class="">
<p>Outputs the queue label of the job.</p>
</li>
<li class="">
<p>Outputs the queue capability.</p>
</li>
<li class="">
<p>Outputs the job start time and end time.</p>
</li>
</ul>
<p>WatchDog</p>
<ul>
<li class="">
<p>Registers the Informer and collects metrics.</p>
</li>
<li class="">
<p>Reports job failure and usage alarms.</p>
</li>
<li class="">
<p>Automatically updates the queue capability.</p>
</li>
</ul>
<p><strong>Job dashboard</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-14-8c0cb114dc9b64c429334922cf5fa938.png" width="695" height="319" class="img_ev3q"></p>
<p>The upper panel covers the information about all jobs and provides a state table to display the job completion status. The panels below display the CPU, memory, and network resource usage. The negative axes refer to wasted cluster resources, which are allocated to pods (jobs) but not actually used during job running. These time series tables can provide resource insights to users in real time.</p>
<p><strong>Cluster resource dashboard</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-15-6d79c61a7d5d592ff94fd9382e5daa99.png" width="690" height="311" class="img_ev3q"></p>
<p>Graphs show the usage of overall queue resources, including CPU and memory. For jobs that consume a large amount of resources, for example, 300 or 500 GiB of memory, users need to know whether there is any node that can run such jobs. Therefore, we need to display the resource usage of each node available.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="challenges-and-solutions-in-high-concurrency-scenarios">Challenges and Solutions in High-Concurrency Scenarios<a href="https://volcano.sh/blog/ruitian2-en#challenges-and-solutions-in-high-concurrency-scenarios" class="hash-link" aria-label="Direct link to Challenges and Solutions in High-Concurrency Scenarios" title="Direct link to Challenges and Solutions in High-Concurrency Scenarios" translate="no">​</a></h2>
<p>In Ruitian, the number of compute nodes in a single cluster has reached 200 and long-time jobs (1 week) and short-time jobs (1 minute) co-exist. The total storage capacity is 1.5 PB, the read/write bandwidth is 15 GB/s, and the number of pods increases by 100,000 to 300,000 every day. These brought challenges.</p>
<p><strong>Challenge 1: Too Large Jobs</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-16-0ff6310d04cda4fef3eb08ae223577dd.png" width="684" height="741" class="img_ev3q"></p>
<p>Issues:</p>
<ul>
<li class="">
<p>The CPU usage exceeds Max Request Size (1.5 MB) of etcd when there are a large number of pods.</p>
</li>
<li class="">
<p>Adjusting Max Request Size will impact etcd due to a large number of objects.</p>
</li>
</ul>
<p>Solution:</p>
<ul>
<li class="">Submit a job in the form of multiple replicas for a single task.</li>
<li class="">The information provided by ENV plug-ins in a pod is read in Sharding mode.</li>
</ul>
<p><strong>Challenge 2: Out of CPU/Memory</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-17-63fd719661928f6163db292171ae929d.png" width="692" height="387" class="img_ev3q"></p>
<p>Issues:</p>
<ul>
<li class="">
<p>There are a limited number of nodes, and a large number of short-term jobs keep being scheduled.</p>
</li>
<li class="">
<p>Kubelet PLEG is under great pressure, and the pod binding takes too long.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-18-c89169b393f7a23dae87f7874f501ebe.png" width="703" height="522" class="img_ev3q"></p>
<p>Issues:</p>
<ul>
<li class="">
<p>There are a limited number of nodes, and a large number of short-term jobs keep being scheduled.</p>
</li>
<li class="">
<p>Kubelet PLEG is under great pressure, and the pod binding takes too long.</p>
</li>
<li class="">
<p>The default session interval of Volcano is 1s. As a result, cache snapshots are inconsistent.</p>
</li>
<li class="">
<p>Out of CPU + Out of Memory</p>
</li>
</ul>
<p>Solution:</p>
<ul>
<li class="">
<p>Add binding task numbers for nodes.</p>
</li>
<li class="">
<p>When a snapshot is being created for a session, the nodes whose binding task number is smaller than 0 are skipped.</p>
</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/ruitian2-19-5140984eed42984b7ba1bcb185435b9d.png" width="702" height="374" class="img_ev3q"></p>]]></content:encoded>
            <category>case-study</category>
            <category>financial</category>
            <category>distributed-computing</category>
            <category>ruitian</category>
        </item>
        <item>
            <title><![CDATA[HPC on Volcano: How Containers Support HPC Applications in the Meteorological Industry]]></title>
            <link>https://volcano.sh/blog/hpc-en</link>
            <guid>https://volcano.sh/blog/hpc-en</guid>
            <pubDate>Tue, 24 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[This article uses a traditional HPC application, the Weather Research and Forecasting (WRF) model, as an example to describe how Volcano works for HPC applications.]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>This article was firstly released at <code>Container Cube</code> on October 27th, 2020, refer to <a href="https://mp.weixin.qq.com/s/wLIoJeUSey9tzOCV6GZRig" target="_blank" rel="noopener noreferrer" class="">HPC on Volcano：容器在气象行业HPC高性能计算场景的应用</a></p>
</blockquote>
<p>Kubernetes has become the de facto standard for cloud native application orchestration and management. An increasing number of applications are being reconstructed or built to employ Kubernetes. High performance computing (HPC) is a popular distributed computing mode and is widely used in many fields. For users who have deployed HPC applications and are eager to containerize and manage their applications using Kubernetes, Volcano, CNCF's first distributed scheduling system for batch computing, is a good choice. Volcano supports multiple types of computing frameworks, such as Spark, TensorFlow, and Message Passing Interface (MPI). This article uses a traditional HPC application, the Weather Research and Forecasting (WRF) model, as an example to describe how Volcano works for HPC applications.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="about-hpc">About HPC<a href="https://volcano.sh/blog/hpc-en#about-hpc" class="hash-link" aria-label="Direct link to About HPC" title="Direct link to About HPC" translate="no">​</a></h2>
<p>HPC and HPCC are two common terms in the area of computing jobs. HPCC is short for high performance computer cluster, which integrates a large amount of computer software and hardware to conduct parallel computing on large computing jobs. HPC is widely used in CAE simulation, animation rendering, physics, chemistry, oil exploration, and life, meteorological, and environmental science.</p>
<p>An HPCC consists of three parts:</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-1-c03e66dc5ac4caf9e04a4166e7a0e522.png" width="691" height="109" class="img_ev3q"></p>
<ul>
<li class="">
<p>Portable Batch System (PBS): A resource manager that manages all node resources in a cluster. Other common resource management systems include Slurm and Platform Load Sharing Facility (or simply LSF).</p>
</li>
<li class="">
<p>Maui: A third-party job scheduler that supports multiple priority-based scheduling policies, resource reservations, and preemption mechanisms. Maui provides more advanced scheduling services than the default schedulers embedded in most resource managers.</p>
</li>
<li class="">
<p>Open MPI: An upper-layer communication environment that provides a communication library and compilation functions and starts distributed tasks.</p>
</li>
</ul>
<p>PBS and Maui are imperceptible to users. Users only need to submit jobs in the mode defined by PBS and do not need to understand internal implementation details. However, users are required to learn how to use Open MPI to compile parallel computing applications.</p>
<p>The following uses <strong>mpirun -np 4 ./mpi_hello_world</strong> as an example to illustrate how an MPI job runs.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-2-4b8b5ecdb5ad14d113f599ae75350e51.png" width="678" height="284" class="img_ev3q"></p>
<ul>
<li class="">
<p>Invoke Open MPI or other MPI libraries to compile the source code. In this example, Hello World! is printed.</p>
</li>
<li class="">
<p>Use a compiler that supports MPI to compile the executable program mpi_hello_world.</p>
</li>
<li class="">
<p>Distribute mpi_hello_world to each node. You can also make mpi_hello_world accessible by sharing the file system.</p>
</li>
<li class="">
<p>Run mpirun to execute mpi_hello_world in parallel.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="about-wrf">About WRF<a href="https://volcano.sh/blog/hpc-en#about-wrf" class="hash-link" aria-label="Direct link to About WRF" title="Direct link to About WRF" translate="no">​</a></h2>
<p>The Weather Research and Forecasting (WRF) model is a common HPC application. WRF is a mesoscale numerical weather prediction (NWP) system designed for both atmospheric research and forecasting. It allows researchers to produce simulations based on real or hypothetical atmospheric conditions.</p>
<p>WRF consists of multiple modules with different processing flows. The following illustrates a WRF process.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-en3-163acb1bddbfb517cbbe3ed8def45025.png" width="1019" height="269" class="img_ev3q"></p>
<p>As shown in the figure above, this WRF process has four parts:</p>
<ul>
<li class="">
<p>External data sources</p>
</li>
<li class="">
<p>WRF Pre-Processing System (WPS)</p>
</li>
<li class="">
<p>WRF, which is the core simulation system</p>
</li>
<li class="">
<p>Post-processing system</p>
</li>
</ul>
<p><strong>External Data Sources</strong></p>
<p>The WRF model data includes static geographical data and gridded data. Geographical data refers to geographical information in a domain, such as mountains, rivers, lakes, and forests. Gridded data refers to the meteorological environment data in a domain, such as temperature, wind speed, wind direction, air humidity, and rainfall.</p>
<p><strong>WPS</strong></p>
<p>——WPS，WRF Pre-processing System）</p>
<p>WPS loads geographical and meteorological data, interpolates meteorological data to grids, and finally provides data input for the WRF. It consists of three main programs:</p>
<ul>
<li class="">
<p>geogrid.exe: defines model projections, domain range, and nesting relationships, interpolates terrestrial parameters, and processes terrain and gridded data.</p>
</li>
<li class="">
<p>ungrib.exe: extracts required meteorological parameters from the GRIB data.</p>
</li>
<li class="">
<p>metgrid.exe: interpolates meteorological parameters to simulation domains.</p>
</li>
</ul>
<p>The three programs work together to generate data used for meteorological simulation. Currently, the three programs do not support MPI parallel computing.</p>
<p><strong>WRF</strong></p>
<p>As the core module of the WRF model, WRF performs simulation and prediction based on the meteorological information generated by WPS. WRF consists of two main programs:</p>
<ul>
<li class="">
<p>real.exe: initializes the actual meteorological data.</p>
</li>
<li class="">
<p>wrf.exe: simulates and predicts results.</p>
</li>
</ul>
<p>real.exe and wrf.exe can run as MPI parallel jobs to improve the computing speed.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-en4-cd5c2708337d385205668bfdd333c013.png" width="1511" height="455" class="img_ev3q"></p>
<p>As shown in the preceding figure, wrfinput_d0X and wrfbdy_d0X are the calculation results generated by real.exe. wrf.exe performs meteorological simulation based on these results to generate the final result wrfout_dxx_yyyy-mm-dd_hh:mm<!-- -->:ss<!-- -->, which is verified and displayed by the post-processing system.</p>
<p><strong>Post-Processing System</strong></p>
<p>The post-processing system verifies and displays the calculation results generated by WRF. It consists of various third-party images and verification tools. The following figure shows the simulation and prediction results of the relative humidity in each area in CONUS 2.5km case.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-en5-afaf6ebe8702c2b75cfa701fabe7e3b2.png" width="1034" height="796" class="img_ev3q"></p>
<p>CONUS 2.5km refers to the 2.5 km resolution case covering the Continental U.S. (CONUS) domain. (In this case, the entire domain is divided into multiple cubes of 2.5 km x 2.5 km x 2.5 km. The meteorological information in each cube is considered consistent.)</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="hpc-on-volcano">HPC on Volcano<a href="https://volcano.sh/blog/hpc-en#hpc-on-volcano" class="hash-link" aria-label="Direct link to HPC on Volcano" title="Direct link to HPC on Volcano" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="911" height="363" class="img_ev3q"></p>
<p>As mentioned above, an HPCC consists of a resource manager, scheduler, and MPI parallel computing library. In the container context, Kubernetes functions as the resource manager and Volcano functions as the scheduler.</p>
<p>To run HPC applications in the Kubernetes+Volcano environment is to run HPC jobs in containers, as shown in the following figure.</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="511" height="370" class="img_ev3q"></p>
<p>Two types of containers are involved: master and worker. The master container starts the mpirun and mpiexec commands, and the worker containers run computing jobs.</p>
<p>To support MPI jobs, Volcano has been enhanced to provide the following functions:</p>
<ul>
<li class="">Multiple pod charts, which are used to define master and worker pods at the same time</li>
<li class="">Gang scheduling, which ensures that all pods in a job are simultaneously started</li>
<li class="">Mapping of host IP addresses of the master and worker pods</li>
<li class="">SSH password-free login between the master and worker pods</li>
<li class="">Job lifecycle management</li>
</ul>
<p>The following is an example of running an MPI job on Volcano.</p>
<ol>
<li class="">Define a Volcano MPI job by the mpi_sample.yaml file.</li>
</ol>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: batch.Volcano.sh/v1alpha1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Job</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: mpi-job</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  labels:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    # Set the job type based on service requirements.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "Volcano.sh/job-type": "MPI"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # Set the minimum number of required pods (less than the total number of replicas).</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # For this example, set it to the total number of mpimaster and mpiworker replicas.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  minAvailable: 3</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # Specify Volcano as the scheduler.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  schedulerName: Volcano</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  plugins:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    # Configure SSH password-free authentication.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ssh: []</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    # Configure the network information, such as hosts file and headless Service, required for running the job.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    svc: []</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # Define a policy in which the entire MPI job will be restarted when a pod is evicted.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  policies:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - event: PodEvicted</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      action: RestartJob</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  tasks:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - replicas: 1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name: mpimaster</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      # Define another policy in which the entire MPI job will be considered as complete when mpiexec execution completes.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      policies:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - event: TaskCompleted</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          action: CompleteJob</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      template:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        spec:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          # The Volcano-related information will be stored in the /etc/Volcano directory.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          containers:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            # The master container will perform the following operations:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            # 1. Start the sshd service.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            # 2. Obtain the mpiworker container list from /etc/Volcano/mpiworker.host.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            # 3. Run mpirun/mpiexec.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - command:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - /bin/sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - -c</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - |</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  MPI_HOST=`cat /etc/Volcano/mpiworker.host | tr "\n" ","`;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  mkdir -p /var/run/sshd; /usr/sbin/sshd;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  mpiexec --allow-run-as-root --host $`{MPI_HOST}` -np 2 mpi_hello_world;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              image: Volcanosh/example-mpi:0.0.1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              imagePullPolicy: IfNotPresent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              name: mpimaster</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              ports:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - containerPort: 22</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  name: mpijob-port</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              workingDir: /home</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              resources:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                requests:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  cpu: "100m"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  memory: "1024Mi"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                limits:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  cpu: "100m"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  memory: "1024Mi"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          restartPolicy: OnFailure</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          imagePullSecrets:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: default-secret</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - replicas: 2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name: mpiworker</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      template:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        spec:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          containers:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            # The worker containers will only start the sshd service.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - command:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - /bin/sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - -c</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - |</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  mkdir -p /var/run/sshd; /usr/sbin/sshd -D;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              image: Volcanosh/example-mpi:0.0.1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              imagePullPolicy: IfNotPresent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              name: mpiworker</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              ports:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                - containerPort: 22</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  name: mpijob-port</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              workingDir: /home</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              resources:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                requests:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  cpu: "100m"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  memory: "2048Mi"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                limits:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  cpu: "100m"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                  memory: "2048Mi"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          restartPolicy: OnFailure</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          imagePullSecrets:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: default-secret</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Commit the Volcano MPI job.</li>
</ol>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="514" height="221" class="img_ev3q"></p>
<p>The job is executed.</p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-9-d2b20fe43ff44616ed840f3d14c10c1e.png" width="538" height="186" class="img_ev3q"></p>
<ol start="3">
<li class="">Check the execution result of the master pod.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/hpc-10-5612b29e0afddc25b9746e49f0af01ec.png" width="689" height="78" class="img_ev3q"></p>
<p>The preceding execution result shows that Volcano clears only the worker pods and retains the master pod after the job completes. In this way, you can run the kubectl command to obtain the execution result.</p>
<p>Note that there may be latency in the container network. When a job starts, the master pod may fail to connect to the worker pods. If this happens, Volcano will automatically restart the master pod to make the job run properly.</p>
<p>If you intend to use Volcano to run a WRF job, you need to replace mpi_hello_world with real.exe and wrf.exe and perform the following operations:</p>
<ul>
<li class="">
<p>Build Docker images, which must include a complete WRF running environment.</p>
</li>
<li class="">
<p>Mount the data (original or intermediate data) required for calculation to the corresponding container.</p>
</li>
</ul>
<p>In this way, you can run meteorological simulation jobs in the Kubernetes+Volcano environment.</p>]]></content:encoded>
            <category>hpc</category>
            <category>case-study</category>
            <category>meteorological</category>
            <category>wrf</category>
        </item>
        <item>
            <title><![CDATA[How Does Volcano Empower a Content Recommendation Engine in Xiaohongshu]]></title>
            <link>https://volcano.sh/blog/xiaohongshu-en</link>
            <guid>https://volcano.sh/blog/xiaohongshu-en</guid>
            <pubDate>Tue, 24 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Best practice of Volcano at Xiaohongshu]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>This article was firstly released at <code>Container Cube</code> on May 27th, 2021, refer to <a href="https://mp.weixin.qq.com/s/nZXZx78EQoHzRj1-LqMPQQ" target="_blank" rel="noopener noreferrer" class="">小红书基于Volcano的大规模离线与在线推荐模型训练实践</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="introduction-to-xiaohongshu">Introduction to Xiaohongshu<a href="https://volcano.sh/blog/xiaohongshu-en#introduction-to-xiaohongshu" class="hash-link" aria-label="Direct link to Introduction to Xiaohongshu" title="Direct link to Introduction to Xiaohongshu" translate="no">​</a></h2>
<p>Xiaohongshu is a leading life-sharing community in China. Popular among female users and joined by more and more trendy boys, now Xiaohongshu has more than 100 million monthly active users. This UGC community has hundreds of thousands of notes submitted every day and nearly 10 billion views/hits per day.</p>
<p>The recommendation on the homepage is in the charge of our recommendation team and is one of the core service scenarios of Xiaohongshu. In the first years when Xiaohongshu was established, all of the recommended notes were manually selected without assistance of any machine learning models. As a result, we recommended the same content to almost every user.</p>
<p>Since 2016, we started to explore personalized recommendation for different users. In 2018, the first recommendation machine learning model based on SparkML and GBDT was introduced. It had only tens of thousands of parameters. Since the end of 2018, we accelerated the model iteration. By the second half of 2020, our model scale reached hundreds of billions of parameters. We also introduced online learning, and the model could be updated in hours. From April this year, the model is updated every few minutes, which means the model can capture users' behavior within one or two minutes to get users' short-term interests and generate recommendations that are more appealing for users.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="big-data-architecture-in-xiaohongshu-search-recommendation-and-ad-scenarios">Big Data Architecture in Xiaohongshu Search, Recommendation, and Ad Scenarios<a href="https://volcano.sh/blog/xiaohongshu-en#big-data-architecture-in-xiaohongshu-search-recommendation-and-ad-scenarios" class="hash-link" aria-label="Direct link to Big Data Architecture in Xiaohongshu Search, Recommendation, and Ad Scenarios" title="Direct link to Big Data Architecture in Xiaohongshu Search, Recommendation, and Ad Scenarios" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en1-b5c32116b24c249c2a8b809f0903465e.png" width="1007" height="578" class="img_ev3q"></p>
<p>The architecture consists of four parts. The upper left corner shows the interaction between the client and the real-time service/tracking data service. After being started, the Xiaohongshu app requests an online service for recommendation. The online service caches the recommended notes and requested features, and returns the recommendation results to the client. When the user browses the notes recommended to him/her, a series of interaction behaviors are generated. The interaction behaviors become data flows that pass through the tracking data service and go to the original tracking data flow.</p>
<p>In the lower left corner, there are attribution and summary tasks used to clean and process user behavior data in real time to generate the label data flow. The label data flow and feature data flow are combined to generate the training samples, and the three major products of Xiaohongshu big data: training data, OLAP database, and offline Hive table.</p>
<p>The upper right corner shows online and offline training. Online training trains the data in real time to generate the updated data of the model. Offline training generates a full model and uploads it to the online service.</p>
<p><strong>Behavior Attributions and Labels</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en2-01014df7f93176952fe3ac4620f10a5e.png" width="1292" height="565" class="img_ev3q"></p>
<p>This task for user behaviors can be divided into two parts: attribution and label. Attribution is to associate each behavior captured in data tracking with the past behaviors of the user. For example, you browse 4 notes in the app, one found on the Discovery page, one on the search results page, and two on a blogger's homepage. You click Like for the final piece. Your browsing and clicking Like are tracked. The tracking data does not tell us what happened before the like is given.</p>
<p>We can determine the cause of the like behavior based on the user behavior flow and user's historical browsing records prior to the like. This process is called attribution. Through the attribution task, we can also add labels about why a user follows a blogger, and which of the blogger's notes the user has viewed before following the blogger.</p>
<p>Opposite to attribution, label calculation summarizes the actions performed by a user after a certain behavior. If the user browsed four notes on the Discovery page, for each note Xiaohongshu makes several labels about whether the user liked the notes after browsing, or whether the user tapped to enter the note details page and how long the user stayed on this page. This label data is important for subsequent model training and the generation of daily user reports.</p>
<p><strong>Real-Time Big Data Products for Search, Recommendation, and Ad</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en3-b048816665452a3a9c59a962001bf208.png" width="1201" height="386" class="img_ev3q"></p>
<p>After the label data is generated, the above three big data products are provided for the service.</p>
<p>The model training data is used to train models in real time, and provide more accurate and real-time information about users' latest interests.</p>
<p>Both the ad hoc data analysis and offline warehouse perform analysis based on the label data. The ad hoc data analysis is real-time. For example, if there is any change in the system and policy, effects should be observed immediately from a multi-dimensional segmentation perspective. In contrast, the offline data warehouse provides daily or weekly reports, or shows the changes have been made to certain metrics in the past six months.</p>
<p><strong>Online and Offline Model Training</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en4-49adb35790a11fa021b52b8db06a3846.png" width="928" height="536" class="img_ev3q"></p>
<p>Training data generated after the combination of label data and feature data is used for both offline and online training.</p>
<p>Though the same data source is used, there are differences between online and offline training. For online training, the data source is provided to Kafka for online consumption. After that, a model update data flow is output, which actually means that the last batch of model changes is released online in real time. Offline training is performed on a batch and daily basis. A full migration parameter model is released, and data is migrated back to the online service.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="evolution-from-offline-batch-computing-to-online-stream-computing">Evolution from Offline Batch Computing to Online Stream Computing<a href="https://volcano.sh/blog/xiaohongshu-en#evolution-from-offline-batch-computing-to-online-stream-computing" class="hash-link" aria-label="Direct link to Evolution from Offline Batch Computing to Online Stream Computing" title="Direct link to Evolution from Offline Batch Computing to Online Stream Computing" translate="no">​</a></h2>
<p><strong>Offline Batch Only</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en5-65b844e109bad64d66fc0ee84bd73754.png" width="1064" height="512" class="img_ev3q"></p>
<p>The preceding figure shows the earliest offline batch label calculation process. Click behaviors of users are collected and recorded in the ODS table, that is, the original log table. The attribution and label calculation are performed by the Spark task, which is an offline batch task. The processed data forms a data warehouse table to generate daily reports and experiment reports as big data products. In the batch environment, the report is generated on a T+1 cycle. Generally, we cannot obtain the complete reports until the second or third day after each experiment.</p>
<p><strong>Offline Batch + Online Streaming</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en6-bdf760fdcd6b84b86b3e29bc69dc8eb0.png" width="1065" height="562" class="img_ev3q"></p>
<p>Increase in the number of developers poses higher requirements on service implementation. Therefore, we introduced the real-time link, which is completely based on the Flink framework. The real-time link inputs data through streaming Kafka, outputs the data to Kafka, and sends the data to the OLAP database and real-time experiment analysis. However, the challenge is that Spark and Flink are two different programming frameworks. For example, the logic for determining whether a click on an ad is valid is complex, because an interaction behavior or a stay of at least three seconds after the click is required before the click can be called a valid click.</p>
<p>If there are two data flows, the logic is implemented both in the offline service and the Flink framework. Many problems may occur when the same logic is implemented twice. One problem is that development needs to be repeated in both the Spark and Flink frameworks. A bigger problem is that the logic may be changed after being developed in both of the frameworks.</p>
<p>For some complex scenarios, the change may cause inconsistency between reports and requests. In some other scenarios, when the data warehouse makes a request offline, and the logic is implemented only in the Spark task, but not implemented offline, if we want to view the task, we need to implement the logic again, which will cause extra workload.</p>
<p>After the upgrade we made, all new labels are calculated in real time, not in Spark. However, interruption may occur in the real time mode. After the interruption, calculation may start from the latest data, and the earlier data may have changed. This problem is simple to solve in the offline mode, as we can re-run data of each hour to form the complete data.</p>
<p>We actually need to solve a technical problem: How to convert the real-time Flink training task from an offline data warehouse table to a real-time flow table, use the same computing logic to generate new data and then backfill the new data to the real-time flow table? In this way, the core logic of the real time and offline modes only needs to be implemented in real time, which solves the problem of inconsistent logics between the two developments.</p>
<p><strong>Offline Training</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en7-dc31793033bc2d82eadc25e7a83f28b4.png" width="1154" height="453" class="img_ev3q"></p>
<p>The preceding figure shows the training process of the machine learning model. At the earliest, there was only one batch data calculation task. Feature data and user behavior data are stored in offline tables. The Spark task is used to combine the data to generate a training task, and then release the learning model. The entire process may be performed once a day.</p>
<p><strong>Online + Offline Training</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en8-0e337e1f49779d7bd431f42f7cd9b3ef.png" width="1149" height="476" class="img_ev3q"></p>
<p>To capture users' real-time interests and make judgment on newly released notes more quickly, more real-time update is required for our models. Therefore, Flink is used for real-time model training. After Flink generates data, the Volcano scheduling system is used to update models in real time and in batches.</p>
<h2 class="anchor anchorTargetStickyNavbar_zFqj" id="optimization-and-multi-cloud-management-of-offline-training">Optimization and Multi-cloud Management of Offline Training<a href="https://volcano.sh/blog/xiaohongshu-en#optimization-and-multi-cloud-management-of-offline-training" class="hash-link" aria-label="Direct link to Optimization and Multi-cloud Management of Offline Training" title="Direct link to Optimization and Multi-cloud Management of Offline Training" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en9-d8912e4d152e3ae281a6fa57b9c290b5.png" width="983" height="488" class="img_ev3q"></p>
<p>The preceding figure shows the technology stack of Xiaohongshu in machine learning and big data. Xiaohongshu is a relatively new company without on-premises equipment rooms. All of our services are deployed on clouds provided by cloud vendors, and most of the services are managed through Kubernetes.</p>
<p>We have two important platforms. One is the stream computing platform called Baichuan, which is used to manage the Flink tasks of real-time label computing and online learning mentioned above. The other is the task management platform for machine learning, which is called Firefly. Our model training is based on TensorFlow and runs on the machine learning platform. For sparse and discrete large-scale model training of recommendation, search and advertisement, we also developed a TensorFlow-based training framework, LarC. The framework models of TensorFlow and LarC run on the machine learning platform through Firefly.</p>
<p>The key point between these two platforms is how to schedule tasks to the Kubernetes clusters. In fact, the native Kubernetes has a big problem in this scenario, because it performs scheduling based on individual pods.</p>
<p>However, the stream computing and machine learning tasks are not single-pod tasks. They are tasks performed on a group of pods. Therefore, we have encountered a big challenge at the beginning. Assume that there are two jobs, each job contains 10 pods, and each pod requires one core of CPU. That is, 20 cores are required for the two jobs to run simultaneously. If the current cluster has only 15 available cores and we are using the native Kubernetes scheduler, the scheduler may schedule 7 cores to one job and 8 cores to another, so that both jobs can obtain some resources to run. However, neither of them can be completed properly because the numbers of cores allocated to them do not meet the requirements. As a result, deadlocks occur. This is caused by the limits of the native Kubernetes scheduling.</p>
<p>To solve this, we need to first schedule 10 cores to one job to ensure that it can be properly completed and exited. After that, the 10 cores are released and allocated to another job so that both jobs can be properly completed.</p>
<p>Based on these, we researched products and found Volcano. Its predecessor is Kubernetes batch and can completely meet our requirements. Therefore, we participate in the Kubernetes batch community and become a loyal user of Volcano.</p>
<p><strong>Enhanced Volcano Scheduling: binpack -&gt; task-topology</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en10-0d555ba4a742ba363741ad6608bd7534.png" width="821" height="421" class="img_ev3q"></p>
<p>The scheduling algorithm supported by the native Volcano is binpack. Machine learning training tasks are classified into two types: worker for performing forward and reverse computing, which is a computing task; ps with the main task of storing parameters, which is a memory-type service. If the native open-source Volcano is used, its default scheduling algorithm optimizes the resources to reduce fragments. Therefore, it will schedule as many tasks as possible to the same node, and then schedule all worker and ps tasks of those tasks to the same node. When that node does not have capacity for one of the ps tasks (taking ps1 as an example here), it can only be put on another node.</p>
<p>In this scenario, workers and ps0 are on the same node. The I/O between them does not cross nodes, leading to fast I/O and large storage capacity. But the running speed is slow because ps1 is on another node.</p>
<p>With task-topology algorithm, tasks are scheduled to nodes in a balanced manner, the speed is balanced, and the overall storage capacity is greatly improved. The optimization from binpack to task-topology can increase the throughput of task training by 10% to 20%.</p>
<p><strong>Data Transfer Between Multiple Clouds</strong></p>
<p><img decoding="async" loading="lazy" src="https://volcano.sh/assets/images/xiaohongshu-en11-88e550ff4fc40865bf82eaaad9df2b4f.png" width="846" height="473" class="img_ev3q"></p>
<p>In the online mode, users are distributed to different AZs. The feature cache of the recommendation service is stored in the local AZ. After user data tracking, users are distributed to different clusters based on their requests, and the label system performs computing for each user. Finally, all label system computing is transferred to the cloud vendors that provide offline training and services for us to combine and generate data training, and perform distributed model training. The trained models are distributed to different AZs for online services.</p>
<p>How to implement transfer learning under this architecture Xiaohongshu users consume traffic on the homepage, which is a scenario where a large amount of data is generated and accumulated, and a model involving hundreds of billions of parameters will be trained. How do we use this large model built on recommendations for the search and advertisement scenarios? After the recommendation model is trained, it is synchronized to the search training cluster. The search training uses the search data to discover the recommendation model, and release the final search model online. In this way, the small-scale data training can obtain features of the large recommendation model training, so that the large recommendation model can be utilized by the search scenario.</p>]]></content:encoded>
            <category>case-study</category>
            <category>recommendation</category>
            <category>xiaohongshu</category>
            <category>content-engine</category>
        </item>
    </channel>
</rss>