CoolFace
Modelpublic

SathishKumar89/my-python-coder

sourceHugging Faceapache-2.0updated 8d agoView on Hugging Face
1likes48downloads
Model Card

basemodel: Qwen/Qwen2.5-Coder-1.5B-Instruct libraryname: peft license: apache-2.0 language:

  • en tags:
  • code
  • python
  • lora
  • peft
  • qwen2
  • code-generation datasets:
  • iamtarun/pythoncodeinstructions18kalpaca ---

my-python-coder

A LoRA fine-tune of Qwen2.5-Coder-1.5B-Instruct specialized for Python code generation.

This model was fine-tuned as a learning project to demonstrate the full workflow of taking a base model, training it on a custom dataset, and publishing it to the Hugging Face Hub.

Training Details

ParameterValue
Base modelQwen/Qwen2.5-Coder-1.5B-Instruct
Datasetiamtarun/python_code_instructions_18k_alpaca (first 1,500 examples)
MethodLoRA (r=16, alpha=32, target_modules=all-linear)
Training steps200
Learning rate2e-4
Effective batch size8 (batch=2 × grad_accum=4)
Max sequence length1024
HardwareGoogle Colab (NVIDIA T4, 16 GB VRAM)
Training time~33 minutes

What Is This — A Model or an Adapter?

This repository contains a LoRA adapter, not a standalone model. Understanding the difference matters for how you load and use it.

The Two Artifacts

**Base Model****LoRA Adapter (this repo)**
What it isThe full pretrained neural networkA small set of trained weights that modify the base
Size~3 GB~74 MB
Who made itThe Qwen teamMe (SathishKumar89)
RepoQwen/Qwen2.5-Coder-1.5B-InstructSathishKumar89/my-python-coder
ContainsAll model weights, tokenizer, configOnly adapter weights + config + tokenizer copy
Loadable alone?✅ Yes❌ No — needs the base model

Why This Design?

Instead of retraining all ~1.5 billion parameters of the base model, LoRA (Low-Rank Adaptation) freezes the base model and only trains a tiny number of new parameters. This gives several advantages:

  • Tiny file size — 74 MB vs. ~3 GB (a ~40× reduction)
  • Fast training — minutes to hours instead of days
  • Runs on modest hardware — a free Google Colab T4 GPU is enough
  • Easy to swap — you can keep the same base model and load different adapters for different tasks

How to Load It Correctly

Because this repo is an adapter, you must load two things — the base model first, then the adapter on top:

python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch

# Step 1: Load the base model
base = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2.5-Coder-1.5B-Instruct",
    dtype=torch.float16,
    device_map="auto",
)

# Step 2: Attach the LoRA adapter
model = PeftModel.from_pretrained(base, "SathishKumar89/my-python-coder")

# Step 3: Load the tokenizer (included in this repo)
tokenizer = AutoTokenizer.from_pretrained("SathishKumar89/my-python-coder")

## Prompt Format

This model was trained with the following instruction format. Using the same format at inference time will give the best results:

Instruction:

<your task description>

Response:

<model's answer>


## Usage

import torch from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel

Load base model and LoRA adapter

basemodel = AutoModelForCausalLM.frompretrained( "Qwen/Qwen2.5-Coder-1.5B-Instruct", dtype=torch.float16, devicemap="auto", ) model = PeftModel.frompretrained(basemodel, "SathishKumar89/my-python-coder") tokenizer = AutoTokenizer.frompretrained("SathishKumar89/my-python-coder")

Prepare a prompt

prompt = """### Instruction: Write a Python function that checks if a number is prime.

Response:

"""

inputs = tokenizer(prompt, returntensors="pt").to(model.device) outputs = model.generate(**inputs, maxnewtokens=200, dosample=False) print(tokenizer.decode(outputs[0], skipspecialtokens=True))


## Example Output

**Prompt:**

Instruction:

Write a Python function that checks if a number is prime.

Response:


**Model output:**

def is_prime(num): # Check for 0 and 1 if num <= 1: return False

# Check for even numbers greater than 2 elif num == 2: return True elif num % 2 == 0: return False

# Check for odd numbers greater than 3 else: for i in range(3, int(num**0.5) + 1, 2): if num % i == 0: return False return True


## Limitations

- Trained on a **small subset** (1,500 of 18,612 examples) for only 200 steps — this is a proof-of-concept, not a production model.
- May not generalize well to complex Python tasks (large refactors, multi-file projects, advanced libraries).
- Inherits any biases or limitations present in the base model and training dataset.
- Not evaluated against standard benchmarks.

## Future Improvements

- Train on the full dataset for multiple epochs
- Increase LoRA rank for greater capacity
- Evaluate on HumanEval or MBPP benchmarks

## Acknowledgements

- Base model: [Qwen2.5-Coder-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct) by the Qwen team
- Dataset: [iamtarun/python_code_instructions_18k_alpaca](https://huggingface.co/datasets/iamtarun/python_code_instructions_18k_alpaca)
- Training framework: Hugging Face `transformers`, `peft`, `trl`