Repository navigation
[python] Configure LeRobot video decoder cache through table options - #10480
Open
XiaoHongbo-Hope wants to merge 9 commits into
Open
XiaoHongbo-Hope wants to merge 9 commits into
XiaoHongbo-Hope wants to merge 9 commits into
Conversation
XiaoHongbo-Hope
marked this pull request as ready for review
October 11, 2026 02:39
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.
Random sampling across more than eight videos can repeatedly evict and reopen decoders. Increase the default cache from 8 to 16 per camera per worker, and expose
read.video.max-open-decodersas a dynamic table option. Usetable.copy({"read.video.max-open-decoders": "8"})to trade decoder reuse for a smaller cache without changing stored table options.On the public lerobot/koch_pick_place_5_lego dataset, a paired run changing only decoder capacity improved sustained throughput from 69.8 to 90.8 samples/s (+30.1%). Both runs used CPU TorchCodec decoding, OSSFS video reads, Rust table reads, a 256 MiB worker-local block cache, batch size 32, four workers, and eight-frame uint8 windows; no image transforms or model compute. Each run warmed up 10 batches and measured 6,400 samples. Sample order and first/last batch tensors matched. This is one paired measurement, not a cold-start result; larger decoder caches can retain more memory.
Tests: 164 passed, 50 skipped across the LeRobot, multimodal table, and video modules; option-name regression tests, Flake8, and
git diff --checkpassed.