$ the-wire · showcase
Dynamo stops silently folding with runtime_checkable Protocols, ExecuTorch drops CUDA 12.6 wheels
By RepoJournal · Filed · About PyTorch · Composed from the cited sources · methodology
A wrong-code fix in Dynamo's isinstance handling leads a day of boundary corrections: ExecuTorch retires the cu126 train and packages KleidiAI separately on Apple, while the inductor device table finally learns the names ROCm hosts actually report.
[dynamo] Fix isinstance() with unions/tuples of runtime_checkable Protocols (#196124) pytorch/pytorch
isinstance(o, HasPorts | HasFoo) and the tuple form compiled to a constant False under Dynamo whenever HasPorts was a @runtime_checkable Protocol with a non-method member, though eager returned True, and there was no graph break to warn you. Compiled code that branches on Protocol unions can now agree with eager mode.
Stop publishing CUDA 12.6 wheels (#23015) pytorch/executorch
PyTorch retired CUDA 12.6 from its nightly channel, so no ExecuTorch nightly has built that train since early September: cu126 is stranded at 1.5.0.dev20260906 while cpu, cu130, cu132 and cu134 sit at 1.6.0.dev20260922. Nightly cu126 consumers should move to a supported train; releases keep publishing it for now.
[ROCm] Resolve the device names ROCm hosts report in inductor's table (#198220) pytorch/pytorch
Inductor's static device table is keyed on the marketing name torch.cuda.get_device_name() returns, and on ROCm that lookup missed even after the MI355X entry landed, because CI runners report suffixed names like "AMD Instinct MI350X VF" and "AMD Instinct MI300X HF". Those hosts should stop falling through to the generic entry in device_info.py.
Apple: Package KleidiAI as a common framework dependency (#22996) pytorch/executorch
SwiftPM apps that use optimized kernels without XNNPACK failed to link SME2 BF16 GEMM symbols because libkleidiai.a shipped only inside the XNNPACK framework. KleidiAI is now a separate static XCFramework shared by XNNPACK, optimized kernels, and TorchAO, with Release and Debug artifacts in the Apple workflow.
Default a tensorless fallback kernel to CPU instead of asserting (#197584) pytorch/pytorch
FallbackKernel asserted "Not sure where to find device info" whenever find_device came back empty, and one of those empty cases was a real gap: recursion walked past a dict even though generate_output builds a MultiOutput per dict value. Tensorless fallback kernels now default to CPU instead of asserting.
Arm backend: Keep INT delegate boundaries quantized (#22966) pytorch/executorch
In the long tail: the Arm backend stops leaving dequantize and float ops inside INT-only TOSA partitions at output boundaries, so a delegate no longer writes integer data into a buffer ExecuTorch described as FP32.