Kubernetes 1.37 Gang Scheduling Beta: Fix GPU Training Deadlocks Kubernetes 1.37 “Garhwal,” released August 26, 2026, includes gang scheduling in Beta, which prevents partial-job deadlocks that can leave idle GPUs costing around $467 per event. The feature, detailed in a September 8 Kubernetes team blog post, introduces the PodGroup API at scheduling.k8s.io/v1beta1 with a minCount field to ensure all pods in a group are placed simultaneously. Workload-aware preemption also graduated to Beta, targeting complete PodGroups to avoid evicting partial training runs. Gang scheduling is disabled by default and requires enabling the GenericWorkload feature gate. Kubernetes 1.37 “Garhwal” dropped August 26. Most writeups are leading with scale-to-zero HPA, and yes, that feature is genuinely useful. But if your team runs distributed AI training on Kubernetes, the release that matters is the one on September 3: gang scheduling graduated to Beta, and the workload-aware scheduling blog https://kubernetes.io/blog/2026/09/08/kubernetes-v1-37-advancing-workload-aware-scheduling/ from the Kubernetes team spells out what just changed. This is the fix for one of the most expensive scheduling bugs in production ML infrastructure — the partial-job deadlock that leaves hundreds of dollars in idle GPUs doing nothing while your training job never actually starts. The $467 Problem Nobody Talks About Here is what happens when you submit a 32-GPU distributed PyTorch job to a standard Kubernetes cluster: the default scheduler places 28 pods across available nodes, then runs out of GPU resources for the remaining 4. Those 28 pods sit in Running state, consuming GPU memory and cluster resources, waiting for the stragglers. The job makes no progress. At H100 cloud rates, 28 idle GPUs for 40 minutes costs around $467 — and that is one deadlock event, on one cluster, on one job. Make it worse: submit two jobs simultaneously. Job A holds 28 GPUs waiting for 4 more. Job B holds 20 GPUs waiting for 12 more. Each is blocking resources the other needs. Neither ever completes. The only fix is manual intervention: delete both jobs, free the cluster, reschedule. This is not a rare edge case. It is a structural problem with how the default Kubernetes scheduler was built — one pod at a time, with no awareness of group placement requirements. Teams have been working around this for years using Volcano, Kueue, or custom batch frameworks. These tools work, but they add operational complexity: a separate scheduler to maintain, version skew to track, a different API surface to debug. Gang scheduling Beta in Kubernetes 1.37 is the beginning of a native answer. What Gang Scheduling Does in 1.37 Gang scheduling introduces the PodGroup API at scheduling.k8s.io/v1beta1 . A PodGroup is a named object with one critical field: minCount . It declares the minimum number of pods that must be placeable simultaneously before any of them get bound to nodes. Pods belong to a group via a label: scheduling.k8s.io/pod-group: