the xla path · 0/14
start the path

the xla path · chapter 13 of 14 · part ii, the runtime

Single controller

One Python program drives an entire pod of chips, and the workers underneath it never see your script at all.

the goal Given the McJAX architecture from chapter 12, explain what changes and what stays fixed when the same JAX code runs against Pathways instead, and state plainly which parts of the system you can and cannot verify yourself.

mastery work · this chapter0/4
manual items are your word; auto items complete from your streaks, labs, and can-you ticks · stored in your browser only
§ 01

One client, not one per host

Pathways inverts the shape chapter 12 built. Instead of one Python process per host, each blindly trusting the others to be in lockstep, there is exactly one Python client process, full stop. Underneath it sit a resource manager and a fleet of per-host workers that execute whatever programs the client hands them, gang-scheduled across however many pods the job spans.

The design is not a product improvement bolted onto McJAX; it is a different paper's answer to the same problem. The Pathways paper describes an asynchronous distributed dataflow system with centralized scheduling, amortized over large operations so that one controller issuing instructions to thousands of chips does not become the bottleneck it sounds like it should be.

§ 02

The swap happens at IFRT, not in your code

The place chapter 11 spent an entire chapter building an abstraction is exactly the place Pathways plugs in. The client speaks ifrt_proxy, a client and server split of the IFRT interface, to a server that fronts the Pathways runtime on the other side. Your JAX code above that boundary does not change at all: the same jax.jit, the same arrays, the same sharding specs from chapter seven, now dispatching across a proxy instead of an in-process client.

One controller, thousands of chips, the same JAX.

That is the direct answer to a question worth asking plainly: how do you swap out the entire runtime underneath a model without touching the model. You do not touch the model. You touch the client IFRT talks to, and IFRT was built with exactly that seam in mind.

two ways to drive a fleet: the same JAX above, different worlds below
multi-controller (McJAX) host 0 python + jaxthe same program host 1 python + jaxthe same program host 2 python + jaxthe same program host 3 python + jaxthe same program collectives only one host dies, the gang diessingle-controller (Pathways) one client program jax, unchanged · speaks the ifrt proxy resource manager gang-schedules programs workers workers workers controller outlives workers · dashed = closed runtimethe swap point between the two worlds is IFRT
§ 03

What a single controller buys you

Centralizing control is not free, but what it buys is real. MPMD becomes possible: different programs running on different islands of the same job, the shape pipelining needs. The controller also outlives any individual worker, so a worker failing is a recoverable event instead of a gang-wide one, the elasticity chapter 12 explicitly could not offer. And the scale ceiling moves: a single gang-scheduled program is no longer the largest unit of work the system can express, because one controller can orchestrate many gangs across many pods at once.

§ 04

What you can actually verify

Here is the part worth stating without hedging: the Pathways runtime itself is not open source. You can read the paper that describes its design, you can read the ifrt_proxy client and server code in the public XLAThe compiler: brilliant at fusing along dataflow edges, structurally unable to change your algorithm. That gap is why kernels exist.taught in /l/xla → tree, since that boundary has to be public for anything to plug into it, and you can read the product documentation for the cloud surface built on top of it. What actually executes your program on the other side of that proxy is closed, the same way the kernel path marks libtpu closed rather than pretending otherwise. Treat every claim in this chapter about the runtime's internals as coming from the paper and the product surface, not from code you can read yourself.

assigned

Readings