$ cat pytorch/month/2026-10-01.log
the month in review · October 2026
PyTorch 2.15.0 lands with rewritten NCCL backend
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
TensorDict 0.15.0 also shipped as a pure Python wheel, 1.77x faster on everyday operations, with removals across the release.
PyTorch 2.15.0 Release pytorch/pytorch
The release notes list backwards incompatible changes and deprecations alongside new features, and the c10d work under it makes nonblocking split and shrink wait for child communicator initialization before reporting success; previously an init failure surfaced only through the parent. If you call ncclCommSplit or ncclCommShrink in nonblocking mode, read the incompatible-changes section before ...
TensorDict v0.15.0 pytorch/tensordict
581 pull requests since 0.14.0, 37 of which also shipped in the 0.14.1 to 0.14.3 patches, and the package now builds one 690 KB pure-Python wheel for every platform and Python version. The changelog puts everyday operations at 1.77 times faster on average; check the removal list for anything your code still imports.
[graph_trainer] Remove graph-based EP chunking (#4952) pytorch/torchtitan
The graph chunking path ran traced graphs through unbacked SymInts, a concretize pass and trace-input preparers to overlap EP; that path is gone and eager chunking is what remains. Expert-parallel training configs that opted into graph chunking will not trace the same way.
[RL] Preserve per-group KV cache across policy updates (#4761) pytorch/torchtitan
A policy update changes weights but leaves vLLM's cached KV intact, so a fresh rollout could hit prefix state built by an older policy; per-group caches are now preserved across updates instead of being cleared wholesale. RL runs with multi-turn rollouts keep prefix reuse without serving stale state.
Preserve Python scalar semantics in Vulkan and XNNPACK quantizers pytorch/executorch
Preparing a model with the Vulkan or XNNPACK quantizer could change results when a Python scalar was materialized in the output dtype: the notes give torch.tensor([1e-4], dtype=torch.float16) * 100000.0 yielding about 10 in eager and something else after quantization. Scalar code on those backends now keeps Python semantics, which means outputs may shift from what earlier quantized builds produ...
Fix rnllama undici security update and Windows ARM64 generator mismatch (#23280) pytorch/executorch
The open-ended undici override allowed 7.x while Expo's transitive dependencies require 6.x, which blocked Dependabot; the fix constrains rnllama to ^6.28.1 and consolidates the locks, alongside a Windows ARM64 generator mismatch. If you build the rnllama example on Windows ARM64, this is the version to take.
[c10d][nccl2] Wait for nonblocking split/shrink child initialization (#199263) pytorch/pytorch
Nonblocking shrink and split returned ncclSuccess while the child communicator was still initializing on NCCL's async thread, so a failure surfaced only later through the parent. Code that treats a successful return as a ready communicator can now rely on it.
[BugFix] Validate store indices and convert indexed write values pytorch/tensordict
TensorDictStore and LazyStackedTensorDictStore now bounds-check integer, list, range, tensor and boolean-mask indices, raising IndexError on out-of-range values and wrong-length masks and normalizing negative indices. Indexed writes convert and broadcast to the target, so stores that silently accepted bad indices will start raising.
$ ls pytorch/month/ # the briefings behind this review
Keep up with PyTorch in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.
Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.