mrkeyoor.com_
Fri 16 Oct 18:52 UTC
Dev Toolsevaluationupdated 10 Oct 2026

KAI-Scheduler review

KAI-Scheduler decides where AI workloads run in a Kubernetes cluster and how competing teams share GPU capacity. It can hold a distributed job until its workers can run together, apply team quotas, and schedule workloads onto shared GPUs. Cluster operators still choose the rules for interrupting jobs and enforcing GPU memory limits.

+21stars / 7d
Verdict

Our KAI-Scheduler build succeeded in 370 seconds, but its test run ended with 189 passing and 62 failing tests, so cluster adoption still needs release-specific validation. Evaluate it when GPU sharing and hierarchical quotas solve an existing allocation problem. Verify interruption recovery on your own cluster before entrusting shared training capacity to it. If you need enforced GPU memory limits, validate the chosen runtime path too.

We ran it

Lab card: what happened when we ran KAI-SchedulerScreenshot of KAI-Scheduler (github.com/kai-scheduler/KAI-Scheduler)
Install✓ · 109s759 packages
Build✓ · 370s
Tests✗ · 351s189 passed · 62 failed of 251 (go test)
Repo1575 files~256,611 lines of source · 12.1 MB · 20 CI workflows · Dockerfile · tests dir

Answers from our run

Does KAI-Scheduler build from source?

Dependencies installed in 109 seconds (759 packages), and the build succeeded in 370 seconds. We cloned commit 41a22cd into a clean Debian container with 3 CPUs and no project-specific setup.

Do KAI-Scheduler's tests pass?

Not all of them: 189 of 251 passed and 62 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use KAI-Scheduler?

Teams without a running Kubernetes cluster and administrative access: the README's deployment route assumes Kubernetes, Helm, and NVIDIA GPU Operator for GPU workloads.

What are the alternatives to KAI-Scheduler?

Volcano, Kueue. Our KAI-Scheduler build succeeded in 370 seconds, but its test run ended with 189 passing and 62 failing tests, so cluster adoption still needs release-specific validation.

Setup2/5370-second build passes, deployment needs cluster and GPU configuration
Docs4/5Clear queues and sharing modes, main docs need matching to pinned releases
Community4/5October 9 push, current issue work, and an active LTS line
Maturity3/5Build passes, 62 tests fail, and recovery reports need targeted validation

Discussed on

  1. hnShow HN: Kai Scheduler – K8s scheduler optimizing GPU for AI4 points
  2. hnKai Scheduler: Kubernetes Native scheduler for AI workloads at large scale3 points

Who it’s for

Kubernetes platform teams allocating shared GPU capacity across departments or projects.
Operators whose distributed training jobs need their worker pods scheduled together.
Teams needing hierarchical quotas, borrowed capacity, and explicit resource-reclaim policies.
GPU administrators prepared to configure and validate a separate runtime path for memory enforcement.

Who it’s NOT for

Teams without a running Kubernetes cluster and administrative access: the README's deployment route assumes Kubernetes, Helm, and NVIDIA GPU Operator for GPU workloads.
Tenants expecting fractional requests to enforce GPU memory limits by default: NonMemoryEnforced mode permits containers to use more than requested.
Operators enabling consolidation for restart-sensitive training or bare pods without a recovery check: issue 2283 reports failed jobs and deleted pods, and the selective opt-out proposal remains open.
GitOps teams depending on reliable recovery after deleting kai-config without release-specific validation: issue 2371 reports authorization failures after recreation.
Projects requiring our fresh-container suite to pass before evaluation: our run ended with 62 failing tests out of 251.

Setup reality

Our sandbox installed commit 41a22cd in 109 seconds, adding 759 packages, and built it successfully in 370 seconds. Tests failed with exit code 1 after 351 seconds: 189 passed and 62 failed out of 251. The log tail names end-to-end reclaim, resize, timeaware, and upgrade suites but doesn't explain the underlying failures. We used golang:1.24-bookworm, 3 CPUs, and 8 GB of RAM on October 8, 2026.

Deployment needs a running Kubernetes cluster, Helm, and credentials with access to administer the cluster. The README requires NVIDIA GPU Operator for GPU workloads. Pods need a queue label and scheduler name, and should use a workload namespace separate from kai-scheduler. Team quotas and reclaim rules need deliberate configuration.

Default fractional GPU scheduling doesn't enforce memory limits. HAMi-core and NvFractions add runtime components, with CDI/NRI configuration relevant to NvFractions enforcement. OpenShift has runtime-class settings to check, and air-gapped NvFractions deployments must mirror additional artifacts. A passing source build doesn't settle those platform choices.

Gang scheduling waits until the group can run

A distributed training job can waste capacity when some workers start while the rest wait for GPUs. KAI-Scheduler supports gang scheduling: the pod group gets scheduled together or stays waiting. Hierarchical queues then determine whose workloads deserve resources, who can borrow unused capacity, and whose running work can be displaced. That's a sensible combination for a shared AI cluster, provided someone owns the policy decisions. It can operate alongside other Kubernetes schedulers, so adoption can start with selected workloads.

Our checkout contained 1,575 files, roughly 256,611 lines of source, and occupied 12.1 MB. The scope includes GPU sharing, topology-aware placement, and resource reclamation, the process of taking capacity back from running workloads. These features matter when placement and competing teams are already operational problems. On a cluster with one owner and straightforward jobs, another scheduling policy layer can consume attention without solving an urgent problem. Apache-2.0 licensing makes evaluating and modifying the code practical.

