kai-pending
Skill1.6k starsChanged 3 months agoApache-2.0View on GitHub
Use when a KAI-Scheduler pod or PodGroup is stuck Pending and you need to know why - GPU jobs that won't start, queue quota/limit, fair-share, gang scheduling, fractional GPU, node-pool affinity, or scheduling gates. Reads the PodGroup's scheduling verdict and the scheduler's own per-node fit errors.
1 other project uses a version of this.
Trending
More talk lately.about the whole repository
Most recently taken up by
- NVIDIA/KAI-Schedulerword for word, first seen Oct 8, 2026
Who's talking about kai-scheduler/KAI-Scheduler
- ai-dynamo/grove“Move scheduler-specific schemes out of shared client scheme”GitHub · Jun 15, 2026 · 2 reactions
- ai-dynamo/grove“chore: upgrade Kubernetes deps and local images to 1.35 (incl. controller-runtime v0.23 and KAI-scheduler …”GitHub · May 12, 2026 · 1 reactions
- dsx-ai-factory/run-ai“[bug] status-updater: SumOwnedPodGroupResources counts 0 GPUs for podgroups that request nvidia.com/mig-*”GitHub · Nov 13, 2026
- taichi-dev/KAI-Scheduler“fix(scheduler): keep PodScheduled in cached pods (cherry-pick for v0.18.6-meshy.2)”GitHub · Nov 3, 2026
- JohnnyZPiggy/AccelSched-KAI“PoC-1B B1/B2: pinned native KAI shadow builder and registry probe”GitHub · Oct 27, 2026
The biggest 5 of 28 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 28
Talked about on GitHub (28 times).
On GitHub · 28
- Jun 15, 2026Move scheduler-specific schemes out of shared client scheme — ai-dynamo/grove2 reactions
- May 12, 2026chore: upgrade Kubernetes deps and local images to 1.35 (incl. controller-runtime v0.23 and KAI-scheduler v0.15) — ai-dynamo/grove1 reaction · 15 comments
- Nov 13, 2026[bug] status-updater: SumOwnedPodGroupResources counts 0 GPUs for podgroups that request nvidia.com/mig-* — dsx-ai-factory/run-ai0 reactions
- Nov 3, 2026fix(scheduler): keep PodScheduled in cached pods (cherry-pick for v0.18.6-meshy.2) — taichi-dev/KAI-Scheduler0 reactions
- Oct 27, 2026PoC-1B B1/B2: pinned native KAI shadow builder and registry probe — JohnnyZPiggy/AccelSched-KAI0 reactions
23 more on GitHub
- Oct 19, 2026KAI Scheduler Support — juno-fx/Terra-Official-Plugins0 reactions
- Oct 13, 2026feat(api): add core marker to SubGroup — kai-scheduler/api0 reactions
- Oct 12, 2026build(deps): bump KAI Scheduler to v0.18.5 — kai-scheduler/kai-resource-management0 reactions
- Oct 11, 2026build(deps): bump KAI Scheduler to v0.18.4 — kai-scheduler/kai-resource-management0 reactions
- Oct 11, 2026build(deps): bump KAI Scheduler to 0.0.0-173748a and its Go module to v0.18.5 — kai-scheduler/kai-resource-management0 reactions · 1 comment
- Oct 7, 2026feat: add NUMA memory group placement — kai-scheduler/api0 reactions · 1 comment
- Oct 6, 2026build(deps): bump KAI Scheduler to v0.18.3 — kai-scheduler/kai-resource-management0 reactions
- Oct 6, 2026build(deps): bump KAI Scheduler to 0.0.0-6a40ea3 and its Go module to v0.18.3 — kai-scheduler/kai-resource-management0 reactions · 1 comment
- Oct 5, 2026refactor(deps): consume API types from github.com/kai-scheduler/api — kai-scheduler/kai-resource-management0 reactions · 1 comment
- Oct 5, 2026refactor(deps): consume KAI types from github.com/kai-scheduler/api — kai-scheduler/kai-resource-management-api0 reactions
- Oct 1, 2026build(deps): bump KAI Scheduler to v0.18.2 — kai-scheduler/kai-resource-management0 reactions
- Oct 1, 2026build(deps): bump KAI Scheduler to 0.0.0-1db3d56 and its Go module to v0.18.2 — kai-scheduler/kai-resource-management0 reactions · 1 comment
- Sep 26, 2026fix(chart): create vgpu cache dirs 1777 in libsync — Project-HAMi/KAI-resource-isolator0 reactions · 2 comments
- Sep 8, 2026chore: dev-test kai-scheduler pkg at main HEAD, wire FIPSOnly through (not for merge) — dsx-ai-factory/run-ai0 reactions · 4 comments
- Sep 4, 2026feat: Add additional projects — aptakube/kubespec.dev0 reactions · 2 comments
- Sep 1, 2026fix(deploy): bump KAI Scheduler to v0.17.0 — ai-dynamo/dynamo0 reactions · 5 comments
- Aug 19, 2026build: source KAI Scheduler types from the scheduler repo — kai-scheduler/kai-resource-management-api0 reactions
- Aug 8, 2026fix(chart): make containers and vgpulock dirs writable by non-root workloads — Project-HAMi/KAI-resource-isolator0 reactions · 3 comments
- Jun 17, 2026Integration: KAI Scheduler — energy efficiency placement signal and queue chargeback — aitra-ai/aitra-meter0 reactions
- Jun 6, 2026[Add] KAI Scheduler (kai-scheduler/KAI-Scheduler) — PyTorchKR/landscape0 reactions
- Apr 23, 2026ACMM outreach: kai-scheduler/KAI-Scheduler — kubestellar/console0 reactions
- Mar 31, 2026[Content][2026-05-04] 大规模 GPU 调度:拓扑、队列、公平性的系统化实践 — pacoxu/AI-Infra0 reactions
- Mar 26, 2026[Feature] Support KAI Scheduler as a gang scheduling backend — sgl-project/rbg0 reactions
Other versions1 project uses a version of this.
Word for word · 1
- NVIDIA/KAI-Scheduler★ 1.6k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 16
When a branch points to a references/ file, read that file and follow it before running anything else - the procedure lives there, not here.
- Very specific: line 79
When the pod / PodGroup don't answer, read the owning component's logs - find its deployment with kubectl -n <kai scheduler namespace> get …
- Very specific: line 82
no PodGroup (pod-group-name missing) -> pod-grouper (unknown owner, webhook reject, panic).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
KAI: why is my job pending?
A KAI "job" is a Pod (single) or PodGroup (gang). Its verdict is on the PodGroup's
.status.schedulingConditions, one condition per node-pool (nodePool names it); read each
condition's reasons[] - the top-level reason/message are deprecated. Walk the steps in order.
When a branch points to a references/ file, read that file and follow it before running
anything else - the procedure lives there, not here.
1. Rule out non-KAI causes - stop if any holds
Running/ContainerCreating/ImagePullBackOff/CrashLoopBackOff-> not scheduling; check the image / volume / app.SchedulingGated,spec.schedulingGatesset, orJob.spec.suspend: true-> held by design -> read scheduling-gates.spec.schedulerName != kai-scheduler-> KAI never sees the pod (no PodGroup); set it.- unbound PVC, native
ResourceQuota(not a KAIQueue), or cordoned node -> plain Kubernetes, not KAI.
2. Fetch the verdict
PG=$(kubectl get pod <pod> -n <ns> -o jsonpath='{.metadata.annotations.pod-group-name}')
kubectl get podgroup "$PG" -n <ns> -o json \
| jq '.status.schedulingConditions[] | {nodePool, reasons: (.reasons | unique_by(.message))}'- no
pod-group-nameannotation -> never grouped -> step 5 (pod-grouper). schedulingConditionsempty -> no verdict yet; re-check. Persists -> scheduler down, or gated (step 1).- populated ->
reasons[]repeats per cycle;unique_by(.message)dedupes, the richest message (e.g.MaxNodePoolResources) is the verdict. Take.reason-> step 3.
3. Explain the reason to the user - read its .message, then:
For these reasons, guide the user (do not apply changes yourself):
QueueDoesNotExist-> suggest setting thekai.scheduler/queuelabel to an existing queue, or creating it (+ parent). (default-queuenamed = no label at all.)OverLimit(allocated + requested > limit) -> suggest waiting, lowering the request, or raising the limit.NonPreemptibleOverQuota(allocatedNP + requestedNP > deserved) -> suggest raisingquota, or making the workload preemptible. If preemptibility is not explicitly set, suggest using a priority class withvalue < 100.
For the reason PodSchedulingErrors go to step 4.
4. PodSchedulingErrors - read the per-node fit detail
The default message is an aggregated histogram, to get per-node numbers (requested / used / capacity) try to read this:
- per-node lines are in the condition
message(<node-a>: Insufficient GPUs, requested: 2, used: 6, capacity: 8). (available if installed with--detailed-fit-errors=true) - otherwise the same detail is only in the scheduler log (
Full fit error: ...) -> step 5. (available if installed with high verbosity-v=6)
Match the per-node reason (or, with just the histogram, the short dimension):
- a node's
capacity>= request butusedblocks it -> capacity is held by others -> contention / preemption -> read fair-share. capacity< request on every node -> too big for any single node -> read node-fit.- a node-affinity / selector / taint predicate reason (not a resource shortage) -> affinity trap -> read node-pool-affinity.
Resources were found for N pods while M are required for gang scheduling-> each pod fits but notminMemberat once -> read gang.gpu-fraction/gpu-memoryrequest -> fractional fit isn't decidable here yet. Treat whole-GPU fit as context only.
5. Object path silent - which component's logs
When the pod / PodGroup don't answer, read the owning component's logs - find its deployment with
kubectl -n <kai scheduler namespace> get deploy (names are install-specific):
- no PodGroup (
pod-group-namemissing) -> pod-grouper (unknown owner, webhook reject, panic). - PodGroup exists,
schedulingConditionsstays empty, no event -> scheduler (no verdict produced). PodSchedulingErrorshistogram too vague -> scheduler at-v=6carries the per-nodeFull fit error(same data--detailed-fit-errors=trueputs in the verdict; step 4).- scheduled but not Running (
BindRequest.status.phase: Failed) -> binder (reservation timeout, scale-up, bind error).
kubectl logs keeps only recent lines.
RBAC
The verdict and fit errors are in your own PodGroup. fair-share needs cluster-scoped get queues;
the scheduler logs need read access in the scheduler's namespace. Lack them -> say so, don't guess.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

