# exclusion_frontier.py --M 2048 --weight abs
K CENSUS of the classes the leg served (this checkpoint):
       K blocks classes   calls  suffixes
    5120     40     272    3264  linear_attn.in_proj_qkv, linear_attn.in_proj_z, mlp.gate_proj, mlp.up_proj, self_attn.k_proj, self_attn.q_proj, self_attn.v_proj
    6144     48      64     768  linear_attn.out_proj, self_attn.o_proj
   17408    136      64     768  mlp.down_proj

MECHANISM -- rank correlation over classes, leg B as the null:
  Spearman(int8 err, K)      = +0.743
  Spearman(legB err, K)      = -0.037   <- null
  Spearman(int8 err, across-block spread) = +0.533   (n=400)
  Spearman(legB err, across-block spread) = -0.681   <- null
  Spearman(int8 err, overall crest)       = +0.516
  Spearman(legB err, overall crest)       = -0.614   <- null
  median int8 err / legB err, by K:
    K=5120   blocks=40   n=272  int8 1.103e-02  legB 2.498e-03  ratio 4.41x   INT8G1/INT8 median 0.729 [p05 0.540, p95 0.870]   spread 1.99
    K=6144   blocks=48   n=64   int8 1.668e-02  legB 2.289e-03  ratio 7.29x   INT8G1/INT8 median 0.585 [p05 0.512, p95 0.665]   spread 2.74
    K=17408  blocks=136  n=64   int8 1.449e-02  legB 2.593e-03  ratio 5.59x   INT8G1/INT8 median 0.637 [p05 0.484, p95 0.721]   spread 2.29

EXCLUSION FRONTIER at M=2048, error weighting `abs` -- per projection class (all layers), the
share of the leg's speed-up given up against the share of its injected
error removed (op-level, fp32 oracle).  Leg B's own error energy is
0.068 of int8's; INT8G1's is 0.467 of it.
  class                           K  blk  calls  speed given up  error removed  err/speed  err removed by INT8G1
  self_attn.q_proj             5120   40    192           4.3%         21.5%       4.96                 13.8%
  linear_attn.in_proj_z        5120   40    576           6.7%         21.0%       3.11                 13.4%
  self_attn.v_proj             5120   40    192           0.3%          1.0%       3.05                  0.4%
  self_attn.k_proj             5120   40    192           0.3%          0.9%       2.69                  0.4%
  linear_attn.in_proj_qkv      5120   40    576          10.7%         19.6%       1.83                  9.9%
  mlp.gate_proj                5120   40    768          24.4%         17.7%       0.72                  7.6%
  self_attn.o_proj             6144   48    192           2.2%          1.1%       0.49                  0.7%
  mlp.up_proj                  5120   40    768          23.6%         11.2%       0.48                  3.1%
  mlp.down_proj               17408  136    768          20.8%          4.9%       0.23                  3.3%
  linear_attn.out_proj         6144   48    576           6.6%          1.2%       0.18                  0.8%

  cumulative, excluding classes in that order:
    + self_attn.q_proj         speed given up   4.3%   error removed  21.5%
    + linear_attn.in_proj_z    speed given up  11.1%   error removed  42.5%
    + self_attn.v_proj         speed given up  11.4%   error removed  43.5%
    + self_attn.k_proj         speed given up  11.7%   error removed  44.4%
    + linear_attn.in_proj_qkv  speed given up  22.4%   error removed  64.0%
    + mlp.gate_proj            speed given up  46.8%   error removed  81.7%
    + self_attn.o_proj         speed given up  49.0%   error removed  82.7%
    + mlp.up_proj              speed given up  72.6%   error removed  94.0%
    + mlp.down_proj            speed given up  93.4%   error removed  98.8%
    + linear_attn.out_proj     speed given up 100.0%   error removed 100.0%

  INT8G1 (per-128-group, every class kept): error removed 53.3%, speed given up 11.4% of the per-token leg's win at M=2048

  HYBRID -- INT8G1 on these classes, INT8 on the rest; cumulative:
    + group self_attn.q_proj       win given up   0.5%   error removed  13.8%   (this class alone:  0.5% for 13.8%)
    + group linear_attn.in_proj_z  win given up   1.4%   error removed  27.2%   (this class alone:  0.9% for 13.4%)
    + group self_attn.k_proj       win given up   1.5%   error removed  27.6%   (this class alone:  0.1% for  0.4%)
    + group linear_attn.in_proj_qkv win given up   2.9%   error removed  37.5%   (this class alone:  1.4% for  9.9%)
    + group self_attn.v_proj       win given up   3.0%   error removed  37.9%   (this class alone:  0.1% for  0.4%)
    + group mlp.gate_proj          win given up   5.2%   error removed  45.4%   (this class alone:  2.2% for  7.6%)
    + group self_attn.o_proj       win given up   5.4%   error removed  46.1%   (this class alone:  0.2% for  0.7%)
    + group mlp.down_proj          win given up   7.8%   error removed  49.4%   (this class alone:  2.5% for  3.3%)
    + group mlp.up_proj            win given up  10.5%   error removed  52.5%   (this class alone:  2.6% for  3.1%)
    + group linear_attn.out_proj   win given up  11.4%   error removed  53.3%   (this class alone:  0.9% for  0.8%)

