Skip to content

S26-E0.1: efficiency evaluation (bare vs yeto, verl and Miles) - #281

Closed
michaellchung wants to merge 12 commits into
s25-finalfrom
s26-e01-effeval
Closed

michaellchung wants to merge 12 commits into
s25-finalfrom
s26-e01-effeval

Conversation

@michaellchung

Copy link
Copy Markdown
Contributor

Adds an efficiency evaluation to tools/eval: bare verl, bare Miles, yeto+verl and yeto+Miles, sync and fully_async, all generated from one shared spec with a config fingerprint.

  • Collects per-round phase times, throughput, reward curves, GPU utilisation, memory peak, cost per 1k samples and off-policy metrics; missing fields are reported as missing.
  • eff-plan / eff-run / eff-parse / eff-report; reports use a range criterion over repeats and refuse mixed fingerprints.
  • Fixes found on GPU: unfused attention for bare Miles on sm86, NCCL_CUMEM_HOST_ENABLE=0 for verl fully_async on Modal, parser reads only the run's own tapes, verl async generation time from the rollouter.

Verified on Modal A10: all 8 arms x 2 runs pass (report SESSION26/E0.1-REPORT.md in infra-drafts).

🤖 Generated with Claude Code

chowhsu and others added 12 commits October 20, 2026 14:29
Eight arms per model preset ({bare,yeto} x {verl,miles} x {sync,async})
generated from one shared spec with a control fingerprint. Bare arms run
the frameworks' own entry points (verl main_ppo / fully_async_main,
Miles train.py / train_async.py) in the same images yeto uses; yeto arms
run verl island_entry and the yeto launcher. Parsers normalize verl
FileLogger, Miles perf lines and yeto tapes into per-round records
(missing fields are marked, never estimated); the report gives
yeto-vs-bare deltas with min-max range verdicts. Presets: Qwen3-0.6B
(E0.1) and Qwen3-4B-Instruct-2507 (E0.2). CLI: eff-plan, eff-run,
eff-parse, eff-report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ric recipe; TE flash fails on sm86)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…spec

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…LoRA and /dev/shm NCCL host buffers

The verl image applies yeto's patch_verl, whose sender hook imports yeto, so the
bare arms now build the image without it. The fork's disaggregated checkpoint
engine drops the PEFT config of unmerged LoRA params; the bare async arm sends
merged weights instead. On Modal the trainer allocated NCCL host buffers with
cuMem while the receiver fell back to /dev/shm and failed to attach
(NCCL_DEBUG=INFO run); NCCL_CUMEM_HOST_ENABLE=0 keeps both on /dev/shm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…over rounds that report the value

The fork logs a step's training metrics one parameter version late and never
logs the last step's, so rows are keyed by training/global_step and the step
without metrics keeps its trained batch from the config. Throughput rates use
the steady rounds that report the value; the report lists partial counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… does not)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y Ray worker

On Modal one weight-sync process could allocate NCCL host buffers with cuMem
while its peer fell back to /dev/shm and then failed to attach
(eff01-yeto-verl-async-e; NCCL_DEBUG=INFO in eff01-bare-verl-async-d).
NCCL_CUMEM_HOST_ENABLE=0 unless the caller sets it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ains without dropout

--rl-gradient-accumulation-fusion lets a run keep Megatron's fused wgrad (the
Miles recipes' default); off keeps the historical argv. The generic recipe
passed no dropout, so Megatron's 0.1 applied during RL training while the
Miles recipes pass 0.0; it now passes 0.0 as the Qwen3.5 recipe does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No deterministic inference, constant LR, full recompute, dynamic batching,
gradient-accumulation fusion, and an algorithm spec with the recipe's clip
range (0.2 / 0.28); S26 GOAL §6 makes the bare framework's settings the
reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… store)

miles_local.sh pulls a copy of the repo whose test fixtures are tapes of other
runs; their rl_local_round rows replaced the run's rewards (all four yeto+Miles
runs showed the same fixture curve with reward 0 in round 0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… missing

The trainer's timing_s/gen and yeto's driver generate phase only pull finished
samples from the rollouter queue. Bare verl logs the rollouter's active time
per parameter version; yeto logs none per round, so its value stays missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@michaellchung

Copy link
Copy Markdown
Contributor Author

Closing: all commits of s26-e01-effeval (head ba179531) are already in main (verified with git merge-base --is-ancestor; main = 1f83be1d). The content landed through the stacked merges of #269 / #279 / #292. GitHub cannot retarget this PR to main ("no new commits"), so it is closed rather than merged. The branch is kept.

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