File size: 5,580 Bytes
2cde19b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5858b51
2cde19b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5858b51
 
2cde19b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5858b51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2cde19b
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
---
license: apache-2.0
base_model:
  - Qwen/Qwen3.6-27B
pipeline_tag: text-generation
library_name: transformers
tags:
  - code
  - rtl
  - verilog
  - gpu-kernel
  - triton
---

<p align="center">
  <img src="figures/title.png" alt="iCoder-27B" width="420">
</p>

<div align="center"><a href="https://github.com/bingreeky/iCoder"><img src="https://img.shields.io/badge/GitHub-iCoder-181717?logo=github&logoColor=white" alt="GitHub"></a> <a href="https://huggingface.co/i-Coder/iCoder-27B/blob/main/Coder_Tech_Report.pdf"><img src="https://img.shields.io/badge/Technical%20Report-PDF-b68b32" alt="Technical Report"></a></div>

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.