# --weight rel
EXCLUSION FRONTIER at M=2048, error weighting `rel` -- per projection class (all layers), the
share of the leg's speed-up given up against the share of its injected
error removed (op-level, fp32 oracle).  Leg B's own error energy is
0.044 of int8's; INT8G1's is 0.442 of it.
  class                           K  blk  calls  speed given up  error removed  err/speed  err removed by INT8G1
  self_attn.k_proj             5120   40    192           0.3%          3.7%      11.39                  1.9%
  self_attn.v_proj             5120   40    192           0.3%          2.5%       7.64                  1.0%
  self_attn.o_proj             6144   48    192           2.2%          7.6%       3.47                  4.8%
  linear_attn.out_proj         6144   48    576           6.6%         20.2%       3.05                 13.5%
  linear_attn.in_proj_z        5120   40    576           6.7%         10.5%       1.56                  7.0%
  mlp.down_proj               17408  136    768          20.8%         21.7%       1.05                 13.5%
  linear_attn.in_proj_qkv      5120   40    576          10.7%          9.9%       0.92                  5.5%
  self_attn.q_proj             5120   40    192           4.3%          2.6%       0.60                  1.6%
  mlp.up_proj                  5120   40    768          23.6%         11.5%       0.49                  3.1%
  mlp.gate_proj                5120   40    768          24.4%          9.6%       0.40                  4.0%

  cumulative, excluding classes in that order:
    + self_attn.k_proj         speed given up   0.3%   error removed   3.7%
    + self_attn.v_proj         speed given up   0.7%   error removed   6.3%
    + self_attn.o_proj         speed given up   2.8%   error removed  13.9%
    + linear_attn.out_proj     speed given up   9.5%   error removed  34.1%
    + linear_attn.in_proj_z    speed given up  16.2%   error removed  44.6%
    + mlp.down_proj            speed given up  37.0%   error removed  66.4%
    + linear_attn.in_proj_qkv  speed given up  47.7%   error removed  76.2%
    + self_attn.q_proj         speed given up  52.0%   error removed  78.8%
    + mlp.up_proj              speed given up  75.6%   error removed  90.4%
    + mlp.gate_proj            speed given up 100.0%   error removed 100.0%

  INT8G1 (per-128-group, every class kept): error removed 55.8%, speed given up 11.4% of the per-token leg's win at M=2048

  HYBRID -- INT8G1 on these classes, INT8 on the rest; cumulative:
    + group self_attn.k_proj       win given up   0.1%   error removed   1.9%   (this class alone:  0.1% for  1.9%)
    + group self_attn.o_proj       win given up   0.3%   error removed   6.7%   (this class alone:  0.2% for  4.8%)
    + group self_attn.v_proj       win given up   0.3%   error removed   7.7%   (this class alone:  0.1% for  1.0%)
    + group linear_attn.out_proj   win given up   1.2%   error removed  21.3%   (this class alone:  0.9% for 13.5%)
    + group linear_attn.in_proj_z  win given up   2.1%   error removed  28.3%   (this class alone:  0.9% for  7.0%)
    + group mlp.down_proj          win given up   4.5%   error removed  41.7%   (this class alone:  2.5% for 13.5%)
    + group linear_attn.in_proj_qkv win given up   6.0%   error removed  47.2%   (this class alone:  1.4% for  5.5%)
    + group self_attn.q_proj       win given up   6.5%   error removed  48.8%   (this class alone:  0.5% for  1.6%)
    + group mlp.gate_proj          win given up   8.7%   error removed  52.7%   (this class alone:  2.2% for  4.0%)
    + group mlp.up_proj            win given up  11.4%   error removed  55.8%   (this class alone:  2.6% for  3.1%)

# --M 8192 --weight rel
  INT8G1 (per-128-group, every class kept): error removed 55.8%, speed given up 12.5% of the per-token leg's win at M=8192

  HYBRID -- INT8G1 on these classes, INT8 on the rest; cumulative:
    + group linear_attn.out_proj   win given up   0.1%   error removed  13.5%   (this class alone:  0.1% for 13.5%)
    + group self_attn.v_proj       win given up   0.2%   error removed  14.5%   (this class alone:  0.0% for  1.0%)
    + group self_attn.k_proj       win given up   0.2%   error removed  16.5%   (this class alone:  0.0% for  1.9%)
    + group self_attn.o_proj       win given up   0.5%   error removed  21.3%   (this class alone:  0.3% for  4.8%)
    + group linear_attn.in_proj_z  win given up   1.4%   error removed  28.3%   (this class alone:  0.9% for  7.0%)
    + group mlp.down_proj          win given up   5.1%   error removed  41.7%   (this class alone:  3.7% for 13.5%)
    + group linear_attn.in_proj_qkv win given up   6.8%   error removed  47.2%   (this class alone:  1.6% for  5.5%)
    + group self_attn.q_proj       win given up   7.4%   error removed  48.8%   (this class alone:  0.6% for  1.6%)
    + group mlp.up_proj            win given up   9.3%   error removed  51.8%   (this class alone:  1.9% for  3.1%)
    + group mlp.gate_proj          win given up  12.5%   error removed  55.8%   (this class alone:  3.2% for  4.0%)
