--- license: apache-2.0 base_model: - Qwen/Qwen3.6-27B pipeline_tag: text-generation library_name: transformers tags: - code - rtl - verilog - gpu-kernel - triton ---

iCoder-27B

GitHub Technical Report
iCoder-27B is a 27B-parameter model for industrial coding, covering RTL design and GPU kernel optimization. It is the product of an experiment in delegating model development itself. Human experts encoded their model-development experience once, as reusable Research Skills. From that point on an agent instantiated those Skills, allocated resources, ran and diagnosed experiments, and revised the training strategy. The agent coordinated a multi-stage pipeline spanning supervised fine-tuning, on-policy self-distillation, and reinforcement learning with verifiable rewards, in which every reward comes from compiling and running the model's own output rather than from comparison against a reference text. ![Pipeline](figures/intro_pipeline.png) Despite its compact scale, iCoder-27B surpasses models with up to 59x more total parameters, including DeepSeek-V4-Pro, GLM-5.2 and Kimi-K2.6. It leads on RTLLM (68.0), ties Claude Opus 4.8 for the best TritonBench-G pass@1 (20.1), and ranks second on KernelBench L2 Fast and on CVDP. Its 61% KernelBench L1 correctness is the highest of any model evaluated. The full technical report describing the recipe is available [here](Coder_Tech_Report.pdf). ## Results ![Benchmarks](figures/industrial_benchmark_logo_bars.png) Every model is evaluated through the same harness. RTL benchmarks run under the simulator each official suite specifies; kernel benchmarks compare candidate outputs against the reference implementation under matched inputs. **Bold** marks the best result in each row and *italic* the second best. | Benchmark | Metric | iCoder-27B | Qwen3.6-27B | InCoder-32B | InCoder-32B-T | DeepSeek-V4-Pro | GLM-5.2 | Kimi-K2.6 | GPT-5.5 | Claude-Opus-4.8 | Hy3 | Gemini-3.5-Flash | |---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| | VerilogEval | Spec-to-RTL avg@4 | 86.3 | 70.1 | 62.5 | 65.9 | 69.9 | 66.0 | 72.4 | **90.1** | 82.7 | 83.8 | *89.1* | | VerilogEval | Code-complete avg@4 | *86.0* | 70.8 | 58.2 | 54.2 | 79.8 | 74.8 | 78.5 | **91.4** | 81.9 | 81.6 | 83.8 | | RTLLM | Functional avg@4 | **68.0** | 49.6 | 48.0 | 44.2 | *67.5* | 64.0 | 59.0 | 66.0 | 64.7 | 53.5 | 63.5 | | CVDP | Functional avg@5 (%) | *44.1* | 33.9 | 36.9 | 30.3 | 38.5 | 39.5 | 42.1 | 39.5 | **47.7** | 39.7 | 29.7 | | RealBench | Syntax pass@5 (%) | 61.7 | 38.3 | 60.0 | 55.0 | 36.7 | 43.3 | 58.3 | *80.0* | **83.3** | 41.7 | 68.3 | | RealBench | Functional pass@5 (%) | 26.7 | 16.7 | **46.7** | *36.7* | 16.7 | 25.0 | 25.0 | 28.3 | *36.7* | 16.7 | 26.7 | | ArchXBench | Functional pass@1 (%) | 49.3 | 35.2 | 36.6 | 29.6 | 50.7 | 50.7 | 42.3 | **56.3** | *54.9* | 47.9 | 50.7 | | KernelBench L1 | Compiled (%) | 95 | 87 | 88 | 85 | 93 | *96* | 93 | **98** | 95 | 94 | 94 | | KernelBench L1 | Correct (%) | **61** | 32 | 51 | 47 | 32 | 50 | 32 | 43 | *55* | 42 | 45 | | KernelBench L1 | Fast (%) | 25 | 12 | 18 | 18 | 13 | *26* | 5 | 22 | **30** | 21 | 23 | | KernelBench L2 | Compiled (%) | 97 | 89 | 90 | 93 | 91 | 98 | 84 | **100** | 97 | 98 | *99* | | KernelBench L2 | Correct (%) | *74* | 28 | 65 | 63 | 40 | 40 | 17 | 41 | 70 | 56 | **78** | | KernelBench L2 | Fast (%) | *40* | 17 | 14 | 15 | 25 | 30 | 7 | 24 | 37 | 29 | **47** | | KernelBench L3 | Compiled (%) | 90 | 86 | 60 | 60 | 86 | 90 | 82 | **100** | 84 | *98* | **100** | | KernelBench L3 | Correct (%) | 34 | 12 | 30 | 20 | 4 | 30 | 18 | 38 | *40* | 18 | **58** | | KernelBench L3 | Fast (%) | 10 | 4 | **14** | *12* | 2 | 0 | 0 | 6 | 8 | 2 | **14** | | TritonBench-G | Correctness pass@1 (%) | **20.1** | 11.4 | 17.9 | 18.5 | 19.0 | 19.0 | 19.0 | *19.5* | **20.1** | *19.5* | 14.9 | ## Usage ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "i-Coder/iCoder-27B" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, dtype="auto", device_map="auto" ) messages = [{"role": "user", "content": "Write a 4-bit synchronous up counter with active-low reset in Verilog."}] text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tokenizer([text], return_tensors="pt").to(model.device) out = model.generate(**inputs, max_new_tokens=2048) print(tokenizer.decode(out[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True)) ``` ## Citation If you find iCoder useful in your work, please cite the technical report: ```bibtex @techreport{yang2026icoder, title = {iCoder-27B: Recursive AI-Led Development of Frontier Industrial Coding Model}, author = {Cheng Yang and Jiayang Lyu and Shangyuan Liu and Guibin Zhang and Jiong Lin and Xinlei Yu and Junchi Yan and Shuicheng Yan and Weinan E and Linfeng Zhang and Linfeng Zhang and Qibing Ren}, year = {2026}, month = aug, type = {Technical Report}, url = {https://huggingface.co/i-Coder/iCoder-27B} } ``` ## License Apache-2.0, inherited from the base model, Qwen3.6-27B.