{
 "title": "Teaching Qwen3.8-27B to write Triton kernels: SFT, a GPU gym and KernelBench",
 "published": "2026-11-03",
 "benchmark": {
  "name": "KernelBench Triton, levels 1-2",
  "revision": "423217d9fda91e0c2d67e4a43bf62f96f6d104f1",
  "problems": 200,
  "protocol": "one-shot KernelBench Triton prompt, FP32, atol=rtol=1e-4, 5 correctness inputs, mean of 100 CUDA-event timings vs eager PyTorch and torch.compile(max-autotune)",
  "qwen_decoding": "vLLM, greedy (temperature 0), thinking off, max 8192 new tokens",
  "runtime": {
   "torch": "2.9.1+cu130",
   "triton": "3.5.1",
   "cuda": "13.0",
   "python": "3.11.14",
   "gpu": "NVIDIA H100 80GB HBM3",
   "kernelbench_revision": "423217d9fda91e0c2d67e4a43bf62f96f6d104f1"
  },
  "notes": "fast_p counts problems that are correct and strictly faster than p times the baseline, out of all problems. Flags mark speedups above 10x; *_unflagged excludes them. Eager baseline of level-1 problem 95 failed and stays in the denominator."
 },
 "models": {
  "base": {
   "label": "Qwen3.8-27B base",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 159,
     "correct": 43,
     "eager_fast_1": 14,
     "eager_fast_1.5": 10,
     "eager_fast_2": 7,
     "compile_fast_1": 25,
     "compile_fast_1.5": 20,
     "compile_fast_2": 18,
     "flags": 0,
     "eager_fast_1_unflagged": 14,
     "compile_fast_1_unflagged": 25
    },
    "1": {
     "n": 100,
     "compiled": 83,
     "correct": 31,
     "eager_fast_1": 8,
     "eager_fast_1.5": 6,
     "eager_fast_2": 5,
     "compile_fast_1": 23,
     "compile_fast_1.5": 18,
     "compile_fast_2": 16,
     "flags": 0,
     "eager_fast_1_unflagged": 8,
     "compile_fast_1_unflagged": 23
    },
    "2": {
     "n": 100,
     "compiled": 76,
     "correct": 12,
     "eager_fast_1": 6,
     "eager_fast_1.5": 4,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 6,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": null
  },
  "rl_old300": {
   "label": "Qwen RL from base, gym v5, step 300",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 171,
     "correct": 47,
     "eager_fast_1": 23,
     "eager_fast_1.5": 13,
     "eager_fast_2": 7,
     "compile_fast_1": 28,
     "compile_fast_1.5": 22,
     "compile_fast_2": 20,
     "flags": 0,
     "eager_fast_1_unflagged": 23,
     "compile_fast_1_unflagged": 28
    },
    "1": {
     "n": 100,
     "compiled": 83,
     "correct": 28,
     "eager_fast_1": 10,
     "eager_fast_1.5": 7,
     "eager_fast_2": 5,
     "compile_fast_1": 23,
     "compile_fast_1.5": 19,
     "compile_fast_2": 18,
     "flags": 0,
     "eager_fast_1_unflagged": 10,
     "compile_fast_1_unflagged": 23
    },
    "2": {
     "n": 100,
     "compiled": 88,
     "correct": 19,
     "eager_fast_1": 13,
     "eager_fast_1.5": 6,
     "eager_fast_2": 2,
     "compile_fast_1": 5,
     "compile_fast_1.5": 3,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 13,
     "compile_fast_1_unflagged": 5
    }
   },
   "mean_completion_tokens": null
  },
  "rl_old500": {
   "label": "Qwen RL from base, gym v5, step 500",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 171,
     "correct": 49,
     "eager_fast_1": 21,
     "eager_fast_1.5": 9,
     "eager_fast_2": 6,
     "compile_fast_1": 31,
     "compile_fast_1.5": 20,
     "compile_fast_2": 18,
     "flags": 0,
     "eager_fast_1_unflagged": 21,
     "compile_fast_1_unflagged": 31
    },
    "1": {
     "n": 100,
     "compiled": 85,
     "correct": 31,
     "eager_fast_1": 10,
     "eager_fast_1.5": 6,
     "eager_fast_2": 5,
     "compile_fast_1": 25,
     "compile_fast_1.5": 19,
     "compile_fast_2": 17,
     "flags": 0,
     "eager_fast_1_unflagged": 10,
     "compile_fast_1_unflagged": 25
    },
    "2": {
     "n": 100,
     "compiled": 86,
     "correct": 18,
     "eager_fast_1": 11,
     "eager_fast_1.5": 3,
     "eager_fast_2": 1,
     "compile_fast_1": 6,
     "compile_fast_1.5": 1,
     "compile_fast_2": 1,
     "flags": 0,
     "eager_fast_1_unflagged": 11,
     "compile_fast_1_unflagged": 6
    }
   },
   "mean_completion_tokens": null
  },
  "rl_v6_250": {
   "label": "Qwen RL from base, gym v6, step 250",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 157,
     "correct": 43,
     "eager_fast_1": 14,
     "eager_fast_1.5": 9,
     "eager_fast_2": 6,
     "compile_fast_1": 27,
     "compile_fast_1.5": 17,
     "compile_fast_2": 17,
     "flags": 0,
     "eager_fast_1_unflagged": 14,
     "compile_fast_1_unflagged": 27
    },
    "1": {
     "n": 100,
     "compiled": 79,
     "correct": 30,
     "eager_fast_1": 7,
     "eager_fast_1.5": 6,
     "eager_fast_2": 5,
     "compile_fast_1": 24,
     "compile_fast_1.5": 16,
     "compile_fast_2": 16,
     "flags": 0,
     "eager_fast_1_unflagged": 7,
     "compile_fast_1_unflagged": 24
    },
    "2": {
     "n": 100,
     "compiled": 78,
     "correct": 13,
     "eager_fast_1": 7,
     "eager_fast_1.5": 3,
     "eager_fast_2": 1,
     "compile_fast_1": 3,
     "compile_fast_1.5": 1,
     "compile_fast_2": 1,
     "flags": 0,
     "eager_fast_1_unflagged": 7,
     "compile_fast_1_unflagged": 3
    }
   },
   "mean_completion_tokens": null
  },
  "rl_v7_235": {
   "label": "Qwen RL from base, gym v7, step 235",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 168,
     "correct": 46,
     "eager_fast_1": 16,
     "eager_fast_1.5": 10,
     "eager_fast_2": 7,
     "compile_fast_1": 29,
     "compile_fast_1.5": 19,
     "compile_fast_2": 19,
     "flags": 0,
     "eager_fast_1_unflagged": 16,
     "compile_fast_1_unflagged": 29
    },
    "1": {
     "n": 100,
     "compiled": 86,
     "correct": 32,
     "eager_fast_1": 8,
     "eager_fast_1.5": 6,
     "eager_fast_2": 5,
     "compile_fast_1": 26,
     "compile_fast_1.5": 17,
     "compile_fast_2": 17,
     "flags": 0,
     "eager_fast_1_unflagged": 8,
     "compile_fast_1_unflagged": 26
    },
    "2": {
     "n": 100,
     "compiled": 82,
     "correct": 14,
     "eager_fast_1": 8,
     "eager_fast_1.5": 4,
     "eager_fast_2": 2,
     "compile_fast_1": 3,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 8,
     "compile_fast_1_unflagged": 3
    }
   },
   "mean_completion_tokens": null
  },
  "sft": {
   "label": "Qwen SFT",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 173,
     "correct": 52,
     "eager_fast_1": 16,
     "eager_fast_1.5": 10,
     "eager_fast_2": 9,
     "compile_fast_1": 30,
     "compile_fast_1.5": 23,
     "compile_fast_2": 21,
     "flags": 0,
     "eager_fast_1_unflagged": 16,
     "compile_fast_1_unflagged": 30
    },
    "1": {
     "n": 100,
     "compiled": 81,
     "correct": 43,
     "eager_fast_1": 13,
     "eager_fast_1.5": 8,
     "eager_fast_2": 7,
     "compile_fast_1": 28,
     "compile_fast_1.5": 21,
     "compile_fast_2": 19,
     "flags": 0,
     "eager_fast_1_unflagged": 13,
     "compile_fast_1_unflagged": 28
    },
    "2": {
     "n": 100,
     "compiled": 92,
     "correct": 9,
     "eager_fast_1": 3,
     "eager_fast_1.5": 2,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 3,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": 1137.29
  },
  "sft_rl241": {
   "label": "Qwen SFT + RL, gym v8, step 241",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 173,
     "correct": 58,
     "eager_fast_1": 17,
     "eager_fast_1.5": 10,
     "eager_fast_2": 10,
     "compile_fast_1": 30,
     "compile_fast_1.5": 23,
     "compile_fast_2": 21,
     "flags": 0,
     "eager_fast_1_unflagged": 17,
     "compile_fast_1_unflagged": 30
    },
    "1": {
     "n": 100,
     "compiled": 82,
     "correct": 46,
     "eager_fast_1": 13,
     "eager_fast_1.5": 8,
     "eager_fast_2": 8,
     "compile_fast_1": 28,
     "compile_fast_1.5": 21,
     "compile_fast_2": 19,
     "flags": 0,
     "eager_fast_1_unflagged": 13,
     "compile_fast_1_unflagged": 28
    },
    "2": {
     "n": 100,
     "compiled": 91,
     "correct": 12,
     "eager_fast_1": 4,
     "eager_fast_1.5": 2,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 4,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": 1103.905
  },
  "sft_rl100": {
   "label": "Qwen SFT + RL, gym v9, step 100 (released adapter)",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 177,
     "correct": 59,
     "eager_fast_1": 19,
     "eager_fast_1.5": 12,
     "eager_fast_2": 10,
     "compile_fast_1": 32,
     "compile_fast_1.5": 25,
     "compile_fast_2": 22,
     "flags": 0,
     "eager_fast_1_unflagged": 19,
     "compile_fast_1_unflagged": 32
    },
    "1": {
     "n": 100,
     "compiled": 83,
     "correct": 47,
     "eager_fast_1": 15,
     "eager_fast_1.5": 10,
     "eager_fast_2": 8,
     "compile_fast_1": 30,
     "compile_fast_1.5": 23,
     "compile_fast_2": 20,
     "flags": 0,
     "eager_fast_1_unflagged": 15,
     "compile_fast_1_unflagged": 30
    },
    "2": {
     "n": 100,
     "compiled": 94,
     "correct": 12,
     "eager_fast_1": 4,
     "eager_fast_1.5": 2,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 4,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": 1108.6,
   "generation": {
    "generation_provider": null,
    "model": null,
    "decoding": null,
    "reasoning_effort": null,
    "output_token_cap": null
   }
  },
  "sft_rl150": {
   "label": "Qwen SFT + RL, gym v9, step 150",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 180,
     "correct": 58,
     "eager_fast_1": 19,
     "eager_fast_1.5": 12,
     "eager_fast_2": 10,
     "compile_fast_1": 30,
     "compile_fast_1.5": 24,
     "compile_fast_2": 21,
     "flags": 0,
     "eager_fast_1_unflagged": 19,
     "compile_fast_1_unflagged": 30
    },
    "1": {
     "n": 100,
     "compiled": 85,
     "correct": 45,
     "eager_fast_1": 16,
     "eager_fast_1.5": 10,
     "eager_fast_2": 8,
     "compile_fast_1": 28,
     "compile_fast_1.5": 22,
     "compile_fast_2": 19,
     "flags": 0,
     "eager_fast_1_unflagged": 16,
     "compile_fast_1_unflagged": 28
    },
    "2": {
     "n": 100,
     "compiled": 95,
     "correct": 13,
     "eager_fast_1": 3,
     "eager_fast_1.5": 2,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 3,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": 1144.19,
   "generation": {
    "generation_provider": null,
    "model": null,
    "decoding": null,
    "reasoning_effort": null,
    "output_token_cap": null
   }
  },
  "sft_rl200": {
   "label": "Qwen SFT + RL, gym v9, step 200",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 173,
     "correct": 54,
     "eager_fast_1": 17,
     "eager_fast_1.5": 11,
     "eager_fast_2": 10,
     "compile_fast_1": 31,
     "compile_fast_1.5": 25,
     "compile_fast_2": 22,
     "flags": 0,
     "eager_fast_1_unflagged": 17,
     "compile_fast_1_unflagged": 31
    },
    "1": {
     "n": 100,
     "compiled": 81,
     "correct": 45,
     "eager_fast_1": 14,
     "eager_fast_1.5": 9,
     "eager_fast_2": 8,
     "compile_fast_1": 29,
     "compile_fast_1.5": 23,
     "compile_fast_2": 20,
     "flags": 0,
     "eager_fast_1_unflagged": 14,
     "compile_fast_1_unflagged": 29
    },
    "2": {
     "n": 100,
     "compiled": 92,
     "correct": 9,
     "eager_fast_1": 3,
     "eager_fast_1.5": 2,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 3,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": 1118.62,
   "generation": {
    "generation_provider": null,
    "model": null,
    "decoding": null,
    "reasoning_effort": null,
    "output_token_cap": null
   }
  },
  "sft_rl300": {
   "label": "Qwen SFT + RL, gym v9, step 300",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 176,
     "correct": 55,
     "eager_fast_1": 16,
     "eager_fast_1.5": 11,
     "eager_fast_2": 9,
     "compile_fast_1": 28,
     "compile_fast_1.5": 22,
     "compile_fast_2": 20,
     "flags": 0,
     "eager_fast_1_unflagged": 16,
     "compile_fast_1_unflagged": 28
    },
    "1": {
     "n": 100,
     "compiled": 84,
     "correct": 43,
     "eager_fast_1": 13,
     "eager_fast_1.5": 9,
     "eager_fast_2": 7,
     "compile_fast_1": 26,
     "compile_fast_1.5": 20,
     "compile_fast_2": 18,
     "flags": 0,
     "eager_fast_1_unflagged": 13,
     "compile_fast_1_unflagged": 26
    },
    "2": {
     "n": 100,
     "compiled": 92,
     "correct": 12,
     "eager_fast_1": 3,
     "eager_fast_1.5": 2,
     "eager_fast_2": 2,
     "compile_fast_1": 2,
     "compile_fast_1.5": 2,
     "compile_fast_2": 2,
     "flags": 0,
     "eager_fast_1_unflagged": 3,
     "compile_fast_1_unflagged": 2
    }
   },
   "mean_completion_tokens": 1133.53,
   "generation": {
    "generation_provider": null,
    "model": null,
    "decoding": null,
    "reasoning_effort": null,
    "output_token_cap": null
   }
  },
  "opus55": {
   "label": "Opus 5.5",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 198,
     "correct": 137,
     "eager_fast_1": 103,
     "eager_fast_1.5": 69,
     "eager_fast_2": 45,
     "compile_fast_1": 82,
     "compile_fast_1.5": 65,
     "compile_fast_2": 56,
     "flags": 8,
     "eager_fast_1_unflagged": 95,
     "compile_fast_1_unflagged": 74
    },
    "1": {
     "n": 100,
     "compiled": 99,
     "correct": 65,
     "eager_fast_1": 39,
     "eager_fast_1.5": 27,
     "eager_fast_2": 20,
     "compile_fast_1": 55,
     "compile_fast_1.5": 50,
     "compile_fast_2": 42,
     "flags": 1,
     "eager_fast_1_unflagged": 38,
     "compile_fast_1_unflagged": 54
    },
    "2": {
     "n": 100,
     "compiled": 99,
     "correct": 72,
     "eager_fast_1": 64,
     "eager_fast_1.5": 42,
     "eager_fast_2": 25,
     "compile_fast_1": 27,
     "compile_fast_1.5": 15,
     "compile_fast_2": 14,
     "flags": 7,
     "eager_fast_1_unflagged": 57,
     "compile_fast_1_unflagged": 20
    }
   },
   "mean_completion_tokens": 2534.745,
   "generation": {
    "generation_provider": "Claude CLI (claude.ai)",
    "model": "claude-opus-5-5",
    "decoding": "provider default",
    "reasoning_effort": null,
    "output_token_cap": 8192
   }
  },
  "gpt61sol": {
   "label": "GPT-6.1 Sol",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 198,
     "correct": 170,
     "eager_fast_1": 133,
     "eager_fast_1.5": 72,
     "eager_fast_2": 40,
     "compile_fast_1": 102,
     "compile_fast_1.5": 63,
     "compile_fast_2": 47,
     "flags": 8,
     "eager_fast_1_unflagged": 125,
     "compile_fast_1_unflagged": 94
    },
    "1": {
     "n": 100,
     "compiled": 98,
     "correct": 73,
     "eager_fast_1": 45,
     "eager_fast_1.5": 29,
     "eager_fast_2": 24,
     "compile_fast_1": 62,
     "compile_fast_1.5": 49,
     "compile_fast_2": 38,
     "flags": 1,
     "eager_fast_1_unflagged": 44,
     "compile_fast_1_unflagged": 61
    },
    "2": {
     "n": 100,
     "compiled": 100,
     "correct": 97,
     "eager_fast_1": 88,
     "eager_fast_1.5": 43,
     "eager_fast_2": 16,
     "compile_fast_1": 40,
     "compile_fast_1.5": 14,
     "compile_fast_2": 9,
     "flags": 7,
     "eager_fast_1_unflagged": 81,
     "compile_fast_1_unflagged": 33
    }
   },
   "mean_completion_tokens": 1747.4,
   "generation": {
    "generation_provider": "Codex CLI 0.166.0-alpha.5.1 / OpenAI",
    "model": "gpt-6.1-sol",
    "decoding": "provider default",
    "reasoning_effort": "medium",
    "output_token_cap": null
   }
  },
  "fable51": {
   "label": "Fable 5.1",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 186,
     "correct": 140,
     "eager_fast_1": 93,
     "eager_fast_1.5": 53,
     "eager_fast_2": 35,
     "compile_fast_1": 87,
     "compile_fast_1.5": 54,
     "compile_fast_2": 45,
     "flags": 7,
     "eager_fast_1_unflagged": 86,
     "compile_fast_1_unflagged": 80
    },
    "1": {
     "n": 100,
     "compiled": 93,
     "correct": 64,
     "eager_fast_1": 32,
     "eager_fast_1.5": 17,
     "eager_fast_2": 13,
     "compile_fast_1": 52,
     "compile_fast_1.5": 43,
     "compile_fast_2": 35,
     "flags": 1,
     "eager_fast_1_unflagged": 31,
     "compile_fast_1_unflagged": 51
    },
    "2": {
     "n": 100,
     "compiled": 93,
     "correct": 76,
     "eager_fast_1": 61,
     "eager_fast_1.5": 36,
     "eager_fast_2": 22,
     "compile_fast_1": 35,
     "compile_fast_1.5": 11,
     "compile_fast_2": 10,
     "flags": 6,
     "eager_fast_1_unflagged": 55,
     "compile_fast_1_unflagged": 29
    }
   },
   "mean_completion_tokens": 2905.5829145728644,
   "generation": {
    "generation_provider": "Claude CLI 2.1.280 / claude.ai",
    "model": "claude-fable-5-1",
    "decoding": "provider default",
    "reasoning_effort": "medium",
    "output_token_cap": 8192
   }
  },
  "gpt6astra": {
   "label": "GPT-6 Astra",
   "levels": {
    "overall": {
     "n": 200,
     "compiled": 199,
     "correct": 168,
     "eager_fast_1": 133,
     "eager_fast_1.5": 66,
     "eager_fast_2": 39,
     "compile_fast_1": 100,
     "compile_fast_1.5": 62,
     "compile_fast_2": 46,
     "flags": 6,
     "eager_fast_1_unflagged": 127,
     "compile_fast_1_unflagged": 94
    },
    "1": {
     "n": 100,
     "compiled": 99,
     "correct": 71,
     "eager_fast_1": 48,
     "eager_fast_1.5": 28,
     "eager_fast_2": 24,
     "compile_fast_1": 64,
     "compile_fast_1.5": 50,
     "compile_fast_2": 38,
     "flags": 1,
     "eager_fast_1_unflagged": 47,
     "compile_fast_1_unflagged": 63
    },
    "2": {
     "n": 100,
     "compiled": 100,
     "correct": 97,
     "eager_fast_1": 85,
     "eager_fast_1.5": 38,
     "eager_fast_2": 15,
     "compile_fast_1": 36,
     "compile_fast_1.5": 12,
     "compile_fast_2": 8,
     "flags": 5,
     "eager_fast_1_unflagged": 80,
     "compile_fast_1_unflagged": 31
    }
   },
   "mean_completion_tokens": 1871.33,
   "generation": {
    "generation_provider": "Codex CLI 0.166.0-alpha.5.1 / OpenAI",
    "model": "gpt-6-astra",
    "decoding": "provider default",
    "reasoning_effort": "medium",
    "output_token_cap": null
   }
  }
 },
 "paired_bootstrap_vs_sft": {
  "sft_rl100": {
   "correct": {
    "delta_pp": 3.5000000000000004,
    "ci95_pp": [
     1.0,
     6.5
    ],
    "gained": 8,
    "lost": 1
   },
   "fast_eager": {
    "delta_pp": 1.5,
    "ci95_pp": [
     -0.5,
     4.0
    ],
    "gained": 4,
    "lost": 1
   },
   "fast_compile": {
    "delta_pp": 1.0,
    "ci95_pp": [
     0.0,
     2.5
    ],
    "gained": 2,
    "lost": 0
   }
  },
  "sft_rl150": {
   "correct": {
    "delta_pp": 3.0,
    "ci95_pp": [
     0.0,
     6.0
    ],
    "gained": 8,
    "lost": 2
   },
   "fast_eager": {
    "delta_pp": 1.5,
    "ci95_pp": [
     0.0,
     3.5000000000000004
    ],
    "gained": 3,
    "lost": 0
   },
   "fast_compile": {
    "delta_pp": 0.0,
    "ci95_pp": [
     -2.0,
     2.0
    ],
    "gained": 2,
    "lost": 2
   }
  },
  "sft_rl200": {
   "correct": {
    "delta_pp": 1.0,
    "ci95_pp": [
     -1.5,
     3.5000000000000004
    ],
    "gained": 4,
    "lost": 2
   },
   "fast_eager": {
    "delta_pp": 0.5,
    "ci95_pp": [
     -1.0,
     2.5
    ],
    "gained": 2,
    "lost": 1
   },
   "fast_compile": {
    "delta_pp": 0.5,
    "ci95_pp": [
     -1.0,
     2.5
    ],
    "gained": 2,
    "lost": 1
   }
  },
  "sft_rl300": {
   "correct": {
    "delta_pp": 1.5,
    "ci95_pp": [
     -2.0,
     5.0
    ],
    "gained": 8,
    "lost": 5
   },
   "fast_eager": {
    "delta_pp": 0.0,
    "ci95_pp": [
     -2.0,
     2.0
    ],
    "gained": 2,
    "lost": 2
   },
   "fast_compile": {
    "delta_pp": -1.0,
    "ci95_pp": [
     -3.0,
     1.0
    ],
    "gained": 1,
    "lost": 3
   }
  }
 },
 "paired_bootstrap_note": "Differences in percentage points against the SFT adapter on the same 200 problems; 95% interval from 100,000 paired resamples of problems, seed 42. Checkpoint 100 was picked after seeing all four checkpoints; no correction for that choice.",
 "level2_strategy": {
  "base": {
   "1": {
    "answers_keeping_pytorch_op": 10,
    "fast_unflagged_hybrid": 1,
    "fast_unflagged_pure_triton": 7
   },
   "2": {
    "answers_keeping_pytorch_op": 55,
    "fast_unflagged_hybrid": 4,
    "fast_unflagged_pure_triton": 2
   }
  },
  "sft": {
   "1": {
    "answers_keeping_pytorch_op": 5,
    "fast_unflagged_hybrid": 1,
    "fast_unflagged_pure_triton": 12
   },
   "2": {
    "answers_keeping_pytorch_op": 8,
    "fast_unflagged_hybrid": 1,
    "fast_unflagged_pure_triton": 2
   }
  },
  "sft_rl241": {
   "1": {
    "answers_keeping_pytorch_op": 5,
    "fast_unflagged_hybrid": 2,
    "fast_unflagged_pure_triton": 11
   },
   "2": {
    "answers_keeping_pytorch_op": 9,
    "fast_unflagged_hybrid": 2,
    "fast_unflagged_pure_triton": 2
   }
  },
  "sft_rl100": {
   "1": {
    "answers_keeping_pytorch_op": 4,
    "fast_unflagged_hybrid": 2,
    "fast_unflagged_pure_triton": 13
   },
   "2": {
    "answers_keeping_pytorch_op": 8,
    "fast_unflagged_hybrid": 2,
    "fast_unflagged_pure_triton": 2
   }
  },
  "opus55": {
   "1": {
    "answers_keeping_pytorch_op": 44,
    "fast_unflagged_hybrid": 17,
    "fast_unflagged_pure_triton": 21
   },
   "2": {
    "answers_keeping_pytorch_op": 61,
    "fast_unflagged_hybrid": 45,
    "fast_unflagged_pure_triton": 12
   }
  },
  "gpt61sol": {
   "1": {
    "answers_keeping_pytorch_op": 44,
    "fast_unflagged_hybrid": 24,
    "fast_unflagged_pure_triton": 20
   },
   "2": {
    "answers_keeping_pytorch_op": 87,
    "fast_unflagged_hybrid": 76,
    "fast_unflagged_pure_triton": 5
   }
  },
  "fable51": {
   "1": {
    "answers_keeping_pytorch_op": 29,
    "fast_unflagged_hybrid": 8,
    "fast_unflagged_pure_triton": 23
   },
   "2": {
    "answers_keeping_pytorch_op": 72,
    "fast_unflagged_hybrid": 51,
    "fast_unflagged_pure_triton": 4
   }
  },
  "gpt6astra": {
   "1": {
    "answers_keeping_pytorch_op": 72,
    "fast_unflagged_hybrid": 34,
    "fast_unflagged_pure_triton": 13
   },
   "2": {
    "answers_keeping_pytorch_op": 93,
    "fast_unflagged_hybrid": 79,
    "fast_unflagged_pure_triton": 1
   }
  },
  "rl_old300": {
   "1": {
    "answers_keeping_pytorch_op": 9,
    "fast_unflagged_hybrid": 2,
    "fast_unflagged_pure_triton": 8
   },
   "2": {
    "answers_keeping_pytorch_op": 55,
    "fast_unflagged_hybrid": 11,
    "fast_unflagged_pure_triton": 2
   }
  }
 },
 "level2_strategy_note": "An answer 'keeps a PyTorch op' when forward() still calls a torch layer, functional op, tensor math method or arithmetic on inputs (static AST check). Level 2 has 63 convolution and 36 GEMM/matmul problems.",
 "gym": {
  "compile_vs_eager_by_family": [
   {
    "family": "conv1d",
    "n": 18,
    "compile_med": 6.628,
    "eager_med": 0.905,
    "ratio": 7.557
   },
   {
    "family": "conv2d",
    "n": 27,
    "compile_med": 3.938,
    "eager_med": 0.693,
    "ratio": 5.888
   },
   {
    "family": "elementwise",
    "n": 91,
    "compile_med": 2.099,
    "eager_med": 0.958,
    "ratio": 2.207
   },
   {
    "family": "fused_hybrid",
    "n": 21,
    "compile_med": 0.834,
    "eager_med": 0.505,
    "ratio": 1.585
   },
   {
    "family": "fusion",
    "n": 76,
    "compile_med": 2.402,
    "eager_med": 1.36,
    "ratio": 1.667
   },
   {
    "family": "gemm_epilogue",
    "n": 19,
    "compile_med": 5.162,
    "eager_med": 1.695,
    "ratio": 2.908
   },
   {
    "family": "kernelbook",
    "n": 57,
    "compile_med": 4.228,
    "eager_med": 1.302,
    "ratio": 2.447
   },
   {
    "family": "matmul",
    "n": 46,
    "compile_med": 4.859,
    "eager_med": 1.09,
    "ratio": 4.271
   },
   {
    "family": "module",
    "n": 20,
    "compile_med": 3.768,
    "eager_med": 1.69,
    "ratio": 2.158
   },
   {
    "family": "normalization",
    "n": 128,
    "compile_med": 2.16,
    "eager_med": 2.577,
    "ratio": 0.92
   },
   {
    "family": "pool2d",
    "n": 15,
    "compile_med": 0.357,
    "eager_med": 0.065,
    "ratio": 4.873
   },
   {
    "family": "reduction",
    "n": 101,
    "compile_med": 2.555,
    "eager_med": 1.102,
    "ratio": 2.227
   },
   {
    "family": "scan",
    "n": 45,
    "compile_med": 5.831,
    "eager_med": 3.285,
    "ratio": 1.596
   },
   {
    "family": "softmax",
    "n": 70,
    "compile_med": 2.328,
    "eager_med": 1.111,
    "ratio": 2.278
   }
  ],
  "compile_vs_eager_summary": {
   "solved": 734,
   "beat_compile": 0.868,
   "beat_eager": 0.614,
   "compile_yes_eager_no": 0.262,
   "median_ratio_all": 2.107
  },
  "ladder_solve_rates": [
   {
    "family": "conv2d",
    "stage": "full",
    "operation": "conv2d_pointwise",
    "n": 16,
    "solved": 0.062,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "conv2d",
    "stage": "full",
    "operation": "conv2d_strided",
    "n": 8,
    "solved": 0.0,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "conv2d",
    "stage": "small",
    "operation": "conv2d_small",
    "n": 24,
    "solved": 0.042,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "fused_hybrid",
    "stage": "full",
    "operation": "conv2d_relu_bias",
    "n": 24,
    "solved": 0.125,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "fused_hybrid",
    "stage": "full",
    "operation": "linear_max_gelu",
    "n": 24,
    "solved": 0.208,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "module",
    "stage": "full",
    "operation": "linear_module",
    "n": 16,
    "solved": 0.312,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "module",
    "stage": "full",
    "operation": "linear_module_nobias",
    "n": 8,
    "solved": 0.375,
    "run": "v8 gym, no ladder"
   },
   {
    "family": "conv2d",
    "stage": "full",
    "operation": "conv2d",
    "n": 7,
    "solved": 0.0,
    "run": "v9 gym, ladder"
   },
   {
    "family": "conv2d",
    "stage": "full",
    "operation": "conv2d_pointwise",
    "n": 16,
    "solved": 0.25,
    "run": "v9 gym, ladder"
   },
   {
    "family": "conv2d",
    "stage": "scaffold",
    "operation": "conv2d_scaffold",
    "n": 24,
    "solved": 0.875,
    "run": "v9 gym, ladder"
   },
   {
    "family": "conv2d",
    "stage": "small",
    "operation": "conv2d_small",
    "n": 16,
    "solved": 0.125,
    "run": "v9 gym, ladder"
   },
   {
    "family": "fused_hybrid",
    "stage": "epilogue",
    "operation": "linear_groupnorm_relu_epilogue",
    "n": 24,
    "solved": 0.625,
    "run": "v9 gym, ladder"
   },
   {
    "family": "fused_hybrid",
    "stage": "full",
    "operation": "conv2d_relu_bias",
    "n": 8,
    "solved": 0.25,
    "run": "v9 gym, ladder"
   },
   {
    "family": "fused_hybrid",
    "stage": "full",
    "operation": "linear_max_gelu",
    "n": 8,
    "solved": 0.375,
    "run": "v9 gym, ladder"
   },
   {
    "family": "fused_hybrid",
    "stage": "small",
    "operation": "linear_groupnorm_relu_small",
    "n": 8,
    "solved": 0.125,
    "run": "v9 gym, ladder"
   },
   {
    "family": "module",
    "stage": "full",
    "operation": "linear_module_nobias",
    "n": 8,
    "solved": 0.375,
    "run": "v9 gym, ladder"
   },
   {
    "family": "module",
    "stage": "scaffold",
    "operation": "linear_module_scaffold",
    "n": 16,
    "solved": 0.938,
    "run": "v9 gym, ladder"
   },
   {
    "family": "module",
    "stage": "small",
    "operation": "conv2d_module_small",
    "n": 15,
    "solved": 0.133,
    "run": "v9 gym, ladder"
   }
  ],
  "solve_rate_trend": [
   {
    "run": "v9",
    "steps": "1-75",
    "n": 304,
    "solved": 0.717,
    "solved_family_matched": 0.734
   },
   {
    "run": "v9",
    "steps": "76-150",
    "n": 296,
    "solved": 0.578,
    "solved_family_matched": 0.59
   },
   {
    "run": "v9",
    "steps": "151-225",
    "n": 304,
    "solved": 0.546,
    "solved_family_matched": 0.549
   },
   {
    "run": "v9",
    "steps": "226-300",
    "n": 296,
    "solved": 0.605,
    "solved_family_matched": 0.617
   },
   {
    "run": "v8",
    "steps": "1-75",
    "n": 304,
    "solved": 0.546,
    "solved_family_matched": 0.53
   },
   {
    "run": "v8",
    "steps": "76-150",
    "n": 296,
    "solved": 0.568,
    "solved_family_matched": 0.558
   },
   {
    "run": "v8",
    "steps": "151-225",
    "n": 304,
    "solved": 0.582,
    "solved_family_matched": 0.593
   },
   {
    "run": "v8",
    "steps": "226-300",
    "n": 64,
    "solved": 0.641,
    "solved_family_matched": 0.721
   }
  ],
  "answer_modes": [
   {
    "answer_mode": "null",
    "n": 5,
    "solved": 0.0,
    "first_ok": 0.0
   },
   {
    "answer_mode": "repair",
    "n": 981,
    "solved": 0.638,
    "first_ok": 0.36
   },
   {
    "answer_mode": "single",
    "n": 214,
    "solved": 0.505,
    "first_ok": 0.5
   }
  ],
  "note": "From training rollouts of the SFT+RL runs (gym v8: 241 steps, gym v9: 300 steps), deduplicated: every rollout batch is reused for two optimizer steps."
 },
 "sft_dataset": {
  "hf": "https://huggingface.co/datasets/g-factor-technologies/GFT-Triton-Kernels-SFT-H100-Verified",
  "rows": 2034,
  "kimi_k2_kernelbook_funnel": {
   "source_answers": 6875,
   "source_modules": 2430,
   "normalized_decontaminated_capped": 5389,
   "verified_on_h100": 1379,
   "kept": 1352
  },
  "gym_rows": 682,
  "faster_than_torch_compile": 1624
 },
 "adapter": "https://huggingface.co/g-factor-technologies/Qwen3.8-27B-GFT-Triton-Kernels-LoRA"
}