Files
qwen2.5-coder-3b-distilled-…/README.md
ModelHub XC dc73211740 初始化项目,由ModelHub XC社区提供模型
Model: Harsha901/qwen2.5-coder-3b-distilled-from-14b-merged
Source: Original Platform
2026-08-28 20:54:19 +08:00

168 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
language:
- en
license: apache-2.0
base_model: Qwen/Qwen2.5-Coder-3B-Instruct
tags:
- qwen2.5
- code
- knowledge-distillation
- gkd
- qlora
- python
- causal-lm
datasets:
- iamtarun/python_code_instructions_18k_alpaca
pipeline_tag: text-generation
---
# Qwen2.5-Coder-3B — GKD Distilled from 14B
A **merged** (LoRA-free) version of `Qwen2.5-Coder-3B-Instruct` whose weights have been updated via **Generalized Knowledge Distillation (GKD)** from `Qwen2.5-Coder-14B-Instruct` as the teacher.
The LoRA adapter was trained with TRL's `DistillationTrainer` on a single NVIDIA A100 80 GB (Google Colab) for ~5 hours, then merged back into the base weights so the model loads exactly like the original 3B — no adapter plumbing required.
---
## Evaluation — HumanEval pass@1
Greedy decoding, 164 Python programming tasks.
| Model | Passed | Total | pass@1 |
|---|---:|---:|---:|
| Base `Qwen2.5-Coder-3B-Instruct` | 133 | 164 | 81.1% |
| **This model (distilled, 300 steps)** | **137** | **164** | **83.5%** |
| Δ | +4 | — | **+2.44 pp** |
**Task-level breakdown:**
| Outcome | Count |
|---|---:|
| Both pass | 126 |
| Only distilled passes (gained) | 11 |
| Only base passes (lost) | 7 |
| Neither passes | 20 |
| **Net change** | **+4** |
**Gained tasks (11):** HumanEval/26, /64, /75, /89, /93, /95, /110, /123, /124, /125, /135 — reasoning-heavy string manipulation, cipher encoding, and date parsing problems.
**Lost tasks (7):** HumanEval/10, /46, /99, /103, /141, /154, /159 — precise numeric/sequence edge cases (bankers rounding, fib4 base cases, cyclic rotation).
> Note: HumanEval pass@1 with greedy decoding has ~±2pp noise. The +2.44pp delta is at the edge of statistical significance for a 300-step run; longer training is expected to widen the gap.
---
## Training Details
### Setup
| Component | Detail |
|---|---|
| **Teacher** | `Qwen/Qwen2.5-Coder-14B-Instruct` — frozen, loaded in 4-bit NF4 |
| **Student** | `Qwen/Qwen2.5-Coder-3B-Instruct` + LoRA (r=16, α=32) |
| **Distillation** | TRL `DistillationTrainer`, GKD with λ=0.25, β=0.5 |
| **Dataset** | `iamtarun/python_code_instructions_18k_alpaca` — 17,681 train / 931 eval |
| **Hardware** | Google Colab A100 80 GB |
| **Wall time** | ~5 hours |
### GKD Loss
```
L = λ · L_on_policy + (1λ) · L_teacher_forced
where L = β · KL(student ∥ teacher) + (1β) · KL(teacher ∥ student)
```
- **λ=0.25** — 25% on-policy (student-generated) sequences, 75% teacher-forced; keeps training stable at low step counts while reducing exposure bias.
- **β=0.5** — symmetric JensenShannon divergence between teacher and student logits.
### Hyperparameters
| Hyperparameter | Value |
|---|---|
| LoRA rank (r) | 16 |
| LoRA alpha | 32 |
| LoRA dropout | 0.05 |
| Target modules | q/k/v/o_proj, gate/up/down_proj |
| Optimizer | paged_adamw_8bit |
| Learning rate | 1.5e-4 |
| LR schedule | Cosine with 30-step warmup |
| Max steps | 300 |
| Per-device batch size | 16 |
| Gradient accumulation | 2 (effective batch = 32) |
| Max sequence length | 1024 |
| Precision | bf16 |
| Quantization (both models) | 4-bit NF4, double quant, bf16 compute |
---
## Usage
This is a standard causal-LM checkpoint — load it exactly like the base model.
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "Harsha901/qwen2.5-coder-3b-distilled-from-14b-merged"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
messages = [
{"role": "user", "content": "Write a Python function that checks if a number is prime."}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer([text], return_tensors="pt").to(model.device)
with torch.no_grad():
output = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False,
)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
```
### Memory requirements
| Precision | Approx. VRAM |
|---|---|
| bf16 (this checkpoint) | ~6.5 GB |
| 4-bit NF4 (bitsandbytes) | ~2.5 GB |
The model runs comfortably on a 24 GB consumer GPU (RTX 3090/4090) in full bf16 precision.
---
## Limitations and Future Work
- **Only 300 steps trained** — the model has seen ~9,600 examples (~0.54 epochs of the training set). Longer training (1,0002,000 steps or 3 full epochs) is expected to improve further.
- **Regressions on arithmetic edge cases** — the 7 lost tasks suggest slight distribution shift away from precise numeric corner cases; increasing LoRA rank or adding targeted examples may help.
- **Training dataset is Python-only** — generalisation to other languages is untested.
- **Distillation dataset differs from eval benchmark** — HumanEval is held-out; the training set is `python_code_instructions_18k_alpaca`, which covers general Python instruction-following rather than competitive algorithmic problems.
Planned next steps:
1. Train for 1,000+ steps and track HumanEval every 50 steps.
2. Tune λ toward 0.50.75 for more on-policy exposure.
3. Benchmark inference latency and VRAM vs. the 14B teacher to quantify serving cost reduction.
---
## Related Resources
- **LoRA adapter (pre-merge):** [Harsha901/qwen2.5-coder-3b-distilled-from-14b](https://huggingface.co/Harsha901/qwen2.5-coder-3b-distilled-from-14b)
- **Base student model:** [Qwen/Qwen2.5-Coder-3B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-3B-Instruct)
- **Teacher model:** [Qwen/Qwen2.5-Coder-14B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-14B-Instruct)
- **Training dataset:** [iamtarun/python_code_instructions_18k_alpaca](https://huggingface.co/datasets/iamtarun/python_code_instructions_18k_alpaca)
- **TRL DistillationTrainer docs:** [huggingface.co/docs/trl](https://huggingface.co/docs/trl)