<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Scheduling on Osman Goni Nahid</title><link>https://osmangoninahid.github.io/tags/scheduling/</link><description>Recent content in Scheduling on Osman Goni Nahid</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sat, 03 Oct 2026 00:00:00 +0400</lastBuildDate><atom:link href="https://osmangoninahid.github.io/tags/scheduling/index.xml" rel="self" type="application/rss+xml"/><item><title>The GPU allocation model: why the number lies</title><link>https://osmangoninahid.github.io/gpu-allocation-model-why-the-number-lies/</link><pubDate>Sat, 03 Oct 2026 00:00:00 +0400</pubDate><guid>https://osmangoninahid.github.io/gpu-allocation-model-why-the-number-lies/</guid><description>&lt;p&gt;A fixed fleet, many teams, one dashboard number: &lt;em&gt;available GPUs&lt;/em&gt;. On a shared cluster that number is not read — it is assembled from four sources. Every capacity ticket I handled this year was two of them disagreeing.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://osmangoninahid.github.io/images/gpu-allocation-lies.gif" alt="Four sources (Kubernetes nodes, platform records, scheduler queues, batch scheduler) feed one &amp;#39;available GPUs&amp;#39; number; five lies cycle through — a node that left, a GPU idle on one side and busy on the other, a frozen usage sync, MIG slices counted as devices, a Ready node with zero GPUs — then the fix" loading="lazy"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 id="the-model"&gt;The model&lt;/h2&gt;&#10;&lt;pre class="mermaid"&gt;&#10;graph TB&#10; C[&amp;#34;cluster&amp;lt;br/&amp;gt;nodes · GPU types · MIG slices&amp;#34;] --&amp;gt;|&amp;#34;nodes → tenant&amp;lt;br/&amp;gt;target: k8s | slurm&amp;#34;| T[&amp;#34;tenant&amp;#34;]&#10; T --&amp;gt;|&amp;#34;GPUs by type → workspace&amp;#34;| W[&amp;#34;workspace&amp;lt;br/&amp;gt;queue: capability · deserved · borrow&amp;#34;]&#10; W --&amp;gt; P[&amp;#34;pods&amp;#34;]&#10;&lt;/pre&gt;&#10;&#10;&lt;p&gt;Three levels, three owners. A node serves one &lt;em&gt;target&lt;/em&gt; — Kubernetes or the batch scheduler — never both. A workspace is a scheduler queue with a hard ceiling, a deserved share, and a borrowing flag.&lt;/p&gt;</description></item></channel></rss>