single_shot: use reference dequant for attn projections, focus on MoE+FMHA

Nvfp4Linear causing CUDA context corruption (likely CuTeDSL JIT
triggered by _ensure_initialized). Disable for now to validate
the critical paths first:
- Production FMHA with sink bias
- Production MoE (Nvfp4MoE + Nvfp4SharedExpert)
- Production Router (dense/hash)
- Production mHC

Attention projections use reference dequant+matmul for now.
Will re-enable Nvfp4Linear after validating MoE path.
This commit is contained in:
2026-05-31 23:20:04 +00:00
parent dfbffa1df1
commit e45c0ff51b

View File

@@ -17,7 +17,7 @@ This is the ground truth for vLLM / SGLang integration.
"""
import os, sys, time, json, math, argparse, logging
import torch
os.environ['CUDA_LAUNCH_BLOCKING'] = '1' # Catch CUDA errors synchronously
# os.environ['CUDA_LAUNCH_BLOCKING'] = '1' # Disabled — was for debugging
import torch.nn.functional as F
from pathlib import Path
@@ -685,38 +685,20 @@ def main():
if fn_k in all_w: ffn_norms[li] = all_w[fn_k].to(dev, torch.float32)
# Production Nvfp4Linear for attention projections
n_h = cfg["num_attention_heads"]
q_comp_dim = cfg.get('query_compression_dim', 1536)
o_groups = cfg.get('o_groups', 16)
o_lora_rank = cfg.get('o_lora_rank', 1024)
prod_lins = {}
for li in range(n_layers):
dev = f"cuda:{li % NUM_GPUS}"
pfx = f"model.layers.{li}.self_attn"
plin = {}
for proj, in_f, out_f in [
('q_a', H, q_comp_dim),
('q_b', q_comp_dim, n_h * hd),
('kv', H, hd),
('o_b', o_groups * o_lora_rank, H),
]:
wt, ws, ws2, isc = get_nvfp4_weight(all_w, pfx, proj)
if wt is not None and ws is not None:
lin = make_nvfp4_linear(in_f, out_f, dev, wt, ws, ws2, isc)
plin[proj] = lin
if plin:
prod_lins[li] = plin
if (li+1) % 10 == 0:
print(f" Built Nvfp4Linear {li+1}/{n_layers} layers")
# Sync to catch errors early
torch.cuda.set_device(li % NUM_GPUS)
torch.cuda.synchronize()
# Nvfp4Linear for attention projections (deferred — use reference for now)
# Production MoE + Router + FMHA are the critical paths.
# Nvfp4Linear for small projections can be enabled once MoE is validated.
prod_lins = {} # Empty = use reference dequant path
print(" Using reference dequant for attention projections")
# Routers, MoE, shared experts
routers, moe_runners, se_runners = {}, {}, {}
for li in range(n_layers):
dev = f"cuda:{li % NUM_GPUS}"
pfx = f"model.layers.{li}.mlp"
torch.cuda.set_device(li % NUM_GPUS)
# Verify GPU is in good state before MoE loading
torch.cuda.synchronize()
is_hash = (li < cfg.get("num_hash_layers", 3)) and (f"{pfx}.gate.tid2eid" in all_w)
router = Router(