$ the-wire · showcase
TorchRL 0.14 lands, ExecuTorch tunes Arm64 BF16 copies and Vulkan dispatch
By RepoJournal · Filed · About PyTorch · Composed from the cited sources · methodology
TorchRL 0.14 ships DreamerV3 overhauls, distributed training changes, and composable replay buffers, while ExecuTorch adds an optimized Arm64 FP32/BF16 `_to_copy` kernel and fixes Vulkan shader feature negotiation.
TorchRL 0.14 is the day's headline release, spanning model-based RL, distributed training, replay-buffer composition, checkpointing, and on-policy optimization [1]. It requires TensorDict 0.14.2 or later in the 0.14 release line, a hard requirement for downstream users on earlier TensorDict versions. In the same release cycle, `transition_chunk_size="auto"` changed its resolution [2]: it used to resolve to `frames_per_batch // num_envs` so each batch held one contiguous run per environment; it now resolves to at least 64 consecutive transitions per environment-worker message with process slots, or `frames_per_batch // num_envs` when larger, and never more than `frames_per_batch`. This is a breaking change for anyone relying on the old per-batch transition layout.
ExecuTorch shipped an optimized `_to_copy.out` kernel for Arm64 [3]. Contiguous FP32-to-BF16 and BF16-to-FP32 conversions now process eight elements per NEON iteration and use the ExecuTorch threadpool above its grain size; other dtype pairs, layouts, and platforms fall back to the unchanged portable implementation. On the Arm backend, Vulkan data graph shader module feature negotiation was fixed after being found with the Vulkan validation layer [4], and constant tensor indexing is now delegated: U55 `index.Tensor` operations with one constant rank-1 integer index lower to slices and optional concatenation, including indices on non-leading dimensions, while runtime, empty, mask, rank>1, multiple-index, and symbolic-shape cases stay on CPU and out-of-range constants are rejected during preprocessing [5].
torchtitan landed an auxiliary-loss framework. `LoggedAuxLoss` in `torchtitan/models/common/aux_loss.py` carries per-layer loss values through an identity autograd Function on a carrier tensor, and its first use is the DeepSeek-V3 sequence-wise MoE balance loss [6]. The same repo fixed a recursive TorchFT optimizer dispatch bug where `TorchFTOptimizersContainer` wrapped itself in `torchft.Optimizer` and the wrapper called back into the same container on accepted steps, repeatedly triggering PyTorch's pre/post hooks [7]. `TorchCheckpointingManager` can now load, not just save: `_load` previously raised `NotImplementedError`, so a run configured for this backend could write checkpoints and never resume; the native load path now mirrors the DCP manager, using the latest valid step when no explicit step is given and erroring on a missing folder or checkpoint when one is [8].
pytorch/test-infra cut autorevert metrics query cost after the `/api/autorevert/metrics` endpoint pushed the shared `hud_user` ClickHouse account past its 64-query concurrency limit, refusing 2,189 queries and failing 8,005 unrelated test-run ingest INSERTs [9]. The requests used a 365-day range, and those queries averaged 93 to 162 seconds at up to 8 GiB, with only 8 of 28 heavy calls finishing. The fix makes a year servable and caps the range server-side. Separately, NVIDIA job setup no longer replaces a working host driver when `driver-version` is omitted: it keeps a driver at least 580.65.06, while missing, older, or unusable drivers still use the existing installer and mirror, and an explicit version keeps its exact-version behavior [10].
Action items
- → Upgrade to TorchRL 0.14 and TensorDict 0.14.2 or later; re-check any code depending on `transition_chunk_size="auto"` resolution pytorch/rl [plan]
- → Rebuild ExecuTorch Arm64 builds to pick up the optimized `_to_copy` BF16 path and the Vulkan shader negotiation fix pytorch/executorch [plan]
- → Update torchtitan runs configured for TorchCheckpointingManager to test resume, and pick up the TorchFT recursive dispatch fix pytorch/torchtitan [plan]
- → Review CI hosts relying on host-provisioned NVIDIA drivers now that job setup preserves drivers at least 580.65.06 when `driver-version` is omitted pytorch/test-infra [monitor]
References
- [1] TorchRL 0.14: DreamerV3, Async at Scale, and Composable Replay ↗ pytorch/rl
- [2] [Performance] Send at least 64 transitions per worker message by default ↗ pytorch/rl
- [3] Add optimized Arm64 BF16 `_to_copy` (#22493) ↗ pytorch/executorch
- [4] Arm backend: Fix Vulkan data graph shader module feature negotiation ↗ pytorch/executorch
- [5] Arm backend: Delegate constant tensor index ↗ pytorch/executorch
- [6] Add LoggedAuxLoss and its first usage: the DeepSeek-V3 sequence-wise MoE balance loss (#3864) ↗ pytorch/torchtitan
- [7] Fix recursive TorchFT optimizer dispatch ↗ pytorch/torchtitan
- [8] Route native loads through torch_checkpointing (#4191) ↗ pytorch/torchtitan
- [9] Cut autorevert metrics query cost, and cap the range server-side (#8769) ↗ pytorch/test-infra
- [10] Preserve host-provisioned NVIDIA drivers during job setup (#8771) ↗ pytorch/test-infra