File size: 2,035 Bytes
44ba7e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: apache-2.0
base_model:
  - i-Coder/iCoder-27B-SFT
base_model_relation: finetune
pipeline_tag: text-generation
library_name: transformers
tags:
  - code
  - rtl
  - verilog
  - gpu-kernel
  - triton
---

# iCoder-27B-OPSD

> **An intermediate checkpoint from the iCoder-27B training pipeline.**
> The released model is [i-Coder/iCoder-27B](https://huggingface.co/i-Coder/iCoder-27B).

```
Qwen3.6-27B  ──▶  SFT  ──▶  [ OPSD ]  ──▶  RLVR  ──▶  iCoder-27B
                              â–²
                              this checkpoint
```

## Model description

iCoder-27B is a 27B model for RTL design and GPU kernel optimization, developed
by an agent that runs and revises each stage of its own training pipeline.

This checkpoint is the output of the second stage, OPSD, or on-policy
self-distillation. It starts from
[iCoder-27B-SFT](https://huggingface.co/i-Coder/iCoder-27B-SFT). The third stage,
RLVR, starts here and produces the released model.

The method and the reported results are described in the technical report.

## Intended use

Research on the training pipeline: reproducing this stage, ablating it, or
measuring what RLVR adds on top of it. This is a mid-pipeline artifact and has
had no deployment preparation.

## Usage

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "i-Coder/iCoder-27B-OPSD"
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))
```

## License

Apache-2.0, inherited from Qwen3.6-27B, the base model of the pipeline.