rishini's picture
Upload Qwen2.5-Coder-7B programming LoRA adapter
d6059f5 verified
|
Raw
History Blame Contribute Delete
2.49 kB
---
base_model: Qwen/Qwen2.5-Coder-7B-Instruct
library_name: peft
pipeline_tag: text-generation
tags:
- base_model:adapter:Qwen/Qwen2.5-Coder-7B-Instruct
- lora
- transformers
- coding
- code-generation
- finetuned
---
# Qwen2.5-Coder-7B-Programming-LoRA
A LoRA adapter fine-tuned on top of **Qwen/Qwen2.5-Coder-7B-Instruct** to produce clean, correct, efficient programming solutions with brief explanations.
## Model Details
- **Base model:** Qwen/Qwen2.5-Coder-7B-Instruct
- **Method:** LoRA (rank 64, alpha 128, use_rslora=True)
- **Trainable params:** 161,480,704 (~2.08% of total)
- **Data:** 6,006 quality-filtered examples from `iamtarun/python_code_instructions_18k_alpaca` + curated expert-written seeds
- **Training:** 3 epochs, effective batch size 32, max context 2048, completion-only label masking, cosine LR 2e-4, bf16 + 4-bit NF4 base, gradient checkpointing
- **Final train loss:** 0.326
## Usage
Load with PEFT:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
import torch
base = "Qwen/Qwen2.5-Coder-7B-Instruct"
adapter = "rishini/qwen2.5-coder-7b-programming-lora"
bnb = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(
base, quantization_config=bnb, device_map="auto", torch_dtype=torch.bfloat16
)
model = PeftModel.from_pretrained(model, adapter)
tokenizer = AutoTokenizer.from_pretrained(base, trust_remote_code=True, use_fast=True)
prompt = "Write a Python function to check if a string is a valid palindrome ignoring case and non-alphanumeric characters."
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=512, temperature=0.2)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
```
## Evaluation
Held-out prompts (not in the training set) answered correctly, including: longest common prefix, min-heap from scratch, topological sort, palindromic substrings (DP), and sliding-window longest substring.
## Files
- `adapter_config.json` / `adapter_model.safetensors` — LoRA weights
- `tokenizer.json` / `tokenizer_config.json` / `chat_template.jinja` — tokenizer + chat template