Add a post on Dynamo support and per-cluster serving stacks - #37
Draft
negz wants to merge 2 commits into
Draft
Conversation
A post's frontmatter can omit any author field except name, but normalizeAuthors set every one of them regardless, so an omitted field became an explicit undefined. getAllAuthors then reintroduced the same keys when merging an author's posts, because ??= assigns when the left side is nullish. The author pages pass an author straight through as a getStaticProps prop, and Next.js refuses to serialize undefined, so the build failed once an author who omits a field had a second post. Drop undefined values when normalizing, and merge an author's posts by spread rather than field by field, so a field absent from every post is missing rather than undefined. Signed-off-by: Nic Cope <nicc@rk0n.org>
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 19:09
f49e67f to
27db930
Compare
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 19:14
27db930 to
9f6bcf6
Compare
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 19:30
9f6bcf6 to
bb6e8bb
Compare
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 19:52
bb6e8bb to
7769322
Compare
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 19:58
7769322 to
e58fa01
Compare
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 20:39
e58fa01 to
78640ef
Compare
Modelplane now lets a platform team choose whether a cluster serves models with the stack Modelplane composes itself or with NVIDIA Dynamo's components. Nothing on the blog covers it, and the reason it works is worth writing down: a ModelDeployment describes an engine rather than a stack, so a cluster can change stacks without an ML team rewriting anything. The post leads with what gang scheduling and peer-to-peer weight transfer are worth, then walks through the cluster opt-in, what a Leader and Worker gang becomes on each stack, and how ModelExpress moves weights between replicas. The worked example is the two-node Qwen3-Coder manifest from the docs, opted into ModelExpress. Signed-off-by: Nic Cope <nicc@rk0n.org>
negz
force-pushed
the
grove-is-in-the-heart
branch
from
September 2, 2026 23:20
78640ef to
1199290
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Modelplane now lets a platform team choose the serving stack each cluster runs, either the stack Modelplane composes itself or NVIDIA Dynamo's components. Nothing on the blog covers it yet. The post's argument is why a cluster can change stacks without an ML team rewriting anything: a
ModelDeploymentdescribes an engine rather than a stack, so what matters is whether a stack can run two pod specs with distinct commands and give a worker a way to find its leader.It leads with what gang scheduling and peer-to-peer weight transfer are worth, then walks through the cluster opt-in, what a
LeaderandWorkergang becomes on each stack, and how ModelExpress moves weights between replicas. The worked example is the two-node Qwen3-Coder manifest from the Modelplane docs, opted into ModelExpress.Draft because it needs a cover image at
public/blog/dynamo-fleet-wide/cover.png. Every other post has one, and I left the frontmatter field out rather than point at a file that isn't there.The first commit has nothing to do with the post itself, and fixes a
next buildfailure the post triggers.normalizeAuthorsset every optional author field even where frontmatter omits it, so an omitted field became an explicitundefinedthatgetStaticPropscan't serialize. It surfaced now because this is my second post on the blog, and it would have happened on anyone's second post. Happy to split it into its own PR if you'd rather review it separately.Checklist
npm run buildlocally.npm run lintdrops into next's interactive ESLint setup prompt, so there's no lint config in the repo to run.npm run validate-posts.git commit -s.