$ the-wire · showcase
Silently wrong MoE gradients, and E8M0 wrappers decompose again
By RepoJournal · Filed · About PyTorch · Composed from the cited sources · methodology
TorchTitan closes a correctness hole that produced wrong expert gradients under activation checkpointing without erroring, while Inductor restores decomposition of higher-order wrappers carrying E8M0 inputs.
[DeepEP] Fix silently wrong MoE gradients under activation checkpointing (#5115) pytorch/torchtitan
deepep.dispatch returns an EPHandle recording which received row came from which source token on which rank, and under activation checkpointing the backward recompute produced a different row order than the forward's autograd context recorded, so gradients were wrong with no failure reported. If you train MoE models with DeepEP plus activation checkpointing, pull this before trusting a run.
[Inductor] Decompose functional wrappers with E8M0 inputs (#195817) pytorch/pytorch
fallback_node_due_to_unsupported_type treated float8_e8m0fnu as unsupported except for a handful of view and memory ops, which also caused auto_functionalized, auto_functionalized_v2, and triton_kernel_wrapper_functional to be skipped by their decomposition passes. Those wrappers are not lowered directly, so they must decompose for E8M0 input graphs to compile.
[FSDP2] Keep the unsharded grad_dtype fixed across forward and backward (#200196) pytorch/pytorch
Wei Feng made the unsharded parameter's grad_dtype fixed rather than chosen in pre_backward, so gradient accumulation across backward passes without gradient sync stays in FP32 and TP gradient reduction stays in FP32. The earlier deferral let a forward see FP32 while its backward saw something else.
[executorch][cuda] Run INT4 decode linears on autotuned QuantizedGemmFamily Triton kernels and delete the int4_plain_mm C shim pytorch/executorch
Decode-sized INT4 linears (CudaCoalescedInt4Tensor, M <= 4) now route through QuantizedGemmFamily as triton::int4_quantized_gemm_m{1,2,3,4}, with the int4_plain_mm C shim deleted everywhere; the INT6 companion does the same for CudaDp4aPlanarInt6Tensor and drops int6_plain_mm.
[autotuner] Speed up config key support checks pytorch/helion
ConfigSpec.normalize() rebuilt the full supported-key set on every call, running supports_config_key() for all 245 valid keys when it needed only the keys in the config, and a single matmul bind normalizes 493 configs for the 1024x1024 example: over 160,000 support checks, roughly 45% of bind time. The same rewrite also skips function-local _compat imports inside each Triton call.
[Refactor] Bound GPU test parallelism and reap strays pytorch/rl
Jobs hung to the 120-minute timeout after the script had already exited 0 because run_with_env_secrets.py drains stdout until EOF and Xvfb outlived pytest holding the write end. The script now dumps survivors and reaps them; the OSDC container work lands alongside it, moving the read-only /usr/share/glvnd/egl_vendor.d mount and the removed libgl1-mesa-glx and freeglut3 packages, and the docs gh...
[ROCm] Unskip TestVisionTracing torchvision tracing tests (#200067) pytorch/pytorch
Also cleared: TestVisionTracing's torchvision tracing tests lose their blanket unittest.skipIf(TEST_WITH_ROCM, "Skipped on ROCm") after passing on MI355X (gfx950, ROCm 10.1) and MI300X (gfx942), and torch_tpu moves its pin to 7c98be65adbaf405c58748177ec8ac5dc601bd39.