h0ney-badger's picture
Upload README.md with huggingface_hub
54b7212 verified
|
Raw
History Blame Contribute Delete
4.02 kB
metadata
license: apache-2.0
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
library_name: gguf
pipeline_tag: text-generation
tags:
  - code
  - python
  - qwen2.5-coder
  - distillation
  - qlora
  - gguf
  - cpu
  - small
language:
  - en

Qwen2.5-Coder-1.5B-Instruct β€” Python self-distill (GGUF)

A tiny, Python-focused QLoRA fine-tune of Qwen2.5-Coder-1.5B-Instruct, distilled from a Qwen2.5-Coder-14B-Instruct teacher on locally-generated, execution-verified Python data. Quantized to Q4_K_M β€” 941 MB β€” so it runs comfortably on CPU on old / low-power hardware (built to run on a 2014 ThinkPad W541, no GPU needed).

TL;DR β€” 81.5% Python pass@1 in under 1 GB. That's +7.4 points over the stock 1.5B, and it beats a stock 7B at Python while being ~5Γ— smaller β€” plus it now writes complete, interactive programs, not just bare functions.

Results (execution-based pass@1, Python)

Same 54-sample held-out Python eval, same Q4_K_M quant. Base = the exact weights this was fine-tuned from.

Model Python pass@1
Qwen2.5-Coder-1.5B-Instruct (base) 74.1% (40/54)
This model 81.5% (44/54)

For context, on the same eval the stock 7B scored 77.8% at Python β€” this 941 MB model edges it out for Python.

pass@1 = the model's code was executed against held-out tests and had to pass. Carries Β±1–2 samples of sampling noise.

How it was made

Teacher (Qwen2.5-Coder-14B) generates Python tasks + solutions + tests β†’ each is executed, only passing samples kept β†’ QLoRA SFT of the 1.5B student (Unsloth, r=16, 3 epochs) β†’ merged 16-bit β†’ GGUF Q4_K_M. Same pipeline as the 7B sibling, Python-only.

Training data mixes two styles (~566 samples): execution-verified functions and complete, runnable programs from natural requests (calculators, CLIs, games, file tools β€” teacher-generated + hand-authored gold, each run-verified). The complete-program half is what makes it write whole interactive programs (using input(), menus, etc.) rather than bare functions.

⚠️ Run it right or it feels dumb

A 1.5B must be run with the chat template applied and low temperature, or it rambles. Use llama-server (applies the template automatically) or llama-cli -cnv with --temp 0.2. Do not use plain llama-cli -p "..." (raw completion, temp 0.8) β€” that's the usual reason a small local model seems broken.

Evaluation methodology

Execution-based pass@1 on a dedicated eval set disjoint from training (exact + fuzzy dedup). Deliberately not HumanEval/MBPP β€” the goal was an honest, contamination-controlled comparison against the base, not a leaderboard number.

Honest limitations

  • Python only. It was trained and evaluated on Python; don't expect other languages to benefit.
  • Modest, specialized gain. +3.7 points over an already-decent base, on a same-distribution eval β€” a neutral benchmark would likely show less.
  • Small model: fine for functions, scripts, and everyday Python help; not a reasoning-heavy or large-context coder.

Usage (CPU-friendly)

Q4_K_M GGUF, 941 MB. On CPU (e.g. an old laptop):

# llama.cpp on CPU β€” no GPU offload
llama-cli   -m qwen-coder-1.5b-py-Q4_K_M.gguf -p "Write a Python function to ..."
llama-server -m qwen-coder-1.5b-py-Q4_K_M.gguf -c 4096          # OpenAI-compatible API
# or load the .gguf in LM Studio

Provenance & license

  • License: Apache-2.0. Base (Qwen2.5-Coder-1.5B) and teacher (Qwen2.5-Coder-14B) are both Apache-2.0 β€” no restriction on training from model outputs β€” and the data is fully self-generated (no scraped corpus, no ToS-restricted API).
  • Base model: Qwen/Qwen2.5-Coder-1.5B-Instruct
  • Teacher: Qwen/Qwen2.5-Coder-14B-Instruct
  • Full pipeline: https://github.com/h0n3y-badger/code-distill

A companion to the 7B Python/C distill β€” see the repo for the reproducible pipeline.