107 lines
3.8 KiB
Markdown
107 lines
3.8 KiB
Markdown
---
|
||
license: apache-2.0
|
||
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
|
||
tags:
|
||
- code
|
||
- python
|
||
- qlora
|
||
- lora
|
||
- peft
|
||
- qwen2
|
||
- text-generation
|
||
datasets:
|
||
- sahil2801/CodeAlpaca-20k
|
||
language:
|
||
- en
|
||
pipeline_tag: text-generation
|
||
library_name: transformers
|
||
---
|
||
|
||
# qwen2.5-coder-1.5b-CodeSLM-Nihal
|
||
|
||
A **QLoRA fine-tune of Qwen2.5-Coder-1.5B-Instruct** into a **terse, code-first Python assistant**,
|
||
built as a hands-on, phase-by-phase fine-tuning learning project on a single 8 GB consumer GPU
|
||
(NVIDIA RTX 5060).
|
||
|
||
The base model is a capable coder but chronically verbose — every answer trails a prose essay. This
|
||
fine-tune trains it to reply with **correct, minimal code and nothing else.**
|
||
|
||
## Headline result
|
||
|
||

|
||
|
||
On 18 held-out prompts (greedy decoding), average output length dropped **from 272 to 60 tokens
|
||
(−78%)** while core algorithm correctness was preserved.
|
||
|
||
## Training curve
|
||
|
||

|
||
|
||
| Checkpoint (epoch) | Validation loss |
|
||
|---|---|
|
||
| 0.13 | 0.5157 |
|
||
| 0.38 | 0.5020 |
|
||
| 0.88 | 0.4927 |
|
||
| 1.00 | 0.4928 |
|
||
|
||
Train and validation loss tracked each other the entire run — clean convergence, **no overfitting.**
|
||
Final train loss **0.4906**; validation mean token-accuracy **~85.4%**.
|
||
|
||
> These are training/next-token metrics plus a qualitative 18-prompt comparison. No standardized code
|
||
> benchmark (HumanEval/MBPP) was run.
|
||
|
||
## Training details
|
||
|
||
| | |
|
||
|---|---|
|
||
| Base | `Qwen/Qwen2.5-Coder-1.5B-Instruct` |
|
||
| Method | QLoRA (4-bit NF4 base + LoRA), completion-only loss |
|
||
| Dataset | `sahil2801/CodeAlpaca-20k` → Qwen ChatML (19,020 train / 1,002 val) |
|
||
| LoRA | r=16, α=32, dropout=0.05, targets q/k/v/o/gate/up/down |
|
||
| Trainable params | 18.46M (~1.18%) |
|
||
| Schedule | 1 epoch, 1,189 steps, LR 2e-4 cosine + 3% warmup |
|
||
| Batch | 2 × 8 grad-accum = effective 16 |
|
||
| Optimizer | paged_adamw_8bit, bf16, gradient checkpointing, max_len 1024 |
|
||
| Hardware | 1× RTX 5060 (8 GB), ~50 min, peak VRAM 3.32 GB |
|
||
|
||
## Files in this repo
|
||
|
||
- **Root** — merged fp16 model (Transformers format); load directly with `from_pretrained`.
|
||
- **`adapter/`** — the standalone LoRA adapter (~36 MB) to apply onto the base yourself.
|
||
- **`gguf/`** — `…-f16.gguf` (full precision) and `…-Q4_K_M.gguf` (~986 MB) for llama.cpp / Ollama.
|
||
|
||
## Usage
|
||
|
||
### Transformers
|
||
```python
|
||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||
m = "MohdNihal03/qwen2.5-coder-1.5b-CodeSLM-Nihal"
|
||
tok = AutoTokenizer.from_pretrained(m)
|
||
model = AutoModelForCausalLM.from_pretrained(m, device_map="auto")
|
||
msgs = [{"role": "user", "content": "Write a Python function that reverses a string without slicing."}]
|
||
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
|
||
print(tok.decode(model.generate(ids, max_new_tokens=128)[0][ids.shape[1]:], skip_special_tokens=True))
|
||
```
|
||
|
||
### Ollama
|
||
```
|
||
ollama run mohdnihalll03/qwen2.5-coder-1.5b-codeslm-nihal
|
||
```
|
||
|
||
Prompt format: Qwen2.5 ChatML. Suggested: `temperature 0.2`, stop on `<|im_start|>` / `<|im_end|>`.
|
||
|
||
## Limitations
|
||
|
||
- **Style over correctness:** fine-tuning changed formatting far more than correctness. A few subtle
|
||
base-model bugs persist (an email-regex character-class quirk; a `@timer` decorator missing
|
||
`functools.wraps`), and one bracket-matching answer regressed to a logic bug on empty-stack input.
|
||
**Review generated code before use.**
|
||
- Python-focused; 1.5B params + 4-bit quantization — not a substitute for a large frontier model.
|
||
- Occasional instruction drift (`print` vs `return`, tabulation vs memoization).
|
||
|
||
## Attribution
|
||
|
||
- Base: Qwen2.5-Coder-1.5B-Instruct (© Alibaba Cloud, Apache-2.0)
|
||
- Data: `sahil2801/CodeAlpaca-20k`
|
||
- Fine-tuned by **Nihal** as a QLoRA learning project (TRL / PEFT / bitsandbytes).
|