Repository navigation
Description
Hi, and thank you for Flare. We run DeepSeek-V4.1-Flash-1017 at TP=4 on four DGX Spark (GB10) nodes on the RoCE ring, and it serves well from a bce032c package. When we moved to main at eb71702b, the export fails in "Warm compiled forwards" with a GPU fault on one rank. We are not sure where to look next and would appreciate advice.
What happens
Two runs with the same options. Each one fails on a different node and in a different graph, but the Xid ESR values are identical:
| Run | Rank (node) | Forward being warmed | Step |
|---|---|---|---|
| 1 | 2 | packed-speculative4x6-drafts5-tokens21 |
Warm compiled forwards 29/72 |
| 2 (cache warm) | 3 | prefill3072 |
Warm compiled forwards 2/72 |
NVRM: Xid (PCI:000f:01:00): 13, Graphics SM Warp Exception on (GPC 0, TPC 0, SM 0): Illegal Instruction Encoding
NVRM: Xid (PCI:000f:01:00): 13, Graphics Exception: ESR 0x505730=0x20009 0x505734=0x20 0x505728=0x1c81fb60 0x50572c=0x1174
NVRM: Xid (PCI:000f:01:00): 43, pid=..., name=ignition, channel 0x00000002
The faulting rank reports CUDA_ERROR_ILLEGAL_INSTRUCTION (715). The other ranks then report RoCE collective on rank N timed out waiting for rank 2 (run 1) or RoCE proxy failed: two-shot op 475 abandoned: kernel timed out (run 2). NIC counters show no discards, receive errors or link-down events, so we read the RoCE errors as a consequence of the fault.
Setup
- 4x DGX Spark GB10 (compute capability 12.1), DGX OS OTA 26.09.2, driver 580.178.04, CUDA 13.3
- Flare
eb71702bwith four small local patches (frontend tool choice, image placeholder text, prefix snapshot eviction, payload hashing). None of them touch kernels or Ignition preparation. - torch 2.14.1+cu132, triton 3.8.0, flashinfer-python 0.7.1 (
local-inference-lab/flashinfer@f91f257e), nvidia-cutlass-dsl 4.7.1 ignition export <official checkpoint> --gpus 0 --ranks 4 --roce-ring --transfer-streams 8 --max-concurrency 4 --mtp-draft-tokens 5 --prefill-chunk-size 4096 --expert-scale-compression csf- The same options at
bce032cexport and serve with no fault, on the same OS and hardware, today.
Questions
- Is a kernel on this path known to need a newer FlashInfer or b12x build for SM121? We noticed
085ae4a7(FlashInfer MXFP4 MoE), Prepare DeepSeek V4.1 MXFP8 attention with public b12x plans #109 (MXFP8 attention) and Fuse DSpark draft scoring and sparse support restoration #95 (fused draft scoring) between the two pins, but we have not bisected. - Is there a flag or an environment setting that makes the faulting kernel easier to identify, for example by disabling per-rank tuning selection, so that we can send a more useful report?
We can run a bisect or a debug build on the four nodes if that helps. Thank you.
Activity
javieratomic commentedon Oct 29, 2026
Hello, I found this same problem yesterday morning 3 dgx spark also deepseek v4.1 flash 1017, I have been since chasing it but still unsure what does it cause it, hope to update with news soon after some more testing, now thx to you im sure its not my setup.
javieratomic commentedon Oct 29, 2026
Follow-up with what I have narrowed down so far, on 3x GB10, driver 580.178.04, DeepSeek V4.1 Flash TP3:
Regressing commit. Bisecting gives cb6187b ("Agree and freeze Inductor kernels before graph capture"), which falls inside your bce032c..eb71702 range. Its parents (e.g. ca1f960) export and serve fine for me, so building from a commit before cb6187b is a working stopgap.
Where it fails. In
InductorSelections.warm(), during the second (frozen) warm pass, after_reconcile->_installhas rebuilt the kernel launchers. The dmesg signature is always the same as yours:What I have ruled out (each one is a full export, with the result):
_installdoing nothing: passes. Installing the selection without rebuilding the launchers: passes.TORCHINDUCTOR_USE_FAST_TRITON_LAUNCHER=0(no cached rawCUfunction): fails.The faulting kernel is not at fault. With a
torch.cuda.synchronize()after every static launch in the frozen warm, the fault lands on a specific kernel, but a different one per run (a reduction with R0_BLOCK 512 / 4 warps once, a small pointwise kernel another time). The SASS of the cubin that was loaded disassembles cleanly withnvdisasmand is identical to a fresh compile. Loading and launching that same cubin in isolation passes thousands of times, including with heavy memory churn and thousands of other modules loaded.Not Flare-specific. vLLM on the same nodes has died with the very same Xid 13 and the same ESR values, which points at the driver/platform rather than at the kernels.
So far: reloading already-loaded Inductor cubins as new modules mid-process and launching from them triggers it, intermittently and at a random kernel. I'm still investigating and working on a standalone reproducer outside Flare; will post here when I have one.
javieratomic commentedon Oct 29, 2026
Update: on the same 3x GB10 setup, upgrading the driver from 580.178.04 to 615.71.09 makes the problem go away.
Driver details, in case it helps anyone reproduce: Ubuntu 24.04
noble-updatespackagesnvidia-driver-615-openplus the prebuilt, signedlinux-modules-nvidia-615-open-$(uname -r)(no DKMS needed, works with Secure Boot), on the DGX OS 7.0.0-1019-nvidia kernel (4K pages).nvidia-smireports CUDA 13.4. The only new boot message is a harmlessNV_ERR_NOT_SUPPORTEDfromkoobInitAperture.Note that NVIDIA currently validates only the DGX OS R580 driver on DGX Spark, so this is ahead of the supported stack; building from a commit before cb6187b remains the option on R580.
calvarado2004 commentedon Oct 29, 2026
I'll test it with NVIDIA Flare on my 4 DGX Sparks @javieratomic!
CaptKitCarson commentedon Nov 2, 2026
Data point from a different model and TP size: on
mainat6fa01a49(includescb6187bf), a Qwen3.8 Flash Next TP2 export finished on two DGX Spark (GB10) nodes without this fault, on the R580 driver.nvidia/Qwen3.8-Flash-Next-FP4-Local@b9ce18a6, FlashInferf5f5341d(fromuv.lock)ignition export <checkpoint> --ranks 2 --gpus 0 --max-concurrency 8(default MTP 5)This is one export, and the fault is reported as intermittent, so it doesn't show Qwen is immune. It may help narrow the problem to the model, the graph count or the rank count.
mark-yong commentedon Nov 3, 2026
@calvarado2004 were you able to test with the driver version >= 615.71.09?
Please note that there was a fix for this, a794c99, but wanna see if driver fixes it, so please use a version without it
mark-yong commentedon Nov 3, 2026
A note connecting this to #187. Two independent changes each avoid the fault, which suggests
cb6187bfis the trigger and the R580 driver is the cause:a794c99dkeeps transient physical memory alive across compiled-forward warmup and was added for the same illegal instruction on DGX Spark. It does not stop the launcher rebuild. On a 96 GB SM120 GPU running driver 615.71.09, disabling that retention produced no fault in a fullqwen3.8-27bexport (qwen3.8-27b export runs out of memory during compiled-forward warmup on 96 GB SM120: transient physical retention accumulates across forwards #187), though the driver alone may explain that.cb6187bfmakes_reconcilecall_installfor every newly registered kernel. That reloads its cubin through_make_launchers(), and the frozen warm pass immediately runs the reloaded module, which matches the reload-only failure bisected above.A question for maintainers: on a single GPU, or when every rank already holds the winning selection,
_installreloads the selection the tuner already has. Could_installbe skipped when the current launcher matches the winner's config and cubin, if its config normalization anddynamic_scale_rblocksetting are preserved? That would cut most reloads without weakening agreement, and it might reduce the need for retention on R580. It has not been tested, and I have no Spark to test it on.calvarado2004 commentedon Nov 3, 2026
@mark-yong indeed, Driver 615.71.09 works pretty well.
mark-yong commentedon Nov 3, 2026
@lukealonso suspect that driver version was the cause of the issue that necessitated a794c99, triggered by cb6187b's kernel reloads
CaptKitCarson commentedon Nov 3, 2026
@mark-yong We upgraded today, but this isn't the test you asked for: our build still includes
a794c99d, and we haven't run an export on 615 yet. Here's what we have so far.mainat6fa01a49, which contains bothcb6187bfanda794c99d, serving a prepared Qwen3.8 Flash Next TP2 package.Two install notes for anyone following the steps above on DGX OS:
apt-get install nvidia-driver-615-openpulls innvidia-dkms-615-openand a new kernel (7.0.0-1024) through thelinux-*-nvidia-hwe-24.04meta-packages, even withlinux-modules-nvidia-615-open-$(uname -r)named. To change only the driver, we installednvidia-headless-no-dkms-615-open,nvidia-utils-615, thelibnvidia-*-615libraries you need and the prebuilt module, with those meta-packages pinned at their installed versions. Afterwards we ranapt-mark holdon them, so a later upgrade can't boot a kernel that has no 615 module. Runapt-get -sfirst to check the plan.LD_LIBRARY_PATHat a CUDA forward-compatibilitylibcudaon R580 (ours was 595.58.03), remove it after upgrading. Otherwise the older compat library loads instead of the 615 driver's own.