The Wire · Showcase
COLLECTIVE OPS STANDARDIZATION LANDS ACROSS C10D BACKENDS
By RepoJournal · Filed · About PyTorch
PyTorch's distributed communication layer just got a consistency overhaul: gather_single now works on nccl2, collective timing surfaces across all backends, and a new NaN check hook works everywhere.
The c10d team shipped five coordinated changes that unify distributed collective operations across in-tree nccl2, nccl-lazy, gloo, and custom backends [2] [3] [4] [5]. The headline move: gather_single, the single-output-tensor analog of all_gather_single, finally works on the in-tree nccl2 and nccl-lazy backends [2]. The same PR renames the old gather_into_tensor API to gather_single with a deprecated alias, matching the pattern already used for all_gather_single [3]. Collective timing and work sequence numbers, which stock nccl provided but in-tree backends silently no-opped, now surface uniformly through enableCollectivesTiming(), getDuration(), and getSequencenumber() [4]. A new backend-agnostic NaN check hook builds on ProcessGroup pre-hooks instead of native implementations, so the debug feature works for any backend, not just ProcessGroupNCCL [5]. In the main pytorch/pytorch repo, 22 deprecated torch.norm call sites got migrated to torch.linalg.vector_norm, cleaning up the API surface ahead of the eventual full deprecation [1]. Helion's flash attention optimizations continue to land in stacked PRs, tuning two-CTA kernels for aligned noncausal fp16 HD64 shapes from 32K through 128K [6]. ExecuTorch added QNN backend support for sort and pdist operations [7] [8], plus bf16 delegation for XNNPACK fully-connected layers so bfloat16 models can lower their linears instead of falling back to portable [9].
One email a day. Unsubscribe in one click.
Keep up with PyTorch in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Review gather_single migration if you use in-tree nccl2 or nccl-lazy backends pytorch/pytorch [plan]
- → Update torch.norm call sites if you maintain downstream code pytorch/pytorch [monitor]
- → Enable collectives timing and sequence tracking for profiling and hang debugging pytorch/pytorch [plan]
References
- [1] Migrate deprecated torch.norm calls to torch.linalg.* (#185097) pytorch/pytorch
- [2] [c10d][nccl2] Implement gather_single (#191067) pytorch/pytorch
- [3] [c10d] Rename gather_into_tensor to gather_single (#191073) pytorch/pytorch
- [4] [c10d][nccl2] Add collective timing and work sequence numbers (#191065) pytorch/pytorch
- [5] [c10d] Add a backend-agnostic NaN check hook (#191064) pytorch/pytorch
- [6] [cutedsl] Optimize dense HD64 two-CTA flash attention ↗ pytorch/helion
- [7] Qualcomm AI Engine Direct - Adding QNN backend support for the sort core ATen op ↗ pytorch/executorch
- [8] Qualcomm AI Engine Direct - Adding QNN backend support for _pdist_forward core ATen op ↗ pytorch/executorch
- [9] [xnnpack] Support bf16 delegation for fully-connected ↗ pytorch/executorch