Yash Bishnoi

ML engineer, Glasgow

My open source contributions.

Most of this starts on my NVIDIA GB10, where newer hardware exposes assumptions that older GPUs never tested. I reproduce the failure, find the cause and send the fix. As of 1 November 2026, the pull requests featured here include 8 landed (including one co-authored PR) and 7 in review.

Accepted, not yet public

  1. ONNX MatMul documentation

    Accepted through the ONNX Slack

    The MatMul operator's description mostly pointed readers to NumPy, leaving them to work out the matrix, vector and batch-shape rules themselves. I rewrote it to state those rules directly, with a nine-row shape table and a worked numerical example, across the shared schema for versions 1, 9 and 13.

    My patch also has 14 shape-inference checks for inputs the documentation says are invalid. The behaviour of the operator doesn't change.

    Accepted through the ONNX Slack. The public pull request hasn't been opened yet.

Landed

  1. PyTorch Helion #3963

    ยท Co-author

    Output stores in epilogue_subtile could split along the wrong dimension, causing compilation failures. My fix in #3896 maps the split tile to its actual output dimension and leaves unsupported indexers unsplit. It landed as part of #3963, alongside fixes for static slices and runtime index lowering.

    Co-authored the merged commit.

  2. PyTorch #196167

    Under torch.compile, an OrderedSet lost its insertion order at the compile boundary, because TorchDynamo modelled it as a plain set. I split OrderedSetVariable off SetVariable so it follows the real Python type.

  3. PyTorch #193580

    Calling .add on a frozenset under torch.compile raised an internal assertion. CPython raises AttributeError. Splitting FrozensetVariable off SetVariable makes compiled code fail the same way eager code does.

  4. PyTorch Helion #3415

    A scaled_mm config tuned for H100 needed 147,456 bytes of shared memory, and a GB10 has 101,376, so the test ran a config that could never launch. The test now skips on GPUs with under 147,456 bytes of shared memory, GB10 included, and sm121 has its own heuristic file, which I checked in a separate run with the guard bypassed.

  5. bitsandbytes #2030

    Added an sm121 tier to the 4-bit GEMM dispatch heuristic, chosen from measured timings. To show nothing else moved, I enumerated all 60,720 dispatch decisions in the test grid: 216 changed, and every one was on sm121.

  6. bitsandbytes #2039

    Extended the same work to the wide_n_simt dispatch rule, so GB10 gets the wide kernel path too.

  7. HAMi website #865

    Cut the v2.10.0 documentation for HAMi, the CNCF GPU virtualisation project, in English and Chinese. I also corrected the memory units, resource formats, and the device registration and health-check explanations against the v2.10.0 release.

  8. Liger-Kernel #1332

    A one-line fix. pyproject.toml had no requires-python, so pip would install the package on interpreters it doesn't support.

In review

  1. PyTorch Helion #4097

    Opened 20 Oct 2026

    On a GPU with no heuristic file of its own, configs from an older GPU can exceed its limits. On GB10 with only the sm90 file, 19 of 24 decode shapes failed at first launch. This fits a config to the GPU when it first runs.

  2. PyTorch Helion #4045

    Opened 16 Oct 2026

    The autotuner silently dropped seed configs with short per-loop lists. On GB10 that was all 97 scaled_mm configs, and the log gave no reason. This fills the short lists.

  3. TRL #7085

    Opened 6 Sep 2026

    Fixes FP8 weight synchronisation for colocated vLLM, so vLLM rebuilds its FP8 weights and scales from the current training weights on each sync.

  4. browser-use #5701

    Opened 6 Sep 2026

    A model call finishing during a pricing lookup could make a usage summary disagree with itself. The summary now works from one snapshot of the call history.

  5. compressed-tensors #844

    Opened 19 Aug 2026

    Models whose layers have different attention shapes crashed during attention or KV-cache quantisation. Shapes are now read from each layer's own config.

  6. Triton #11363

    Opened 18 Aug 2026

    Consumer Blackwell has no tile::scatter4, so desc.scatter() failed deep in ptxas as an internal error. It's now rejected at compile time with a message that names the hardware limit.

  7. Liger-Kernel #1328

    Opened 31 Jul 2026

    The fused cross-entropy backward failed under torch.compile on an overload TorchInductor can't lower. The fast path now steps aside while compiling, and eager mode is unchanged.

Reports and triage

A GB10 on my desk lets me test bugs on hardware many maintainers don't have.

HAMi #3156
A validation of HAMi v2.10.0 on real GB10 hardware, with raw logs. cudaMalloc memory limits work; compute throttling switched itself off through a default-policy feedback deadlock and, once engaged, did not hold a pod near its share.
vLLM #50773
Investigated garbled output from custom quantisation fusions on GB10, finding a real defect that does not explain the report. The cause is still open.
FlashInfer #4331
Ran the numerical suite on GB10 when the PR's author asked for sm12x results, then followed up on the kernel-cache gap in #4317.
Triton #11344
Reported the scatter failure on consumer Blackwell that led to Triton #11363.
Helion #3772
Offered to extend the sm121 heuristic to the full vLLM decode grid, which led to the autotuner work above.
compressed-tensors #847
Reported that overlapping regex targets sort alphabetically rather than by specificity, so a broad pattern can beat an explicit layer list.