--- 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]