What happened when we ran it

Our run installed 759 packages in 109 seconds and successfully built KAI-Scheduler in 370 seconds. We cloned commit 41a22cd on October 8, 2026, into a fresh unprivileged Debian sandbox using golang:1.24-bookworm, with 3 CPUs, 8 GB of RAM, and no secrets. The repository scan found 20 CI workflow files, a Dockerfile, and a tests directory. The successful build establishes that this source revision compiled in that environment. It doesn't establish GPU utilization or scheduling throughput.

The test step failed with exit code 1 after 351 seconds: 189 tests passed and 62 failed out of 251. The log tail lists failures under the end-to-end reclaim, resize, timeaware, and upgrade suites, including TestInPlacePodResize, TestTimeAware, and TestUpgrade. It doesn't contain the underlying exception or assertion text. The tail identifies the failing suites without enough detail to diagnose them. The result is a failed test step, with those named end-to-end suites requiring closer inspection.

Every workload needs a queue and a scheduler name

The quick start requires pods to carry a kai.scheduler/queue label and set schedulerName: kai-scheduler. A fresh deployment creates a default parent queue and leaf queue, but your organizational policy still needs configuring. Submit workloads in a dedicated namespace, not the scheduler's namespace. Kubernetes access and Helm are prerequisites, and the README requires NVIDIA GPU Operator for workloads requesting GPU resources. Installing the chart presumes you're already able to administer that cluster.

The 759-package source install is a contributor cost, separate from the policies you must maintain after deploying the chart. KAI's fairness guide distributes deserved quotas first, then spare capacity according to priority and weight. Queues borrowing beyond their allocation can become reclaim targets. Before rollout, write down which team can interrupt which workload and whether the interrupted job can resume. Queue labels encode those agreements. They can't create agreements your teams haven't made.

Default fractional scheduling does not enforce GPU memory limits

KAI's GPU-sharing guide names NonMemoryEnforced as the default mode. A pod can request a fraction of a GPU or an amount of GPU memory, yet the container may see and use more memory than requested. That is an important distinction for teams sharing hardware between less-trusted tenants. A scheduling reservation describes placement and accounting. The default mode doesn't turn that reservation into a CUDA memory boundary.

Our 3-CPU, 8 GB sandbox run didn't measure GPU-sharing isolation. For runtime enforcement, the documentation points to HAMi-core or NvFractions, each with additional components and configuration. NvFractions needs the GPU-sharing operator, with CDI/NRI configured when enforcement is required. Air-gapped operators must mirror the additional chart and images as well as KAI's own artifacts. If enforced memory limits are a requirement, choose and validate that runtime path before accepting fractional requests from users.

Consolidation can restart work that cannot recover

Open issue 2283 describes consolidation deleting running pods so their controllers can recreate them elsewhere. The reporter says this failed training replicas using restartPolicy: Never and permanently removed bare pods. The requested per-workload consolidation opt-out is attached to an open proposal. Don't assume it's in the released chart. Becoming non-preemptible has a policy cost too: the issue says that workload must fit its queue's quota and loses reclaim eligibility. Teams relying on borrowed capacity should examine that tradeoff.

The 62 failures in our suite don't establish a connection to that consolidation report. A separate open issue 2371 reports components receiving authorization errors after kai-config is deleted and recreated, including through ArgoCD self-heal. That is directly relevant to GitOps recovery, rather than evidence about ordinary placement. Both reports deserve a targeted check on your chosen release. Neither justifies treating the entire scheduler as unusable, but restart-sensitive training and automatic configuration recovery need more proof than a successful compile.

October maintenance supports a trial on a pinned release

KAI-Scheduler's last push was October 9, 2026. GitHub returned 1,561 stars and 226 open issues and PRs, with recent discussion about binder behavior and consolidation. Release v0.18.3 arrived October 6 with a GPU-fractioning chart update. The support policy lists v0.18 as an active LTS line through September 2027. Those dates and current reports show maintenance. They also make release selection consequential: documentation on main can describe behavior beyond the chart you pin.

The 20 workflow files give you upstream checks to inspect, while our 351-second failed test step leaves adoption work unfinished. Evaluate KAI when GPU sharing and hierarchical team quotas solve a problem you can name. Compare Volcano when broader batch scheduling is the priority, or Kueue when deciding which jobs may start is the main need. For KAI, make the acceptance workload include a reclaimed training job, a fractional-memory request, and configuration recovery. Require the chosen release to behave correctly when a worker is interrupted, not merely when capacity is free.

Alternatives

ProjectWhat it isPick it when
Volcano gh↗A Kubernetes batch system with gang scheduling and workload queues.pick this instead when your main requirement is broader batch scheduling rather than KAI-specific GPU sharing policies.
Kueue gh↗A Kubernetes job queueing system that manages admission to shared resources.pick this instead when controlling which jobs may start is the main requirement and existing placement already meets your needs.

What people are saying

  1. [github-trending] kai-scheduler/KAI-Scheduler

Sources

  1. KAI-Scheduler README and deployment prerequisites
  2. KAI queue labels and workload quick start
  3. GPU sharing modes and runtime enforcement
  4. Hierarchical fairness and reclaim policies
  5. Consolidation restart failures and opt-out proposal
  6. Authorization failures after kai-config recreation
  7. KAI release support policy
  8. KAI-Scheduler v0.18.3 release

More dev tools reviews

compose-samples · librepods · sqlmap · coucou · world-execute-me-dsh-pv · mcp-extensions · the whole board →