Repository navigation
benchmark: robotics harness reads NDJSON in 1 MiB chunks and the DROID tasks from the index - #924
Merged
Merged
Conversation
iter_lines' 512 B default rejoins a line chunk by chunk, which is quadratic in its length. A V-JEPA 2-AC rollout line is several MiB, and the client spent seconds per request reassembling it.
droid_100 is a lerobot v3.0 export, which keeps each instruction in the index of meta/tasks.parquet rather than a task column. The lookup failed, so every DROID request was sent the fallback prompt.
Automated review🟡 No findings on Description
What the review checked
Advisory, not a merge gate. Rules: |
No lerobot writer puts a "task" column in meta/tasks.parquet: v2.x kept tasks in meta/tasks.jsonl, and v3.0 (write_tasks, convert_tasks, aggregate) stores the strings as the index. Drop the column branch and its test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dghosef
added a commit
that referenced
this pull request
Oct 28, 2026
Main since 73c6c17: #883 mstar_rust in the Linux wheels, #901 output spans (BatchedModelOutput.output_spans, NodeSubmodule.spanned_outputs, the worker's crop), #904 DiT seed noise drawn at ingest (on_request_added, NoiseStager deleted, to_device_nonblocking as one memcpy into pinned memory), #903 API-server torch pool from the CPU quota and pooled image encodes, #924 robotics harness, #819 Inductor cache under ~/.cache, #881 CommGroup.agree / JointGroups.agree (agree_across_ranks and flagged_on_any_rank deleted), #724 CUDA IPC KV in one 2D memcpy a page, #387 GLM-5.2 (MLA, fp8 MoE with NoAuxTcRouter, the DSA resource), #921 vjepa2 AC crop, #922 Cosmos3 contiguous positions, #923 dense attention falls back when fa3-fwd has no kernel for the GPU. Conflicts: - mstar/utils/h2d.py, to_device_nonblocking: the stack's signature (data: Tensor | Sequence, device, dtype=None) and DeviceCapability pin_memory gate, with main's tensor path (#904): a CPU tensor is written into a fresh pinned buffer with one memcpy rather than pin_memory()'s copy_ over the intra-op pool. Every CPU tensor now goes through a fresh buffer, so the stack's "an already-pinned source is read in place" caveat (R3.3) no longer applies and is dropped from the docstring. test_accelerator_graph_backend's pinning test checks the pinned torch.empty and its non-blocking copy instead of pin_memory(). - mstar/model/components/diffusion/denoise_loop.py: imports, both (main's copy, the stack's functools). Main code on a superseded path, ported here: - GLM-5.2 (glm52/submodules.py): its own check_stop / check_stop_batched (four arguments, step_walk, its own row-map loop) / _stops -> token_stop = TokenStop(decode_loop, new_token, eos_token_ids, sampler) with a _token_stops override for its two differences (a stop token at prefill ends the reply at the first decode step; max_tokens counts the prefill's token), and a check_stop override for that closing step, whose token postprocess drops. test_glm52_model's helper and test_model_kv_layouts' GLM cap test build the real submodule (over a stub language model) instead of object.__new__, which would leave token_stop unset. - PinnedStager.to_device (#387), a second "host values -> new device tensor" helper beside to_device_nonblocking: deleted with its test (test_pinned_stager_to_device.py); its callers, GLM-5.2's prefill seq_lens and the DSA resource's page tables, call to_device_nonblocking(list, device, dtype=torch.long). test_dsa_resource spies on that instead. The other files both sides touched (engine.py, accelerator_graph_runner.py, kv/manager.py, attn/base.py, ragged/base.py, communication.py, model/base.py, submodule_base.py, entrypoint.py, conductor.py, moe.py, image_io.py, vjepa2_model.py, docs, tests) auto-merged into disjoint hunks: per file the merged delta equals main's own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Two fixes in the robotics benchmark harness.
run_robotics.pyread the server's NDJSON withiter_lines()at its 512-byte default, which is roughly quadratic on multi-MB lines. Reading with a 1 MiB chunk takes a 4-rollout V-JEPA2-AC run from 10.0 s to 0.29 s of client time, latents bit-identical.DROIDDatasetreadtasks_df["task"], but droid_100 is a lerobot v3 dataset whosetasks.parquetkeeps the instructions in the index. The lookup warnedcould not load tasks.parquet: 'task'and every pi0.5 request got the prompt "manipulate the object" (V-JEPA2-AC sends no text, so it was unaffected). It now reads the index, where lerobot v3 keeps the strings: requests 0 and 1 become "Put the marker in the pot" and "Put the candy bar on the left side of the first shelf". pi0.5 numbers from before this PR used the fallback prompt, so they aren't comparable with new ones.Tests: new
test_droid_dataset_tasks.py(1 passed). The eval and bench test modules show the same two box-specific failures as main when run serially. e2e--tier smokepi05 passes;run_roboticsagainst servers: vjepa2_ac 4 + 16 + 4 rollouts, pi05 eager 4/4 with the real prompts. ruff clean.