vrachit's picture
Update README.md
c555cb0 verified
---
base_model: Qwen/Qwen1.5-1.8B
library_name: peft
pipeline_tag: text-generation
tags:
- base_model:adapter:Qwen/Qwen1.5-1.8B
- lora
- transformers
- code-generation
- python
- reasoning
- synthetic-data
language:
- en
license: apache-2.0
---
# Qwen 1.5 1.8B - Python Code Generation with Step-by-Step Reasoning
A fine-tuned version of Qwen 1.5 1.8B that generates Python code with detailed step-by-step reasoning explanations. This model teaches users how to solve programming problems by explaining its thought process before writing code.
## Model Details
### Model Description
This model is fine-tuned using QLoRA on a synthetic dataset of 1,000 Python programming problems enriched with step-by-step reasoning. The model learns to explain its problem-solving approach before generating code, making it ideal for educational purposes and transparent code generation.
- **Developed by:** [Your Name/Organization]
- **Model type:** Causal Language Model (Fine-tuned with LoRA adapters)
- **Language(s):** English (code generation in Python)
- **License:** Apache 2.0
- **Finetuned from model:** Qwen/Qwen1.5-1.8B
### Model Sources
- **Base Model:** [Qwen/Qwen1.5-1.8B](https://huggingface.co/Qwen/Qwen1.5-1.8B)
- **Training Data:** Synthetic dataset generated from MBPP and CodeAlpaca using Llama 3.1 8B
## Uses
### Direct Use
This model is designed for:
- **Educational code generation**: Teaching programming concepts through explained solutions
- **Transparent AI coding assistants**: Understanding how the model approaches problems
- **Code explanation**: Generating step-by-step breakdowns of problem-solving strategies
- **Learning tool**: Helping beginners understand algorithmic thinking
### Example Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# Load base model and tokenizer
base_model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen1.5-1.8B",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-1.8B")
# Load LoRA adapter
model = PeftModel.from_pretrained(base_model, "[YOUR_MODEL_PATH]")
# Generate code with reasoning
prompt = "Write a Python function to find the longest common prefix in a list of strings."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```
### Out-of-Scope Use
- **Production-critical systems**: This model is fine-tuned on a limited dataset and should not be used for safety-critical applications
- **Non-Python languages**: The model is specifically trained on Python problems
- **Complex software architecture**: Best suited for algorithm-level problems, not large-scale system design
- **Security-sensitive code**: Should not be used for generating cryptographic or security-critical code without expert review
## Bias, Risks, and Limitations
### Limitations
1. **Dataset size**: Trained on only 1,000 examples, may not generalize to all problem types
2. **Teacher model quality**: Synthetic data generated by Llama 3.1 8B may contain errors
3. **Small test set**: Evaluated on only 7 problems, true generalization unknown
4. **Potential overfitting**: High accuracy on test set may indicate memorization rather than true learning
5. **No code validation**: Training data was not validated for correctness before fine-tuning
### Recommendations
- Always review and test generated code before using in production
- Use as a learning tool rather than a replacement for human expertise
- Validate outputs against test cases and edge cases
- Consider the model's explanations as one perspective, not absolute truth
## Training Details
### Training Data
- **Source datasets**: MBPP (Mostly Basic Programming Problems) and CodeAlpaca
- **Dataset size**: 1,000 Python programming problems
- **Data generation**: Synthetic step-by-step reasoning generated using Llama 3.1 8B Instant via Groq API
- **Data structure**: Each example contains:
- Original programming problem
- Step-by-step reasoning (problem understanding, algorithm design, implementation strategy)
- Python solution
### Training Procedure
#### Fine-tuning Method
- **Technique**: QLoRA (Quantized Low-Rank Adaptation)
- **Quantization**: 4-bit quantization for memory efficiency
- **LoRA Configuration**:
- Rank (r): 8
- Alpha: 16
- Target modules: q_proj, k_proj, v_proj, o_proj (attention layers)
- Dropout: 0.05
#### Training Hyperparameters
- **Training epochs**: 3
- **Learning rate**: 2e-4
- **Optimizer**: paged_adamw_8bit
- **Batch size**: [Specify if known]
- **Training regime**: Mixed precision (4-bit quantization)
- **Hardware**: Google Colab T4 GPU (free tier)
- **Framework**: PEFT 0.17.1, Transformers, bitsandbytes
#### Training Time
- Approximately [X hours] on Google Colab T4 GPU
## Evaluation
### Testing Data & Metrics
#### Testing Data
- **Test set size**: 7 diverse Python programming problems
- **Problem types**: Mix of algorithmic challenges from the training distribution
#### Metrics
- **Primary metric**: Pass@1 (functional correctness - does the generated code execute correctly?)
- **Secondary metric**: Reasoning structure presence (does output include step-by-step explanation?)
### Results
| Metric | Base Model (Qwen 1.5 1.8B) | Fine-tuned Model |
|--------|---------------------------|------------------|
| Pass@1 | 75% | 100% |
| Reasoning Structure | Inconsistent | 100% |
**Key Findings**:
- **+25 percentage point improvement** in functional correctness
- **100% of outputs** now include structured step-by-step reasoning
- All 7 test cases passed successfully
**Important Note**: Results are based on a small test set (7 examples). Larger-scale evaluation needed to confirm generalization.
## Environmental Impact
- **Hardware Type**: NVIDIA T4 GPU (Google Colab)
- **Hours used**: ~[X hours for fine-tuning]
- **Cloud Provider**: Google Cloud Platform
- **Compute Region**: [Specify if known]
- **Carbon Emitted**: Minimal due to use of QLoRA on single T4 GPU
Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute).
## Technical Specifications
### Model Architecture
- **Base architecture**: Qwen 1.5 1.8B (Transformer decoder)
- **Fine-tuning method**: LoRA adapters on attention layers
- **Total parameters**: 1.8B (base) + ~4.7M (LoRA adapters)
- **Trainable parameters**: ~4.7M (0.26% of total)
### Compute Infrastructure
#### Hardware
- GPU: NVIDIA T4 (16GB VRAM)
- Platform: Google Colab (free tier)
#### Software
- PEFT 0.17.1
- Transformers
- bitsandbytes (for 4-bit quantization)
- PyTorch
- Groq API (for synthetic data generation)
## Project Insights
### What Worked Well
- Cross-model knowledge distillation (8B teacher → 1.8B student)
- QLoRA enabled fine-tuning on free-tier GPU
- Structured prompts for synthetic data generation
- Teaching reasoning process alongside code generation
### Future Improvements
1. **Better teacher model**: Use Llama 3.1 70B for higher-quality synthetic data
2. **Data validation**: Verify all generated code executes correctly before training
3. **Larger dataset**: Scale to 5,000-10,000 examples
4. **Robust evaluation**: Test on 50-100 problems from benchmarks like HumanEval
5. **Higher LoRA rank**: Experiment with rank 16 or 32 for more capacity
## Citation
If you use this model, please cite:
```bibtex
@misc{qwen15-code-reasoning,
author = {[Rachit Verma]},
title = {Qwen 1.5 1.8B Fine-tuned for Python Code Generation with Reasoning},
year = {2025},
publisher = {HuggingFace},
}
```
## Model Card Authors
[Rachit Verma]