This branch adds native NVFP4 support to DeepGEMM's mega MoE kernel. NVFP4 uses E2M1 packed weights with UE4M3 block scales (group_size=16), as opposed to MXFP4 which uses UE8M0 scales (group_size=32).
**HARD RULE: MoE experts stay in NVFP4. Never convert to MXFP4.**
## What Changed
### CUDA Kernel (`sm100_fp8_nvfp4_mega_moe.cuh`)
| Parameter | MXFP4 (original) | NVFP4 (new) |
|-----------|-----------------|-------------|
| `kGranK` | 32 | 16 |
| Scale factor type | `float_ue8m0_t` | `float_ue4m3_t` |
4. Tensor Core reads UE4M3 scales via mxf4nvf4 instruction
```
## Important Notes
### scale_format_ constraint
The CUTLASS instruction descriptor has a single `scale_format_` bit (0=E4M3, 1=E8M0) that applies to BOTH A and B scale factors. This means both activation (SFA) and weight (SFB) scales must use the same format. The L1 epilogue outputs UE4M3 activation scales to match the NVFP4 weight scales.
### Weight scale_2 handling
The NVFP4 checkpoint has a dual-level scaling scheme:
-`weight_scale`: per-block UE4M3 (group_size=16)
-`weight_scale_2`: per-tensor float32 global scale
The `weight_scale_2` must be multiplied into the block scales **before** packing for the kernel. This is done in `transform_nvfp4_weights_for_mega_moe()`.