CCCL tuning_radix_sort.cuh teaches: when one kernel in a chain is unavailable,
replace ONLY that kernel while keeping downstream native ops alive.
Our MoE chain: topk_softmax → moe_align_block_size → invoke_fused_moe_kernel
BI-V100 ixformer lacks vllm_moe_topk_softmax, which killed the ENTIRE chain
and forced 100% PyTorch fallback (_pure_pytorch_experts: 256x F.linear loop).
Fix: Add try/except in topk_softmax with PyTorch fallback (softmax+topk).
Now the chain can proceed to native align+invoke kernels if they exist.
Also: dont permanently disable native path after first failure — retry once.
CCCL source: catch2_test_device_radix_sort_pairs.cu + tuning_radix_sort.cuh
Maps to: _custom_ops.py (topk_softmax) + qwen3_5.py (MoE forward)
1. paged_attention_v2_pytorch.py was missing from container
- _custom_ops.py imports it but Dockerfile only COPYs qwen3_6_scripts/
- Now: copied into qwen3_6_scripts/ + patch_ops deploys to both $V/ and /workspace/
2. prefix_prefill.py was not deployed by patch_ops.sh
- xformers.py may try to import context_attention_fwd from it
- Now: patch_ops copies it to $V/attention/ops/
3. _custom_ops.py paged_attention_v2 import path hardened
- Try 3 locations: vllm package, /workspace/, repo root
- Prevents ImportError in container where file locations differ
CCCL source read: cub/block/block_exchange.cuh (blocked↔striped data rearrangement)
→ identified missing file deployment as analogous to incorrect data layout mapping
Source: cccl_upstream/cub/test/catch2_test_grid_even_share.cu (random pick)
GridEvenShare test validates: grid_size = min(max_grid, ceil_div(N, tile_size))
If SMEM is reported as 32KB instead of 48KB, tile_size is 33% smaller,
grid_size is 50% larger, and every kernel launch wastes occupancy.
Base image _custom_ops.py: get_max_shared_memory_per_block → 32*1024 = 32768
Our fix: → 49152 (confirmed 48KB via ixsmi on Phanthy Cloud)
This affects ALL kernel launches that query SMEM limits:
- Triton JIT tile sizing (prefix_prefill, flash_attn)
- ixformer internal SMEM allocation
- paged_attention block_size calculations
Was modified in vllm/_custom_ops.py but NEVER added to qwen3_6_scripts/
for Docker deployment. Now deployed.