$ the-wire · showcase
executorch fixes dropped edge-manager passes; TorchTitan overhauls MxFP8
By RepoJournal · Filed · About PyTorch
Executorch now runs a recipe's edge-manager passes after partitioning, TorchTitan replaced its MxFP8 training stack, and TensorRT's Dynamo integration ships a batch of correctness fixes.
Executorch's `LoweringRecipe.edge_manager_transform_passes` was accepted but never scheduled in a default pipeline, so passes declared by a recipe were silently dropped. The stage that applies them is now scheduled after partitioning, so recipes declaring such passes execute them. This is a breaking change for pipelines that relied on the previous behavior, which only allowed these passes to follow `TO_EDGE`, never the partitioning stage. [1]
TorchTitan overhauled its MxFP8 linear training to own autograd, FSDP cache management, and model policy, relying on TorchAO only for quantization and layout kernels. FSDP now owns the quantized weights and scales, so their lifetime follows the normal unshard/reshard cycle. A related fix handles unevenly sharded expert weights in FSDP compute weights: the mxfp8 linear's pre/post all-gather hooks now pad during pre-gather and unpad (narrow) during post-gather, which matters for `efsdp` where expert counts may not divide the FSDP degree. [2][3]
The pytorch/TensorRT Dynamo integration landed five fixes this cycle. Scalar partition inputs are materialized as zero-dimensional CUDA tensors before the Tensor[] execute_engine schema, and scalar outputs are restored with `aten.item`. `truncate_double` metadata now comes from partition FX metadata instead of executing subgraphs, matching engine precision. Explicit device placement is preserved across partitions, scatter and index updates with data-dependent extents are skipped from decomposition, and engine output symbols are remapped into the active ShapeEnv during fake execution so symbols aren't reused across traces. [4][5][6][7][8]
TorchRL added `MicroDuckEnv`, a commanded longitudinal-velocity locomotion task for Pollen Robotics' MicroDuck biped, plus MuJoCo contact and site accessors so tasks can compute contact-based metrics without reaching into backend internals. The new walker reproduction script for DreamerV3 reaches final evaluation returns of 978.7 / 971.8 / 973.7 at 1.1M steps on a single MI300X, with a `--smoke` mode that validates the pipeline in minutes. A related change seeds batched native MuJoCo workers distinctly so each worker no longer replays the same reset noise. [9][10][11]
Action items
- → Review ExecuTorch pipelines that use LoweringRecipe.edge_manager_transform_passes, as they now run after partitioning and may change results. pytorch/executorch [plan]
- → If you use TorchTitan MxFP8 linear training, test your workloads and check the new FSDP ownership of quantized weights and scales. pytorch/torchtitan [immediate]
- → Update TensorRT Dynamo integration to get the scatter/index/cast/device-placement fixes; keep an eye on the new scalar-input normalization. pytorch/TensorRT [plan]
References
- [1] Run a recipe's edge-manager passes after partitioning (#22474) ↗ pytorch/executorch
- [2] Overhaul MxFP8 support ↗ pytorch/torchtitan
- [3] [mxfp8] Handle unevenly sharded expert weights in FSDP compute weights ↗ pytorch/torchtitan
- [4] fix(dynamo): normalize scalar values at engine boundaries ↗ pytorch/TensorRT
- [5] fix(dynamo): make truncate_double metadata match engine precision ↗ pytorch/TensorRT
- [6] fix(dynamo): preserve explicit device placement across partitions ↗ pytorch/TensorRT
- [7] fix(dynamo): handle dynamic scatter and index updates ↗ pytorch/TensorRT
- [8] fix(dynamo): remap engine output symbols during fake execution ↗ pytorch/TensorRT
- [9] [Feature] Add MicroDuckEnv and MuJoCo contact and site accessors ↗ pytorch/rl
- [10] [Algorithm] Add DMC Walker reproduction script for DreamerV3 ↗ pytorch/rl
- [11] [BugFix] Seed batched native MuJoCo workers distinctly ↗ pytorch/rl