hauser458original's picture
Update README.md
bbce3a1 verified
|
Raw
History Blame Contribute Delete
5.24 kB
---
license: other
license_name: lfm1.0
license_link: https://huggingface.co/LiquidAI/LFM2.5-350M/blob/main/LICENSE
base_model: LiquidAI/LFM2.5-350M
tags:
- lfm2
- lfm2.5
- liquid
- python
- math
- fine-tune
language:
- en
pipeline_tag: text-generation
---
# LFM2.5-350M-Python-Math
A fine-tune of [LiquidAI/LFM2.5-350M](https://huggingface.co/LiquidAI/LFM2.5-350M) (instruct) focused on **Python code generation** and **math word-problem solving**, while retaining general chat ability through a balanced mixed dataset.
## Why this exists
The previous 230M fine-tune (`lfm2.5-230m-code-math`) showed strong potential but suffered from catastrophic forgetting (e.g., confusing baking cookies with HTTP cookies, failing negative constraints like "no dairy"). This 350M version addresses those issues by:
1. **Mixing general chat data** (`yahma/alpaca-cleaned`, 30k samples) to prevent knowledge loss.
2. **Injecting custom fix-it examples** targeting specific failure modes (negative constraints, complete Pygame scripts).
3. **Using longer context** (2048 tokens) so code outputs aren't truncated mid-function.
4. **Reducing epochs to 2** with a lower learning rate (`2e-5`) to prevent overfitting observed in earlier runs.
Fine-tuning started from the **instruct checkpoint** rather than base. Testing confirmed that at 350M scale, starting from base with a mixed dataset still produced alignment failures (refusals, identity confusion, math regression), while the instruct checkpoint with the same dataset produced consistently strong results.
## Training details
- **Base model:** `LiquidAI/LFM2.5-350M` (instruct)
- **Method:** Full fine-tune (96GB VRAM, no LoRA needed)
- **Datasets:**
- Python Code: [`iamtarun/python_code_instructions_18k_alpaca`](https://huggingface.co/datasets/iamtarun/python_code_instructions_18k_alpaca) (Python-focused, replacing the multi-language 120k set)
- Math: [`openai/gsm8k`](https://huggingface.co/datasets/openai/gsm8k) (main split)
- General Chat: [`yahma/alpaca-cleaned`](https://huggingface.co/datasets/yahma/alpaca-cleaned) (30k sample subset)
- Custom Fix-It: Hand-crafted examples for negative constraints ("no dairy", "no eggs") and complete runnable Pygame scripts (duplicated 50x for weight)
- **Checkpoint selection:** Best by eval_loss
- **Sequence length:** 2048 tokens (increased from 1024 to accommodate full scripts)
- **Max response chars:** 3500 (prevents code truncation)
- **Epochs:** 2 (reduced from 4; overfitting observed past epoch 2 in prior runs)
- **Learning rate:** 2e-5 (reduced from 5e-5 for 350M stability)
- **Loss:** Completion-only
## What it's good at
- **Python Code**: Complete, runnable scripts including Pygame game loops, file I/O, classes, list comprehensions, and algorithmic implementations (e.g., two-pointer palindrome check). No more placeholder `pass` statements or truncated functions.
- **Math**: GSM8K-style word problems with step-by-step reasoning annotations (`<<...>>`). Reliable on algebra, percentages, geometry, and multi-step arithmetic.
- **General Chat**: Retains coherent conversational ability. Correctly handles negative constraints (e.g., "breakfast without eggs" returns egg-free options). Knows the difference between baking cookies and browser cookies.
- **Speed**: At 350M parameters, achieves ~157 t/s generation on laptop CPU (i5-12450H) with Q5_K_S quantization via llama.cpp.
## Known limitations
- **Python only**: Trained exclusively on Python code instructions. Other languages were not included in this fine-tune.
- **Sentence counting**: May not strictly adhere to "exactly N sentences" constraints.
- **Identity**: May occasionally claim to be developed by Google (artifact from Alpaca-Cleaned training data).
- **Still 350M parameters**: Do not expect deep multi-step reasoning or long-form creative writing at the level of larger models.
- Not evaluated on safety-critical, medical, or legal use cases.
## Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "hauser458original/lfm2.5-350m-python-math"
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="bfloat16", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
messages = [{"role": "user", "content": "Write a Python function to check if a number is prime."}]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, return_tensors="pt", return_dict=True
).to(model.device)
output = model.generate(**inputs, max_new_tokens=512, do_sample=True, temperature=0.5, top_p=0.9)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))
```
GGUF quantized versions (Q4_K_M, Q5_K_S, Q5_K_M, Q8_0, F16) for llama.cpp/Ollama/LM Studio are available at: [`hauser458original/lfm2.5-350m-python-math-GGUF`](https://huggingface.co/hauser458original/lfm2.5-350m-python-math-GGUF)
## License
Inherits the [LFM Open License v1.0](https://huggingface.co/LiquidAI/LFM2.5-350M/blob/main/LICENSE) from the base model.
## Acknowledgements
Built on [LiquidAI/LFM2.5-350M](https://huggingface.co/LiquidAI/LFM2.5-350M). See the [LFM2 Technical Report](https://arxiv.org/abs/2511.23404) for details on the base architecture.