Production-ready headless LLM fine-tuning with smart defaults, Windows support, and modular architecture
Project description
日本語 | 中文 | Español | Français | हिन्दी | Italiano | Português (BR)
Headless LLM fine-tuning in 3 lines. Smart defaults, VRAM-aware batch sizing, multi-run SLAO, and one-click GGUF export for Ollama.
Train LLMs in 3 lines of code. Export to Ollama in one more.
Quick Start
pip install backpropagate[standard]
from backpropagate import Trainer
trainer = Trainer("unsloth/Qwen2.5-7B-Instruct-bnb-4bit")
trainer.train("my_data.jsonl", steps=100)
trainer.export("gguf", quantization="q4_k_m") # Ready for Ollama
Dataset Format
Your JSONL training file should have one example per line. The simplest format is ShareGPT chat:
{"conversations": [{"from": "human", "value": "What is Python?"}, {"from": "gpt", "value": "A programming language."}]}
{"conversations": [{"from": "human", "value": "Explain recursion."}, {"from": "gpt", "value": "A function that calls itself."}]}
Alpaca (instruction/output), OpenAI chat (messages), and raw text formats are also supported.
Why Backpropagate?
| Problem | Solution |
|---|---|
| Fine-tuning is complex | 3 lines: load, train, save |
| Windows is a nightmare | First-class Windows support |
| VRAM management is hard | Auto batch sizing, GPU monitoring |
| Model export is confusing | One-click GGUF + Ollama registration |
| Long runs cause forgetting | Multi-run SLAO training |
Key Features
- Headless by Design: Built for CI/CD pipelines, automated workflows, and programmatic execution.
- Smart Defaults: Automatically configures optimal hyperparameters based on your hardware and dataset.
- Multi-Run SLAO Training: Advanced training strategies to prevent catastrophic forgetting during long runs.
- First-Class Windows Support: Tested and optimized for Windows environments, avoiding common PyTorch/CUDA pitfalls.
- Seamless Export: One-click export to GGUF format and automatic registration with Ollama.
- Modular Architecture: Install only the dependencies you need (e.g.,
[unsloth],[ui],[export]).
Installation
pip install backpropagate # Core only (minimal)
pip install backpropagate[unsloth] # + Unsloth 2x faster training
pip install backpropagate[ui] # + Gradio web UI
pip install backpropagate[standard] # unsloth + ui (recommended)
pip install backpropagate[full] # Everything
| Extra | Description | Dependencies |
|---|---|---|
unsloth |
2x faster training, 50% less VRAM | unsloth |
ui |
Gradio web interface | gradio>=5.6.0 |
validation |
Pydantic config validation | pydantic, pydantic-settings |
export |
GGUF export for Ollama | llama-cpp-python |
monitoring |
WandB + system monitoring | wandb, psutil |
observability |
OpenTelemetry tracing | opentelemetry-api, opentelemetry-sdk |
logging |
Structured logging | structlog |
security |
JWT auth + token generation | PyJWT, cryptography |
production |
unsloth + ui + validation + logging + security | (bundle) |
Requirements: Python 3.10+ · CUDA GPU (8GB+ VRAM) · PyTorch 2.0+
Configuration
All settings can be overridden with environment variables using the BACKPROPAGATE_ prefix (e.g., BACKPROPAGATE_LOG_LEVEL=debug). A .env file in the project root is loaded automatically when the [validation] extra is installed.
Usage
Basic Training
from backpropagate import Trainer
trainer = Trainer("unsloth/Qwen2.5-7B-Instruct-bnb-4bit")
trainer.train("my_data.jsonl", steps=100)
trainer.save("./my-model")
trainer.export("gguf", quantization="q4_k_m")
Multi-Run SLAO Training
from backpropagate import Trainer
trainer = Trainer("unsloth/Qwen2.5-7B-Instruct-bnb-4bit")
result = trainer.multi_run(
dataset="HuggingFaceH4/ultrachat_200k",
num_runs=5,
steps_per_run=100,
samples_per_run=1000,
merge_mode="slao", # Smart LoRA merging
)
Export to Ollama
# Export to GGUF
result = trainer.export("gguf", quantization="q4_k_m")
# Register with Ollama separately
from backpropagate import register_with_ollama
register_with_ollama(result.path, "my-finetuned-model")
# ollama run my-finetuned-model
CLI
backprop train --data my_data.jsonl --model unsloth/Qwen2.5-7B-Instruct-bnb-4bit --steps 100
backprop multi-run --data my_data.jsonl --runs 5 --steps 100
backprop export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-name my-model
backprop ui --port 7862
backprop info
Windows Support
Backpropagate is designed to work on Windows out of the box:
- Pre-tokenization to avoid multiprocessing crashes
- Automatic xformers disable for RTX 40/50 series
- Safe dataloader settings
- Tested on RTX 5080 (16GB VRAM)
Model Presets
| Preset | VRAM | Speed | Quality |
|---|---|---|---|
| Qwen 2.5 7B | ~12GB | Medium | Best |
| Qwen 2.5 3B | ~8GB | Fast | Good |
| Llama 3.2 3B | ~8GB | Fast | Good |
| Llama 3.2 1B | ~6GB | Fastest | Basic |
| Mistral 7B | ~12GB | Medium | Good |
Architecture
backpropagate/
├── trainer.py # Core Trainer class
├── multi_run.py # Multi-run SLAO training
├── slao.py # SLAO LoRA merging algorithm
├── datasets.py # Dataset loading, filtering & curriculum
├── export.py # GGUF/Ollama export
├── config.py # Pydantic settings + training presets
├── gpu_safety.py # GPU monitoring & safety
├── cli.py # CLI entry point (backprop command)
├── checkpoints.py # Checkpoint management
├── exceptions.py # Structured error hierarchy
├── feature_flags.py # Optional feature detection
├── security.py # Path traversal & torch security
├── logging_config.py # Structured logging setup
├── theme.py # Gradio theme customization
├── ui.py # Gradio interface
└── ui_security.py # Rate limiting, CSRF, file validation
Privacy
All training happens locally on your GPU. Backpropagate makes no network requests except to download models from HuggingFace (which you initiate). No telemetry, no cloud dependency.
Scorecard
| Category | Score | Notes |
|---|---|---|
| A. Security | 6/8 | SECURITY.md, trust model, no secrets/telemetry, safe_path(). MCP items skipped |
| B. Error Handling | 3/7 | Structured exceptions + exit codes + no raw stacks. MCP/desktop/vscode skipped |
| C. Operator Docs | 4/7 | README, CHANGELOG, LICENSE, --help. Logging/MCP/complex skipped |
| D. Shipping Hygiene | 6/9 | verify.sh, version=tag, 5 scanners in CI, dependabot, python_requires, clean build |
| E. Identity | 4/4 | Logo, translations, landing page, metadata |
| Total | 23/31 | 14 items skipped with justification · shipcheck audit passes 100% |
License
MIT — see LICENSE for details.
Built by MCP Tool Shop
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file backpropagate-1.0.3.tar.gz.
File metadata
- Download URL: backpropagate-1.0.3.tar.gz
- Upload date:
- Size: 316.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b00bea7c18e5830904c88aa3de0f2e93b16fcb746ec343699a5552f3057a73e
|
|
| MD5 |
5539a8b60a87c726aa17891397b06e6d
|
|
| BLAKE2b-256 |
08b0175dc59fb6bc6d8604daab62a039d0dadcf1fe00a9923c1e0d7d5b1fe9a1
|
Provenance
The following attestation bundles were made for backpropagate-1.0.3.tar.gz:
Publisher:
publish.yml on mcp-tool-shop-org/backpropagate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
backpropagate-1.0.3.tar.gz -
Subject digest:
0b00bea7c18e5830904c88aa3de0f2e93b16fcb746ec343699a5552f3057a73e - Sigstore transparency entry: 1293386674
- Sigstore integration time:
-
Permalink:
mcp-tool-shop-org/backpropagate@a3d36d13535643b66fb40c36e7e1840f893b3410 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/mcp-tool-shop-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a3d36d13535643b66fb40c36e7e1840f893b3410 -
Trigger Event:
release
-
Statement type:
File details
Details for the file backpropagate-1.0.3-py3-none-any.whl.
File metadata
- Download URL: backpropagate-1.0.3-py3-none-any.whl
- Upload date:
- Size: 142.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9b2f69ff48f230f1630e57be3a8425b03aa5287f739835168c8071e2414fe90
|
|
| MD5 |
08422cd5843be587d9a7c0c5ef04d8ef
|
|
| BLAKE2b-256 |
bc23548068aa8e9146d68311ed410c684c172a5b82db34a6624279617b4212dd
|
Provenance
The following attestation bundles were made for backpropagate-1.0.3-py3-none-any.whl:
Publisher:
publish.yml on mcp-tool-shop-org/backpropagate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
backpropagate-1.0.3-py3-none-any.whl -
Subject digest:
c9b2f69ff48f230f1630e57be3a8425b03aa5287f739835168c8071e2414fe90 - Sigstore transparency entry: 1293386675
- Sigstore integration time:
-
Permalink:
mcp-tool-shop-org/backpropagate@a3d36d13535643b66fb40c36e7e1840f893b3410 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/mcp-tool-shop-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a3d36d13535643b66fb40c36e7e1840f893b3410 -
Trigger Event:
release
-
Statement type: