Skip to content

Delete the glm4-9B, mimo-7B, moonlight-16B and deepseek-r1 launch scripts - #2354

Merged
yueming-yuan merged 7 commits into
mainfrom
yueming/script-delete
Aug 12, 2026
Merged

Delete the glm4-9B, mimo-7B, moonlight-16B and deepseek-r1 launch scripts#2354
yueming-yuan merged 7 commits into
mainfrom
yueming/script-delete

Conversation

@yueming-yuan

@yueming-yuan yueming-yuan commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

First of three chained PRs cleaning up scripts/. Stack: #2354 (this)#2355#2356.

These four models are being dropped, so their launchers go, along with the recorded command snapshots and the doc pages built around them.

What is deleted

launchers run-glm4-9B.sh, run-glm4-9B-4xgpu-radixtree.sh, run-mimo-7B-rl-eagle.sh, run-moonlight-16B-A3B.sh, run-deepseek-r1.sh
snapshots the matching tests/snapshots/launch_scripts/sh/scripts/*.txt
doc pages docs/models/glm/glm4.md, docs/models/mimo/mimo.md, docs/models/kimi/moonlight.md

What deliberately stays

Three of the four Megatron model definitions under scripts/models/ are not deleted, because something that still runs references them:

  • mimo-7B-rl.pytests/e2e/megatron/test_mimo_7B_mtp_only_grad.py, which is registered on stage-c-4-gpu-h200 and stage-c-4-gpu-mi350 with no disabled=
  • moonlight.pyexamples/infra_features/low_precision/run-moonlight-16B-A3B-int4.sh and the p2p profile
  • deepseek-v3.pyscripts/run_deepseek.py and the V3.2 launchers

glm4-9B.py is deleted, in the second commit. It initially looked referenced, but neither reference held up: tests/e2e/megatron/test_quick_start_glm4_9B.py registers itself disabled="Not worthy for testing, too naive." and run_suite.py runs only entries whose disabled is None, so it has never executed; and the p2p weight-transfer profile was the only real consumer, so it goes with the model. The disabled test, the p2p prepare/run configs, the GLM-Z1-9B.sh wrapper, both recorded p2p argv snapshots and three rows of docs/advanced/p2p-weight-transfer.md are removed with it. Dropping the measured RDMA-vs-NCCL row is deliberate — the configuration behind that number no longer exists.

deepseek.md is rewritten rather than deleted

It was the only page covering a model that survives: DeepSeek-V3 is still supported through scripts/run_deepseek.py. The page's whole recipe section was transcribed from the deleted shell script, so it is rewritten around the python launcher's actual values (TP/PP/CP/EP ladder keyed off --num-nodes, the deepep low_latency sglang block, the --max-tokens-per-gpu 2048 placeholder flagged as such). R1-specific content is gone; index pages and docs.json are updated.

docs/user-guide/training-script-walkthrough.md used run-glm4-9B.sh as its reference script and is re-pointed at a surviving one.

Testing

pytest tests/manual/launch_scripts tests/fast/launch_scripts — 524 passed. The discovery test that asserts snapshot-set == script-set is what proves nothing was left dangling.

…ipts

Their models are dropped, so the launchers, their command snapshots and the doc
pages built around them go with them. The Megatron model definitions stay: e2e
tests and the low-precision / p2p examples still reference them.

deepseek.md was the only page covering a surviving model, so it is rewritten
around scripts/run_deepseek.py instead of the deleted shell recipe.
The previous commit kept scripts/models/glm4-9B.py because two things referenced it.
Neither turns out to be a reason to keep the model:

- tests/e2e/megatron/test_quick_start_glm4_9B.py registers itself with
  disabled="Not worthy for testing, too naive.", and run_suite.py keeps only entries
  whose `disabled` is None, so it has never run.
- the p2p weight-transfer example carried a GLM-Z1-9B-0414 profile, which is the last
  consumer of the model definition and goes with the model.

So the model definition, its expanded-args snapshot, the disabled e2e test, the p2p
prepare/run configs, the GLM-Z1-9B.sh wrapper and the two recorded p2p argv snapshots
are all removed, along with the profile name in test_self_executing_launchers.py.

The p2p doc loses three rows: the Glm4ForCausalLM support row (whose only example was
this model, and no code in the repo names that class), the node-count row, and the
measured RDMA-vs-NCCL row. Dropping a measurement is deliberate: the configuration
behind it no longer exists, so nobody can reproduce the number.
Moonlight's launcher went in the first commit, but the model definition stayed because
two examples still used it. Both go now, so nothing in the repo names the model:

- examples/infra_features/low_precision/run-moonlight-16B-A3B-int4.sh and its recorded
  commands. Three INT4 examples remain (qwen3-30B-A3B, qwen3-235B-A22B,
  kimi-k2-Thinking), so INT4 coverage survives, including on an MLA MoE via
  kimi-k2-Thinking. What is lost is the cheapest INT4 smoke test: Moonlight needed 4
  GPUs on one node, and the smallest remaining one needs 8.
- the p2p weight-transfer profile, its Moonlight-16B.sh wrapper and both recorded argv
  snapshots, plus the profile name in test_self_executing_launchers.py.

scripts/models/moonlight.py, its expanded-args snapshot, and the two README entries go
with them. The p2p doc loses the DeepseekV2ForCausalLM support row, the node-count row
and the measured row -- the last one recorded the largest RDMA win in the table
(-27.6%), and dropping it is deliberate: the configuration behind it is gone.

@guapisolo guapisolo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

submission.

```bash
python scripts/run_deepseek.py train --num-nodes 16 --num-gpus-per-node 8

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Start and preserve Ray before preprocessing

This documented command fails on a clean host before the launcher reaches its own ray start --head. train() calls _prepare_megatron_ckpt() and _prepare_cp() first; both eventually call exec_command_multi_node(), whose first operation is ray.init(address="auto"), so they require an existing Ray head. The multi-node workaround is also lost by default because execute_train() stops that cluster unless MILES_SCRIPT_EXTERNAL_RAY=1, then starts only a new head. Since this PR makes run_deepseek.py the documented replacement, please either establish and preserve Ray before these preprocessing steps or document and wire an external-Ray workflow.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

solved in next PR

# Conflicts:
#	docs/index.md
#	docs/models/deepseek/deepseek.md
#	docs/models/deepseek/index.md
#	docs/models/glm/index.md
#	docs/models/index.md
#2300 added --use-miles-dashboard and --dump-details to scripts/run-qwen3-4B.sh without
regenerating its snapshot, and tests/manual is not discovered by CI (see #2279), so the
mismatch went unnoticed on main. Regenerating it here is the whole diff.
# Conflicts:
#	docs/models/glm/glm4.md
#	docs/models/kimi/moonlight.md
#2391 replaced this page with a DeepSeek-V3.2 recipe, but V3 is still trainable:
scripts/run_deepseek.py is the only launcher for the `deepseek-v3` model type, and no
other launcher covers it (run_deepseek_v32.py is `deepseek-v32`, run_deepseek_v4.py is V4).
Without the page the launcher had no documentation at all.

The page comes back at its original path, so #2391's redirect from it to the V3.2 page is
dropped -- it would otherwise shadow the restored page. The nav entry and the V3 rows in
the three model tables are restored alongside it.
yueming-yuan added a commit that referenced this pull request Aug 12, 2026
run_deepseek.py's train and run_deepseek_v32.py's full_train chained their prepare steps
ahead of execute_train, but _prepare_megatron_ckpt and _prepare_cp fan out with
exec_command_multi_node, whose first act is ray.init(address="auto"). So on a clean host
they died before the launcher ever reached its own `ray start --head`, and starting a
cluster by hand to get past that did not help either: execute_train's preamble runs
`ray stop --force` and then brings up a fresh single-node head, so a multi-node
conversion was followed by single-node training.

Both now pass those steps as execute_train's before_ray_job_submit hook, which runs after
the head is up and before the job is submitted -- and still runs under
MILES_SCRIPT_EXTERNAL_RAY=1, where the pre-joined cluster is left alone. That covers both
intended flows without touching execute_train's contract. The snapshot diff is the fix
itself: `ray stop` / `ray start --head` moved ahead of the conversion and the rsyncs.

Reported by @guapisolo on #2354.
@yueming-yuan
yueming-yuan merged commit 221dbc7 into main Aug 12, 2026
20 of 30 checks passed
@yueming-yuan
yueming-yuan deleted the yueming/script-delete branch August 12, 2026 01:22
Shi-Dong added a commit that referenced this pull request Aug 12, 2026
Resolves the docs.json redirects conflict: keep this branch's three
redirects and main's platforms/fp8 entries, and drop the stale
/models/deepseek/deepseek redirect — #2354 restored that page on main,
so redirecting it would shadow a live nav entry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants