<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Under the Model</title><link>https://oguzpastirmaci.com/posts/</link><description>Recent content in Posts on Under the Model</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 20 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oguzpastirmaci.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>RDMA Network Locality for Multi-Node Jobs with Kueue</title><link>https://oguzpastirmaci.com/posts/rdma-network-locality-for-multi-node-jobs-with-kueue/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://oguzpastirmaci.com/posts/rdma-network-locality-for-multi-node-jobs-with-kueue/</guid><description>&lt;p&gt;The pods of a multi-node training job talk to each other all the time. So where they land on the RDMA network matters. OCI&amp;rsquo;s cluster network is a three-tier Clos. &lt;a href="https://blogs.oracle.com/cloud-infrastructure/first-principles-zettascale-oci-superclusters"&gt;OCI&amp;rsquo;s write-up of the design&lt;/a&gt; gives these numbers for the three tiers of switches:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The first tier serves up to 256 GPUs, with up to 2 µs of latency.&lt;/li&gt;&#10;&lt;li&gt;The second tier serves up to 2,048 GPUs, with up to 5 µs.&lt;/li&gt;&#10;&lt;li&gt;The third tier serves up to 131,072 GPUs, with up to 8 µs.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The write-up calls the first tier Tier-0. The diagram below calls the other two Tier-1 and Tier-2.&lt;/p&gt;</description></item><item><title>Why Large RoCE Frames Disappeared on OVS-DOCA 3.5</title><link>https://oguzpastirmaci.com/posts/why-large-roce-frames-disappeared-on-ovs-doca-3-5/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://oguzpastirmaci.com/posts/why-large-roce-frames-disappeared-on-ovs-doca-3-5/</guid><description>&lt;p&gt;I looked into GB300 hosts where RDMA broke after an image update. &lt;code&gt;ib_write_bw&lt;/code&gt; between two hosts worked with 512-byte messages. With 64 KiB messages, it showed 0 Gb/s. The links were up on the host and on the switch. Hosts on the older image worked.&lt;/p&gt;&#10;&lt;p&gt;The cause was a small change in how OVS-DOCA reuses its receive buffer pools. On the new version, the pools kept the size for a 1500-byte MTU, although every port said 9216. RoCE frames of about 4.2 KB did not fit, and no counter called them dropped.&lt;/p&gt;</description></item><item><title>Why torchrun Can't Find Node Two on the Host Network</title><link>https://oguzpastirmaci.com/posts/why-torchrun-cant-find-node-two-on-the-host-network/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://oguzpastirmaci.com/posts/why-torchrun-cant-find-node-two-on-the-host-network/</guid><description>&lt;p&gt;If you want RDMA inside a Kubernetes pod, the simplest way is the host network. The pod uses the network namespace of the node, NCCL sees the RDMA NICs directly, and you get the bandwidth you paid for. I tested on two BM.GPU4.8 nodes on OKE, with 8 A100 GPUs and 16 RDMA NICs each. NCCL &lt;code&gt;all_reduce&lt;/code&gt; reached about 191 GB/s bus bandwidth with an 8 GiB buffer.&lt;/p&gt;&#10;&lt;p&gt;Then torchrun gets confused. With the host network, every pod has the host name of its node, and torchrun uses host names to make two decisions. On these nodes, both decisions went wrong. Each node resolves its own name to &lt;code&gt;127.0.1.1&lt;/code&gt;, and the other node cannot resolve it at all. Either no node starts the rendezvous store, or node two cannot find node one.&lt;/p&gt;</description></item></channel></rss>