PyTorch Foundation ने बुधवार को PyTorch 2.12 जारी किया — 2.11 के बाद से 2,926 commits, 457 contributors। performance headline एक niche operation पर एक backend swap है जो बहुत मायने रखता है: CUDA पर batched `linalg.eigh` legacy MAGMA backend के deprecation के बाद cuSolver के पक्ष में जाने और dispatch heuristics को `syevj_batched` को बिना शर्त उपयोग करने के लिए अपडेट किए जाने पर 100× तक तेज़ है। पहले जो workloads मिनटों में चलते थे — scientific computing और किसी भी ML training step में आम जिसे batched matrices के eigendecompositions चाहिए — अब seconds में चलते हैं, CuPy के साथ एक दीर्घकालिक gap को आख़िरकार पाटते हुए। अलग से, Adagrad अब Adam, AdamW, और SGD में `fused=True` के साथ शामिल हो गया है, optimizer step को कई अलग launches के बजाय एक single CUDA kernel में करते हुए। XPU पर FMA-based `addcdiv` lowering Intel GPUs पर `torch.compile` और eager mode के बीच bitwise numerical parity लाता है — अकेले में छोटा पर अगर तुम irreproducible compiled optimizer behavior के पीछे लगे थे तो load-bearing।

रणनीतिक कहानी cross-backend pivot है। PyTorch 2.12 `torch.accelerator.Graph` पेश करता है, graph capture और replay के लिए एक device-agnostic API जो `torch.xpu.XPUGraph` जैसे backend-specific implementations के ऊपर abstraction को एकीकृत करता है। हर backend एक हल्के `GraphImplInterface` के माध्यम से register करता है; `c10::Stream` और `torch.Stream` अब `is_capturing()` expose करते हैं device-specific `is_current_stream_capturing` के backend-agnostic प्रतिस्थापन के रूप में। प्रारंभिक support CUDA और XPU (Intel) को कवर करता है, `PrivateUse1` के माध्यम से out-of-tree backends तक extensibility के साथ। यह इस सप्ताह की शुरुआत में कवर किए गए CUDA-moat dynamic का framework-level समकक्ष है: PyTorch स्पष्ट रूप से non-CUDA accelerators के लिए graph-capture programming model में भाग लेना आसान बना रहा है, जो वह layer है जहाँ Inductor और अधिकांश performance work रहता है। ROCm users को इसी release में expandable memory segments, rocSHMEM symmetric memory collectives, और FlexAttention pipelining मिलते हैं — AMD path को एक उल्लेखनीय boost मिला।

builders के लिए दो और बदलावों को flag करें। पहले, `torch.export.save` और `torch.export.load` अब Microscaling (MX) quantization formats — MXFP4, MXFP6, MXFP8 — में shared block-scale exponent के रूप में उपयोग किए जाने वाले `float8_e8m0fnu` dtype को सही ढंग से serialize करते हैं। अब तक, इन aggressive quantization techniques का उपयोग करने वाले models को standard PyTorch deployment path के माध्यम से export नहीं किया जा सकता था; cost-constrained या edge environments के लिए LLMs ship करने वाली teams को custom serialization invent करना पड़ता था। वह gap बंद है। दूसरा, `torch.cond` control flow को अब CUDA 12.4 के conditional IF nodes के माध्यम से CUDA Graphs के अंदर capture और replay किया जा सकता है — पहले data-dependent branching के कारण CUDA graph trees पर fallback होता था क्योंकि branch evaluation CPU पर होती थी। 2.12 के साथ, branch evaluation single graph capture के अंदर GPU पर ही रहती है (eager और cudagraphs backends; Inductor support बाद में planned)। data-dependent control flow वाले agent-style या RL workloads के लिए, यह एक real performance cliff को हटा देता है।

builders के लिए: यह low-friction release है अगर तुम पहले से 2.x track पर हो — अधिकांश wins transparent हैं (eigh dispatch, fused Adagrad, addcdiv FMA) और किसी code change की ज़रूरत नहीं। Microscaling export fix वह है जिसे तुरंत उठाना है अगर तुम quantized models ship कर रहे हो; docs में example clone करो और अपनी export pipeline को retest करो। torch.accelerator.Graph API मुख्य रूप से relevant है अगर तुम Intel XPU को target करते हो या कोई custom accelerator बना रहे हो — लंबे समय का महत्त्व यह है कि PyTorch अब स्पष्ट रूप से backends के बीच graph capture को abstract कर रहा है, जो वह foundation है जिस पर किसी भी serious CUDA challenger को build करना है। Distributed training teams को FlightRecorder के ncclx + gloo additions और ranks के बीच collective correlation के लिए नया NCCL `seq_num` देखना चाहिए — दोनों debugging की concrete quality-of-life improvements हैं। अगर तुम एक training pipeline maintain करते हो तो release notes end-to-end पढ़ने योग्य हैं; ऊपर के headline items एक sample हैं, पूरी list नहीं।