mcp-tool-shop-org/backpropagate

GitHub: mcp-tool-shop-org/backpropagate

一款无需配置文件即可在单张消费级 GPU 上完成大语言模型微调并导出到 Ollama 的极简训练工具。

Stars: 1 | Forks: 0

日本語 | 中文 | Español | Français | हिन्दी | Italiano | Português (BR)

Backpropagate

CI PyPI Coverage OpenSSF Scorecard MIT License Landing Page

# 在单张 GPU 上微调 32B QLoRA —— 或端到端微调 7B 模型。打包部署到 Ollama。 Backpropagate 可以在**单张** GPU 上微调大型语言模型,并根据你实际拥有的显卡来调整规模。只需三行 Python 代码,即可在单张 32 GB 消费级显卡(RTX 5090)上对 7B–34B 模型进行 QLoRA;只需一个参数 —— `--full-ft-offload` —— 即可通过将 optimizer 状态卸载到 host RAM,实现 7B 级模型的完整全量微调。再通过一条命令即可导出到 Ollama,随后即可 `ollama run` 运行你的微调模型。最低可向下兼容至 16 GB 显存。在 Windows 上提供一流体验。 ``` from backpropagate import Trainer trainer = Trainer("Qwen/Qwen2.5-7B-Instruct") trainer.train("my_data.jsonl", steps=100) trainer.export("gguf", quantization="q4_k_m") ``` ``` backprop export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-name my-model ollama run my-model ``` 就这么简单。无需 YAML 配置文件,无需 `accelerate launch` 仪式,也没有单独的“现在将其转换为 GGUF”教程。只要你有一张 CUDA GPU 和一个包含训练数据的 JSONL 文件,只需三行代码就能完成一个可用的微调。 ## 安装 ``` # 推荐:隔离的 Python 安装(与系统 Python 或其他项目不冲突) pipx install backpropagate # 或者通过 uv(安装更快,同样的隔离) uv tool install backpropagate # 标准 pip(如果您管理自己的 virtualenv) pip install backpropagate ``` 如果你需要可选功能,请将安装命令替换为以下之一: ``` pipx install "backpropagate[standard]" # adds Unsloth (2x faster training) + the web UI pipx install "backpropagate[full]" # adds everything: unsloth, ui, monitoring, export, etc. ``` 更喜欢 Docker?`docker pull ghcr.io/mcp-tool-shop-org/backpropagate:latest` 也可以。镜像同时提供 `linux/amd64` 和 `linux/arm64` 版本,因此 Apple Silicon 和 ARM Linux 用户可以获得原生镜像。一个用于“容器化 UI”的标准 `compose.yaml` 位于仓库根目录 —— 运行 `docker compose up` 即可在 `http://localhost:7860` 启动 Web UI,并挂载持久化的 `~/.backpropagate` 数据卷。 ## Backpropagate 在该领域中的定位 目前已有几个优秀的 LLM 微调库。它们各有千秋: - **[Axolotl](https://github.com/OpenAccess-AI-Collective/axolotl)** —— 如果你喜欢 YAML 配置,并希望有一个现成的社区方案库可供借鉴 - **[LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)** —— 如果你需要 DPO/PPO/RLHF 和 Web GUI - **[Unsloth](https://github.com/unslothai/unsloth)** —— 如果你追求极致的训练速度,且使用的是受支持的模型系列 - **[torchtune](https://github.com/pytorch/torchtune)** —— 如果你想要 Meta 官方的、原生基于 PyTorch 且可编辑的方案 Backpropagate 是那个缺失的选项:**专为单张消费级 GPU 上的个人开发者设计的 3 行 Python API,用于训练 adapter 并打包部署。** 无需 YAML,无需 GUI,无需在线 RL (PPO/GRPO),也无需多节点。只有每个人都真正需要的核心循环,以及那个过去总是碍事的导出步骤。 如果你尝试过上述某个库,却受困于配置文件的繁文缛节,或是遇到了模型系列不支持的问题,又或者想要以 Windows 优先的默认设置 —— 那么 Backpropagate 就是为你而生的。 ## 你可以在单张 GPU 上微调什么 Backpropagate 会根据你的显卡调整运行规模。以下是**32 GB** 消费级 GPU (RTX 5090) 配备 64 GB host RAM 的实际能力上限 —— 这也是它的调优基准平台: | 模型大小 | 方法 | 在 32 GB 显卡上的状态 | |---|---|---| | 7B (Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | QLoRA | 轻松应对 —— 约需 7–8 GB。支持完整序列长度,余量充足。 | | **14B** (Qwen2.5-14B) | QLoRA | **日常使用的黄金甜点 —— 实测约需 8.5 GB**。rank/alpha 为 32,启用分页 8-bit AdamW,4096 ctx。 | | 24B (Mistral-Small-24B) | QLoRA | 约 18 GB。在 4096 ctx 下游刃有余。 | | **32B** (Qwen2.5-32B) | QLoRA | **刚好装下 —— 在 `max_len 2048` + 分页 8-bit AdamW 下约需 26 GB**。性能上限。 | | ≤6B | `mode="full"` (真正的全量微调) | 纯 GPU 全量 FT —— bf16 权重,无 adapter。在 32 GB 显存下,显卡感知的上限为 6B。 | | **7B 级别** (Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | `mode="full" --full-ft-offload` | **基于 FSDP2 CPU-offload 的全量微调** —— 将参数和 optimizer 卸载到 64 GB host RAM。速度较慢(受带宽限制);适用于 Linux/WSL2。 | 大多数单 GPU 库会让你去别处解决的两个难题 —— **24–34B QLoRA** 和 **单卡 7B 级别全量微调** —— Backpropagate 都能在一张消费级显卡上搞定,并将结果直接导出到 Ollama。 **全量 FT 的上限是根据显卡动态决定的。** 它是根据 4 部分训练内存算术公式(权重 + 梯度 + optimizer + activations)与你*检测到*的 VRAM 推导出来的:**16 GB → 4B, 24 GB → 5B, 32 GB → 6B** 纯 GPU。`--full-ft-offload` 通过 FSDP2 `fully_shard` + `CPUOffloadPolicy` 将参数 + optimizer 状态卸载到 host RAM,从而将上限提升至 **7B 级别**(速度较慢,受限于 PCIe/CPU 带宽;需要约 64 GB host RAM 和 NCCL 后端,即 Linux/WSL2)。你可以使用 `--full-ft-ceiling-billions` 显式覆盖该上限。如果模型超过了卸载上限,程序会以 `RUNTIME_FULL_FT_MODEL_TOO_LARGE` 错误退出,并提示恢复方法(`--full-ft-offload` 或 LoRA/QLoRA)。有关 VRAM 计算公式以及 Biderman 2024 / Thinking Machines 2025 的质量对比,请参阅[全量微调手册页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/)。 ### 可向下扩展至 16 GB 16 GB 显存(RTX 4080 / 5080 / 4070 Ti Super)仍然是第一梯队:约 7–8 GB 即可进行 7B QLoRA,并且可通过 `mode="full"`(bf16 权重 + gradient checkpointing + 分页 8-bit AdamW)在 16 GB 内对真正的约 3B 模型(SmolLM3-3B、Qwen2.5-3B、Llama-3.2-3B/1B)进行真正的全量微调。相同的代码会根据检测到的显卡自动选择合适的 batch size 和全量 FT 上限 —— 在不同的设备间切换无需更改任何参数标志。 2-bit 量化 (AQLM / QuIP#) 不在**支持范围内** —— 2-bit 基础模型无法干净地合并回全精度权重,这会破坏“可合并 adapter → GGUF → Ollama”的导出契约(这也是整个流水线的核心意义所在)。Backpropagate 提供的内存余量控制手段 —— QLoRA、`mode="full"`、`--full-ft-offload` 以及 FP8 计算路径(`--fp8`,适用于 Blackwell/Hopper)—— 均能保持可合并性和可导出性。 ## Backpropagate 不适用的场景 如果你的使用场景如下,使用其他库会让你体验更好 —— Backpropagate 并非正确的选择,强行让它工作所花费的精力,还不如直接使用合适的工具。在开始之前阅读本节,可以帮你省去无谓的安装和试错: - **超过卸载上限(≈13B+)的全参数微调** —— 在 32 GB 显卡上,Backpropagate 的全量微调最高支持 **纯 GPU 约 6B,以及通过 `--full-ft-offload` 支持约 7B 级别**(参见[性能上限](#what-you-can-fine-tune-on-one-gpu))。对 13B+ 模型进行*真正的全量*微调已经超出此范围 —— 它需要多 GPU FSDP 或更大的显卡(请使用跨多 GPU 的 `transformers.Trainer`,或租用 A100/H100)。然而,在消耗这些算力之前:最近的研究([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/))表明,配置正确的 LoRA 在大多数训练后任务(指令遵循、领域适应、人格/风格)中,能够以约 67% 的计算量达到与全量微调相当的质量 —— 因此,Backpropagate 能够在单卡上实现的最高 34B 的 QLoRA,对于大多数开发者实际想要完成的工作来说,不会有任何质量损失。 - **在线 RL —— PPO / GRPO / RLVR** —— Backpropagate 支持单阶段 SFT 以及无参考模型的偏好微调(v1.5 中的 ORPO;v1.6 中的 SimPO + KTO)。它*不支持*在线强化学习 —— PPO、GRPO 或 RLVR —— 这需要在训练步骤之上建立 reward model 或生成与评分循环。对于这些需求,请直接使用 TRL 或 LLaMA-Factory。(无参考模型的偏好微调符合单阶段资源限制,因为内存中不需要保留单独的参考模型;请参阅[快速开始](#quick-start)下的 ORPO 说明。) - **多节点训练** —— 仅支持单机单 GPU。单机多 GPU 可以运行(通过 `accelerate launch`),但不属于官方支持范围。 - **在 CUDA 路径上进行 macOS 训练** —— Apple Silicon 没有 CUDA,因此 CUDA 路径只能在配备 NVIDIA GPU 的 Linux 或 Windows 设备上运行。你依然可以通过 Ollama 在 Mac 上运行训练好的模型。**处于实验阶段、未经充分验证的预览版** MLX 路径(`--backend mlx`)可在 Apple Silicon 上原生训练 LoRA adapter —— 参见 [Apple Silicon (MLX)](#apple-silicon-mlx--unverified-preview)。它仅支持 LoRA-SFT,并且**未在真实芯片上完成内部测试验证**(不提供支持),因此对于 LoRA SFT 以外的任何需求(ORPO、全量微调、FP8、多轮运行),请使用 CUDA 路径。 - **已测试模型系列以外的任何模型** —— Qwen 2.5 / 3.5 (7B / 4B)、Phi-4-mini-3.8B、SmolLM3-3B、Llama 3.2 (3B / 1B)、Mistral 7B。其他模型通常也能工作,但未在 CI 中固定测试。 如果你确实需要上述任何功能,请尝试前面列出的库。它们在这些方面做得更好。 ## Backpropagate 能带给你什么 只需一次安装,即可获得四大特性: **1. 无需配置文件即可运行的真正 3 行 API。** 本 README 顶部的代码片段是可以直接端到端运行的。无需 `accelerate config`,无需 YAML,无需 Hydra 覆盖配置。只需调用 `Trainer(model).train(data)`,你就能获得一个微调模型。 **2. 真正好用的 Windows 体验。** 大多数 ML 库将 Windows 视为附带支持。Backpropagate 在 Windows + RTX 5080 上经过了第一梯队的严格测试。该库会为你处理各种运行时的怪癖 —— 它知道如何预先对数据进行 tokenize,从而避免 Windows 多进程崩溃;它会自动在 RTX 40/50 显卡上禁用会导致错误的 xformers;它还会选择绝不会导致崩溃的 dataloader 设置。你完全不需要了解这些细节。它就能顺畅运行。 **3. 为无人值守运行而生。** 训练需要花费数小时。你肯定不想全程盯着它。Backpropagate 的设计理念就是让它自己运行: - 如果你的 GPU 显存耗尽,它会自动将 batch size 减半并重试 —— 最多重试三次。完全无需手动调参。 - 如果你的 GPU 温度过高,它会自动暂停,等温度降下来后再继续。 - 每一个 checkpoint 都是以原子方式写入的 —— 即使你的笔记本在保存过程中死机,之前完好的 checkpoint 依然安全无损。 每次训练都会获得一个唯一的 ID,该 ID 会附加到每一行日志、每一个 checkpoint 以及每一次 Weights & Biases 记录中。如果出现问题,只需提供这一个 ID,维护人员就能关联所有信息。 - 错误均附带稳定的错误码(`RUNTIME_GPU_OOM`、`DEP_OLLAMA_REGISTRATION_FAILED` 等),方便你在日志和[故障排除指南](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/)中进行搜索以寻找修复方法。CUDA 相关的故障拥有专门的 [CUDA 故障排除页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/)。 **4. 从训练好的 adapter 到 `ollama run` 仅需一条命令。** 许多库都能训练模型,但当你真正想使用模型时,却往往设置了重重障碍。Backpropagate 只需一条命令即可导出为 GGUF(Ollama 使用的格式)并注册 Ollama 模型。只需大约 30 秒,你就能从“训练完成”变为“与我的微调模型畅聊”。 ## 快速开始 该仓库自带了一个极小的示例数据集,因此本 README 顶部的代码片段在全新安装后即可直接运行: ``` pipx install "backpropagate[standard]" python -c " from backpropagate import Trainer trainer = Trainer('Qwen/Qwen2.5-7B-Instruct') trainer.train('examples/quickstart.jsonl', steps=10) trainer.export('gguf', quantization='q4_k_m') " ``` 这会在 5 段简短的 ShareGPT 格式对话上训练一个 Qwen 2.5 7B adapter,然后将结果导出为 GGUF。如果要使用你自己的数据,请按每行一个示例的格式编排你的 JSONL 文件: ``` {"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`) 和纯文本格式 —— Backpropagate 会自动检测格式。 ### 偏好微调 (ORPO, SimPO, KTO) 基于偏好进行训练,而不是简单的演示。ORPO 是无参考模型且单阶段的 —— 它将偏好信号融入到 SFT 步骤中,因此无需单独的 reward 或参考模型,且 3 行代码的结构保持不变。传入 `--method orpo` (CLI) 或 `method="orpo"` (Python),并为其提供由 `{prompt, chosen, rejected}`(或仅有 `{chosen, rejected}`)组成的数据集: ``` {"prompt": "What is Python?", "chosen": "A high-level programming language known for readability.", "rejected": "idk look it up"} {"prompt": "Explain recursion.", "chosen": "A function that calls itself with a smaller input until a base case.", "rejected": "when something repeats"} ``` ``` from backpropagate import Trainer trainer = Trainer("Qwen/Qwen2.5-7B-Instruct", method="orpo") trainer.train("preferences.jsonl", steps=100) trainer.export("gguf", quantization="q4_k_m") ``` ``` backprop train --data preferences.jsonl --method orpo --steps 100 ``` 对于 ORPO,默认学习率会自动降低至 `8e-6`(其 loss 比普通 SFT 更为陡峭);可以通过调整 `--orpo-beta`(默认为 `0.1`)来改变 odds-ratio 惩罚的权重。ORPO 仅支持 `mode="lora"`。 **v1.6 新特性 —— SimPO 和 KTO。** `--method simpo` ([Meng et al. 2024](https://arxiv.org/abs/2405.14734)) 无需参考模型,采用长度归一化的奖励机制,并且接受与 ORPO 相同的成对 `{prompt, chosen, rejected}` 数据(`--simpo-beta`、`--simpo-gamma`)。`--method kto` ([Ethayarajh et al. 2024](https://arxiv.org/abs/2402.01306)) 接受**非成对的** `{prompt, completion, label}` 数据 —— 即针对每个示例的点赞/点踩 —— 适用于大量未经过精心整理为 A/B 对的反馈数据;它会根据你的标签计数自动平衡期望/非期望 loss 的权重。两者均仅支持 `mode="lora"`,并保持在单 GPU SFT 的资源上限内(无需单独的参考模型)。请参阅[偏好微调手册](https://mcp-tool-shop-org.github.io/backpropagate/handbook/preference-tuning/)了解何时该用哪种方法。关于在线 RL (PPO/GRPO),请参阅 [Backpropagate 不适用的场景](#what-backpropagate-is-not-for)。 ### 推理链 SFT (R1 蒸馏) 用最简单的方式蒸馏一个推理模型。传入 `--reasoning-trace` (CLI) 或 `Trainer(..., reasoning_trace=True)` (Python),并提供在助手回合中包含 `...` 思维链的轨迹 —— 这相当于 [DeepSeek-R1](https://arxiv.org/abs/2501.12948) 蒸馏的纯 SFT 部分,不需要 RL。Backpropagate 会将 `` 保留在训练目标中,剔除空或过长的轨迹(轨迹长度过滤),并将默认的 `max_seq_length` 提高到 8192 以适应更长的 CoT。关键是,`` 保持为**纯文本**形式 —— 没有特殊的 token,也不需要调整 embedding 大小 —— 因此合并后的 GGUF 可以像其他任何微调模型一样导出到 Ollama。仅支持 SFT。有关数据集的结构和可调整的 token 区间,请参阅[推理链方案](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/#reasoning-trace-sft-r1-distillation)。 ### Apple Silicon (MLX) —— 未经充分验证的预览版 **一套 API,两条路径。** CUDA 是标准且经过验证的后端;MLX 是第二条路径,它通过 Apple 的 [`mlx_lm.lora`](https://github.com/ml-explore/mlx-lm) 工具链在 M 系列 Mac 上进行训练(统一内存,无需 CUDA)。这 3 行代码结构会根据硬件自动选择路径 —— `backend='auto'`(默认值)会在 NVIDIA 设备上路由到 CUDA,在 Apple Silicon 上路由到 MLX,因此现有的 CUDA 环境不会受到任何影响: ``` from backpropagate import Trainer # 在 M-series Mac 上使用 `pip install 'backpropagate[mlx]'`: trainer = Trainer("mlx-community/Qwen2.5-0.5B-Instruct-4bit", backend="mlx") trainer.train("examples/quickstart.jsonl", steps=100) ``` ``` backprop train --data my_data.jsonl --backend mlx --steps 100 ``` MLX 路径**仅支持 LoRA SFT** —— 不支持 ORPO、FP8、`mode='full'` 或多轮运行(以上尝试都会以 `CONFIG_INVALID_SETTING` 被拒绝;如果需要这些功能,请在 NVIDIA 设备上使用 `backend='cuda'`/`'auto'`)。生成的 adapter 为普通的 safetensors 格式,可通过与 CUDA 路径相同的流程导出到 Ollama。 有关更多端到端工作流(微调并推送到 HF-Hub、OOM 后恢复、在长周期任务中进行多轮 SLAO 等),请参阅[手册方案页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/)。 ### Web UI(可选) 如果你更喜欢点击操作而不是编写 Python 代码,请安装 UI 扩展并启动: ``` pipx install "backpropagate[ui]" backprop ui --port 7862 ``` 一个本地 Web 界面将在 `http://localhost:7862` 打开,用于浏览数据集、验证格式以及可视化地组装训练配置。训练本身是通过 `backprop train` 运行的(UI 驱动的训练已列入开发计划 —— 目前 Start 按钮只会显示相关的说明提示)。UI 默认仅在本地运行。如果需要将其暴露给其他设备,请参阅下方的 [Web UI](#web-ui) 了解 `--share` + `--auth` 安全契约。 ## 多轮训练 如果你想在多个数据集上进行增量微调 —— 比如你每周都会获得新的训练数据,并希望在加入新数据的同时不遗忘之前学到的知识 —— 那么 Backpropagate 的 `multi_run` 模式就是为你准备的: ``` from backpropagate import Trainer trainer = Trainer("Qwen/Qwen2.5-7B-Instruct") result = trainer.multi_run( dataset="HuggingFaceH4/ultrachat_200k", num_runs=5, steps_per_run=100, samples_per_run=1000, ) ``` 这将运行五次训练过程,并在两次训练之间合并 adapter,其合并方式能在吸收新示例的同时保留以前学到的知识。该技术基于最新的持续学习研究 —— 请参阅本 README 底部的[参考文献](#references)。 CLI 版本: ``` backprop multi-run --data my_data.jsonl --runs 5 --steps 100 --samples 1000 ``` ## 从 checkpoint 恢复 如果一个 5 轮训练在第 4 轮崩溃了,是完全可恢复的。每次多轮训练都会将其运行 ID 写入磁盘上的历史记录和 checkpoint 清单中,因此只需一条命令即可从上次中断的地方继续: ``` backprop resume backprop multi-run --data ... --resume backprop train --data ... --resume # single-run resume ``` `backprop multi-run` 的默认行为(不带 `--resume`)会自动检测同一输出目录中未完成的记录并继续运行。如果要强制全新开始,请指定一个新的输出目录。 ## 训练历史 每次调用 `backprop train` 和 `backprop multi-run` 都会在 `/run_history.json` 中记录一条信息 —— 包括使用的模型、数据集、超参数、状态、最终 loss 以及 loss 历史。你可以列出并查看过去的运行记录: ``` backprop list-runs # last 20 runs backprop list-runs --status failed # filter by status backprop list-runs --json --limit 100 # machine-readable backprop show-run abcd1234 # detail view (partial ID is fine) ``` ## 实验跟踪 Backpropagate 会自动检测已安装的实验跟踪工具(Weights & Biases、TensorBoard、MLflow)并将它们接入。如果安装了 `wandb` 并且你已登录,每次运行都会自动记录到 W&B,并且运行名称会与磁盘上的运行 ID 保持一致 —— 这样你就可以使用同一个标识符在 W&B、你的日志以及 `run_history.json` 之间进行搜索。 ``` pip install backpropagate[monitoring] # installs wandb + psutil wandb login # one-time setup backprop train --data my_data.jsonl ``` 可以通过 `Trainer(report_to=["wandb"])`、`Trainer(report_to=["tensorboard"])` 或 `Trainer(report_to="none")` 进行覆盖或选择退出。 ## Web UI Reflex Web 界面是可选的 —— 可以通过 `pipx install "backpropagate[ui]"` 安装并启动: ``` backprop ui --port 7862 ``` UI 在本地的 `http://localhost:7862` 上运行。目前它涵盖了**浏览 / 验证 / 配置**这一半的工作流 —— 将其指向一个数据集,检查自动检测到的格式和统计信息,选择一个模型,并组装运行配置。**启动训练需要通过 CLI 执行**(`backprop train` / `backprop multi-run`);UI 中的 Start 按钮只会显示一条指向 CLI 的提示。UI 驱动的训练已在后续计划中 —— 在此之前,UI 是入口,而 CLI 是触发器。 如果需要将其暴露给其他设备(如网络上的其他人、公共 URL 等),你必须将 `--share`(或 `--host`)与 `--auth` 配合使用: ``` backprop ui --share --auth alice:hunter2 ``` 不带 `--auth` 的 `backprop ui --share` 会报错退出。原因是:`--share` 会发布一个任何人都可以访问的公开 URL,如果没有身份验证,这意味着任何人都可以操控你的训练流水线并读取你的 HuggingFace token。这一点没有任何例外 —— 如果你不想设置凭据,请改用 SSH 端口转发: ``` # 在客户端上: ssh -L 7860:localhost:7860 # 在服务器上: backprop ui # no --share # 然后在本地浏览器中打开 http://localhost:7860 ``` 完整的威胁模型请参阅 [handbook/security.md](https://mcp-tool-shop-org.github.io/backpropagate/handbook/security/)。 来自 UI 的文件系统写入操作被沙箱限制在单个目录中: - 默认值:`~/.backpropagate/ui-outputs` - 覆盖设置:通过设置 `BACKPROPAGATE_UI__OUTPUT_DIR=/path/you/own` - 该覆盖路径会经过黑名单验证 —— 会拒绝系统或凭据相关的路径(如 `/etc`、`~/.ssh`、`~/.aws`、`C:\Windows\System32` 等) ## 平台说明 **环境要求:** Python 3.10+ · CUDA GPU (8GB+ VRAM) · PyTorch 2.0+ 至少在 v1.6 版本之前一直支持 Python 3.10;Python 3.10 将于 2026 年 10 月到达上游生命周期终点,并计划在此之后的第一个版本中移除支持。对于全新安装,建议首选 Python 3.11 或 3.12 —— 3.11 是经过最多测试的最低版本。 Backpropagate 能够处理不同平台上训练时的各种运行时怪癖,但它无法解决安装时的问题。最常见的问题有两个: - **选错了 CUDA wheel。** PyTorch 为每个 CUDA 版本发布了一个单独的二进制文件。如果选错了,你会在不知不觉中安装了仅支持 CPU 的 PyTorch,导致训练速度慢到无法忍受。请使用 上的 wheel 选择器来匹配你的显卡驱动。运行 `nvidia-smi` 可以查看你的驱动 / CUDA 版本。 - **Windows + GGUF 导出。** `[export]` 扩展组件需要从源码编译 `llama-cpp-python`,这需要安装 Visual Studio Build Tools (C++ 组件) 和 CMake。 **macOS:** 不支持 CUDA 路径(因为没有 CUDA) —— 通过 CUDA 路由的 `trainer.train()` 会抛出 `DEP_GPU_NOT_AVAILABLE` 异常,但你可以在 Mac 上通过 Ollama 运行训练好的 adapter。**处于实验阶段、未经充分验证的预览版** MLX 路径(`--backend mlx`,`pip install 'backpropagate[mlx]'`)可通过 `mlx_lm.lora` 在 Apple Silicon 上原生训练 LoRA adapter —— 仅限 LoRA SFT,并且**未在真实芯片上完成内部测试验证**(参见 [Apple Silicon (MLX)](#apple-silicon-mlx--unverified-preview))。若要使用 CUDA 路径,或者进行 ORPO / 全量微调 / FP8 / 多轮运行,请使用配有 CUDA 的 Linux 或 Windows 机器。 有关详尽的安装修复指南,请参阅[故障排除手册页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/);有关驱动 / VRAM / xformers / bf16-vs-fp16 问题,请参阅专门的 [CUDA 故障排除页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/)。 ## CLI 每个 Python API 都有对应的 CLI 命令: ``` backprop train --data my_data.jsonl --model Qwen/Qwen2.5-7B-Instruct --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 # environment + version snapshot backprop list-runs # past training runs backprop show-run # detail view backprop resume # resume a crashed run backprop push ./output/lora --repo me/my-model # push adapter to HuggingFace Hub backprop diff-runs # diff two runs side by side backprop replay # re-run with same config / dataset backprop export-runs --format jsonl # bulk export run history ``` 完整参考请查阅 [CLI 手册页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/cli-reference/),或运行 `backprop --help`。 ## 配置 每个设置都可以使用带有 `BACKPROPAGATE_` 前缀的环境变量进行覆盖: | 变量 | 默认值 | 说明 | |---|---|---| | `BACKPROPAGATE_LOG_LEVEL` | `INFO` | `DEBUG` / `INFO` / `WARNING` / `ERROR` | | `BACKPROPAGATE_LOG_JSON` | 自动 | 强制输出 或控制台日志 | | `BACKPROPAGATE_MODEL__NAME` | `Qwen/Qwen2.5-7B-Instruct` | 默认模型 | | `BACKPROPAGATE_TRAINING__LEARNING_RATE` | `2e-4` | 学习率 | | `BACKPROPAGATE_LORA__R` | `256` | LoRA rank(v1.3 默认值;传入 `--lora-preset=fast` 可使用 v1.2.x 的默认值 16) | | `BACKPROPAGATE_UI__OUTPUT_DIR` | `~/.backpropagate/ui-outputs` | UI 文件系统沙箱 | 嵌套键使用双下划线(即 `MODEL__NAME`,而不是 `MODEL_NAME`)。完整的参考信息请查阅[环境变量手册页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/env-vars/)。 ## 模型预设 | 预设 | VRAM | 许可证 | 说明 | |---|---|---|---| | Qwen-3.5-4B | ~8GB | Apache 2.0 | 5B 以下模型的推荐默认项。此规格下的最佳质量。 | | Phi-4-mini-3.8B | ~8GB | MIT | 在推理 / 数学 / 代码方面表现出色。严格的许可规范。 | | SmolLM3-3B | ~6GB | Apache 2.0 | 完全开放的方案。原生 64K 上下文。 | | Qwen 2.5 7B | ~12GB | Apache 2.0 | 现有的默认模型。传统 7B 预设中质量最佳。 | | Qwen 2.5 3B | ~8GB | Qwen-Research | ⚠ 研究许可证 —— 商业使用前请查阅 Qwen 许可条款。 | | Llama 3.2 3B | ~8GB | Llama Community | Qwen 3B 的可靠替代品,具有相对宽松的许可附加条件。 | | Llama 3.2 1B | ~6GB | Llama Community | 适用于在小型显卡上进行快速实验。 | | Mistral 7B | ~12GB | Apache 2.0 | 与 Qwen 7B 相当,但采用了不同的 chat template。 | | Llama-3.1-8B | ~7-8GB (QLoRA) | Llama-3.1-Community | 8B QLoRA,128K 原生上下文(>700M-MAU 条款需要单独向 Meta 申请许可)。 | | **Qwen2.5-14B** | ~8.5GB (QLoRA) | Apache 2.0 | **32 GB 显卡日常使用的黄金甜点** —— rank/alpha 为 32,分页 8-bit AdamW,4096 ctx。 | | Mistral-Small-24B | ~18GB (QLoRA) | Apache 2.0 | 在 32 GB 显卡上运行 24B QLoRA,并留有 4096-ctx 的余量。 | | **Qwen2.5-32B** | ~26GB (QLoRA) | Apache 2.0 | **32 GB 显存的上限** —— 在 `max_len 2048` + 分页 8-bit AdamW 下刚好可以装下。 | 其他模型通常也能正常工作;上表列出的是经过精心调优的预设 —— 14B–32B 级别是针对 32 GB 显卡(实测性能区间)进行 QLoRA 调优的。如果需要根据 Biderman 2024 + Thinking Machines 2025 的研究使用 rank-256 / all-linear targets,请传入 `--lora-preset=quality`(默认);如果你需要维持 v1.2.x 的资源占用,可传入 `--lora-preset=fast` 以使用旧版的 rank-16 / q+v targets。 ## 故障排除 这里是首次运行时最常见故障的简明索引。完整的反向索引请查阅[故障排除手册页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/)。有关驱动 / VRAM / 混合精度的深入探讨,请参阅 [CUDA 故障排除页面](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/)。 | 症状 | 错误码 | 修复方法 | |---|---|---| | 训练过程中 GPU 显存溢出 | `RUNTIME_GPU_OOM` | 自动处理 —— Backpropagate 会将 batch size 减半并最多重试 3 次。如需禁用:`Trainer(oom_recovery=False)`。如需强制调小:`--batch-size 1`。 | | HuggingFace 返回 401 / "model not found" | `DEP_MODEL_LOAD_FAILED` | 执行 `huggingface-cli login` 并重试。如果是拼写错误,请从 复制准确的 ID。 | | `register_with_ollama` 连接被拒绝 | `DEP_OLLAMA_REGISTRATION_FAILED` | 启动守护进程:`ollama serve`。从 安装。可重试。 | | checkpoint 保存期间磁盘已满 | `STATE_CHECKPOINT_INVALID` | 原子写入在崩溃时会留下一个 `.partial` 目录 —— 可以安全删除。之前完好的 checkpoint 依然无损。 | | 因 GPU 过热导致训练暂停 | `RUNTIME_GPU_TEMPERATURE_CRITICAL` | 自动处理 —— Backpropagate 会在达到温度阈值时暂停,并在 GPU 冷却后恢复。如果频繁发生,请改善散热。 | | `backprop ui --share` 被拒绝 | `RUNTIME_UI_AUTH_NOT_ENFORCED` | 传入 `--auth user:password`,或改用 SSH 端口转发(参见 [Web UI](#web-ui))。 | | 首次尝试导出 GGUF 失败 | `RUNTIME_GGUF_EXPORT_FAILED` | 执行 `pip install backpropagate[export]`;在 Windows 上你还需要安装 Visual C++ Build Tools + CMake。 | ## 报告 Bug 当出现故障时,Backpropagate 会在启动时打印出类似 `run_started run_id=` 的一行信息,并将同一个 ID 绑定到每一行日志、每一个 checkpoint 以及每一次 Weights & Biases 记录中。**请在任何 Bug 报告中附上该 `run_id`** —— 它能让维护人员精确关联该次运行的所有信息。 一份优秀的 Bug 报告应包含: 1. **`run_id`** —— 启动时打印的 UUID。凭借这一个 UUID,维护人员就可以关联该次运行的每一行日志、每一个 checkpoint 以及每一条 Weights & Biases 记录。 2. **错误码** —— stderr 中的 `[CODE_NAME]: message` 行。有关稳定错误码的目录,请参阅[错误码](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/)。 3. **经过脱敏处理的 traceback。** 在非详细模式下,stderr 会自动进行脱敏处理(Bearer tokens、`sk-*`、`hf_*`、AWS keys、`password=` / `token=` / `api_key=` 等键值对都会被抹除) —— 可以安全粘贴。如需完整且未脱敏的 traceback,请在重新运行时设置 `BACKPROPAGATE_DEBUG=1`(或使用 `--verbose`);发布前请务必进行检查。 4. **`backprop info` 的输出。** 一条命令即可打印出 Python / PyTorch / CUDA / GPU 型号 / VRAM / 操作系统 / 已安装的扩展组件 —— 这些都是维护人员排查特定平台回归问题所需的全部信息。 [Bug 报告模板](https://github.com/mcp-tool-shop-org/backpropagate/issues/new?template=bug_report.yml) 会明确提示你提供上述每一项,以便加快分类处理速度。如有问题、想法或“这是预期的行为吗?”之类的讨论,请发布在 [GitHub Discussions](https://github.com/mcp-tool-shop-org/backpropagate/discussions) 中。安全问题应通过 [GitHub Security Advisory](https://github.com/mcp-tool-shop-org/backpropagate/security/advisories/new) 表单私下报告 —— 有关策略和响应时间,请参阅 [SECURITY.md](SECURITY.md)。 ## 隐私 所有训练均在你的本地 GPU 上进行。除了(由你主动发起的)从 HuggingFace 下载模型之外,Backpropagate 不会发起任何网络请求。没有遥测,不依赖云。 ## 参考文献 Backpropagate 的默认设置和多轮训练模式均建立在最新研究的基础之上。如果你对其底层技术感兴趣: - **Hu et al. 2021.** *LoRA: Low-Rank Adaptation of Large Language Models.* [arXiv:2106.09685](https://arxiv.org/abs/2106.09685) —— 提出 LoRA 的基础论文,Backpropagate 正是借此实现高效的 adapter 训练。 - **Biderman et al. 2024.** *LoRA Learns Less and Forgets Less.* [arXiv:2405.09673](https://arxiv.org/abs/2405.09673) —— 用实验证据表明,在 rank 为 256 且针对所有线性层的情况下,LoRA 能以 67% 的计算成本,在大多数训练后任务中达到与全量微调相媲美的质量。这也促成了 Backpropagate v1.3 的默认 LoRA 配置。 - **Thinking Machines 2025.** *LoRA Without Regret.* [thinkingmachines.ai/blog/lora](https://thinkingmachines.ai/blog/lora/) —— 后续的实用型研究,指出了在高 LoRA rank 下所需的“学习率相比全量 FT 需进行 10 倍修正”的调整。 - **Kirkpatrick et al. 2017.** *Overcoming catastrophic forgetting in neural networks.* [arXiv:1612.00796](https://arxiv.org/abs/1612.00796) —— 最早对神经网络在针对新数据进行微调时为何会“遗忘”早期训练(EWC —— Elastic Weight Consolidation)进行的特征描述。 - **Wang et al. 2023.** *Orthogonal Subspace Learning for Language Model Continual Learning.* [arXiv:2310.14152](https://arxiv.org/abs/2310.14152) —— O-LoRA,一种通过将新 adapter 约束在正交子空间中来使用 LoRA 进行持续学习的早期方法。 - **Yadav et al. 2023.** *TIES-Merging: Resolving Interference When Merging Models.* [arXiv:2306.01708](https://arxiv.org/abs/2306.01708) —— 一种在合并多个微调模型时消除干扰的基础技术。 - **Qiao & Mahdavi 2025.** *Merge before Forget: A Single LoRA Continual Learning via Continual Merging.* [arXiv:2512.23017](https://arxiv.org/abs/2512.23017) —— Backpropagate 的多轮合并机制所实现的具体算法。这是 2025 年 12 月的一篇预印本;Backpropagate 是已知的首个采用该论文方案的下游项目。 ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。

MCP Tool Shop 构建

标签:AI风险缓解, DLL 劫持, QLoRA, SOC Prime, VRAM优化, 凭据扫描, 大语言模型, 开发工具, 模型导出, 模型微调, 请求拦截, 逆向工具