@@@AUDIT_CHALK
[chalk] LIGER changed 20 module forwards; classes swapped:
  liger classes: ['Qwen3_5ForCausalLM', 'Qwen3_5MLP', 'Qwen3_5RMSNorm']
[rope] fused Triton RoPE installed on ['qwen3_5', 'qwen3_5_moe'] (self-test passed)
[triton_lora] PEFT (dense) LoRA Linear.forward patched with fused Triton kernel (QLoRA/bnb Linear4bit/Linear8bitLt keep stock PEFT — unsupported by this kernel)
[mlp] bf16 fused MLP not enabled on sm_90 (bf16 fusion wins on Ampere sm_8x only; Hopper sm_90 uses the separate FP8 path); keeping Liger/eager
[embed] fused Triton gather+RMSNorm kernel enabled (self-test passed)
[embed] fused Triton gather+RMSNorm installed on layer-0 input_layernorm (forward-only, frozen-embed path)
[chalk] CHALK changed 24 module forwards
  chalk-only (pure gap-fill, no Liger overlap): 23
    + base_model.model.model.embed_tokens  (Embedding)
    + base_model.model.model.layers.0.mlp.down_proj  (Linear)
    + base_model.model.model.layers.0.mlp.gate_proj  (Linear)
    + base_model.model.model.layers.0.mlp.up_proj  (Linear)
    + base_model.model.model.layers.1.mlp.down_proj  (Linear)
    + base_model.model.model.layers.1.mlp.gate_proj  (Linear)
    + base_model.model.model.layers.1.mlp.up_proj  (Linear)
    + base_model.model.model.layers.2.mlp.down_proj  (Linear)
    + base_model.model.model.layers.2.mlp.gate_proj  (Linear)
    + base_model.model.model.layers.2.mlp.up_proj  (Linear)
    + base_model.model.model.layers.3.mlp.down_proj  (Linear)
    + base_model.model.model.layers.3.mlp.gate_proj  (Linear)
  RE-PATCHED a Liger-swapped module (must be validated-equivalent): 1
    ! base_model.model.model.layers.0.input_layernorm  (Qwen3_5RMSNorm -> chalk)
@@@AUDIT_PARITY
[rope] fused Triton RoPE installed on ['qwen3_5', 'qwen3_5_moe'] (self-test passed)
[triton_lora] PEFT (dense) LoRA Linear.forward patched with fused Triton kernel (QLoRA/bnb Linear4bit/Linear8bitLt keep stock PEFT — unsupported by this kernel)
[mlp] bf16 fused MLP not enabled on sm_90 (bf16 fusion wins on Ampere sm_8x only; Hopper sm_90 uses the separate FP8 path); keeping Liger/eager
[embed] fused Triton gather+RMSNorm kernel enabled (self-test passed)
[embed] fused Triton gather+RMSNorm installed on layer-0 input_layernorm (forward-only, frozen-embed path)
[parity] Liger-only vs Liger+chalk logits rel-err: 3.816e-03
  (chalk's rope/embedding/lora are ~exact; a destructive Liger intersection — e.g.
   double-applied norm — would push this far past the bf16 envelope ~2e-2)
  VERDICT: OK — complementary
@@@BENCH_fp8_base
up_proj_M8192    0.5741   0.4282  1.341    0.03747
down_proj_M8192  0.5505   0.3871  1.422    0.03752

=== Shared-input quant vs independent (sibling projection groups) on H100_80GB_HBM3 ===
case          indep ms  shared ms  speedup
------------------------------------------
qkv_M2048     0.3316    0.2024     1.638  
gateup_M2048  0.2288    0.1624     1.409  
qkv_M4096     0.3344    0.2081     1.607  
gateup_M4096  0.387     0.3701     1.045  
qkv_M8192     0.4318    0.3753     1.151  
gateup_M8192  0.7588    0.7488     1.013  

[fp8_base] per-proj: 13/21 faster than bf16, geomean 0.841; shared-quant group geomean 1.286x; wrote /workspace/chalk/benchmark/results/H100_80GB_HBM3/fp8_base.json
@@@BENCH_rope

=== Fused RoPE vs eager HF (fwd-only kernel signal + fwd+bwd step) on H100_80GB_HBM3 ===
case     eager fwd  fused fwd  fwd x  fwd+bwd x  rel_err 
---------------------------------------------------------
seq1024  0.16       0.1406     1.138  1.275      0.002309
seq2048  0.1562     0.1422     1.098  1.275      0.002307
seq4096  0.273      0.1426     1.915  1.276      0.002281
seq8192  0.5361     0.1653     3.243  1.987      0.002254

[rope] wrote /workspace/chalk/benchmark/results/H100_80GB_HBM3/rope.json
@@@BENCH_embedding
[embed] fused Triton gather+RMSNorm kernel enabled (self-test passed)

=== Fused gather+RMSNorm vs eager on H100_80GB_HBM3 ===
case      eager ms  fused ms  speedup  rel_err  
------------------------------------------------
tok2048   0.1122    0.0523    2.145    1.84e-05 
tok4096   0.2124    0.05165   4.113    1.551e-05
tok8192   0.3939    0.04665   8.442    1.409e-05
tok16384  0.7533    0.06242   12.07    1.538e-05

[embedding] wrote /workspace/chalk/benchmark/results/H100_80GB_HBM3/embedding.json
@@@BENCH_qkv

=== Fused QKV epilogue (QK-norm+partial-RoPE+gate) vs eager on H100_80GB_HBM3 ===
case     eager ms  fused ms  speedup  rel_err 
----------------------------------------------
tok512   0.4795    0.07767   6.174    0.001661
tok2048  0.4971    0.08253   6.023    0.001662
tok4096  0.6996    0.08051   8.69     0.001661
tok8192  1.297     0.1549    8.377    0.001662

[qkv] wrote /workspace/chalk/benchmark/results/H100_80GB_HBM3/qkv.json
@@@BENCH_lora
=== Fused LoRA delta vs eager autograd on H100_80GB_HBM3 ===
case                    fwd x   fwd+bwd x  fused ms  rel_err 
-------------------------------------------------------------
M2048_K2560_N4096_R32   0.6144  0.7602     0.4718    0.00334 
M2048_K9216_N2560_R16   0.6676  0.8992     0.4465    0.002631
M2048_K2560_N9216_R64   0.7976  0.8102     0.4658    0.00235 
M8192_K2560_N4096_R32   1.366   0.854      0.4472    0.003323
M8192_K9216_N2560_R16   1.31    0.8349     0.4842    0.002621
M8192_K2560_N9216_R64   2.112   1.304      0.4562    0.002349
M16384_K2560_N4096_R32  2.353   1.283      0.4614    0.003346
M16384_K9216_N2560_R16  1.727   1.369      0.4704    0.002621
M16384_K2560_N9216_R64  2.593   2.209      0.5225    0.002351

[lora] fwd+bwd speedup range 0.76-2.21x; wrote /workspace/chalk/benchmark/results/H100_80GB_HBM3/lora.json
@@@BENCH_mlp
[mlp] bf16 fused MLP not enabled on sm_90 (bf16 fusion wins on Ampere sm_8x only; Hopper sm_90 uses the separate FP8 path); keeping Liger/eager
[mlp] bf16 fused MLP inactive on sm_90 (Ampere sm_8x only); skip
@@@DONE
