@mcptoolshop/backpropagate 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ja.md CHANGED
@@ -15,9 +15,9 @@
15
15
  <a href="https://mcp-tool-shop-org.github.io/backpropagate/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
16
16
  </p>
17
17
 
18
- # アダプターをトレーニングします。Ollamaにデプロイします。次に進みます
18
+ # 320億パラメータのQLoRAモデル、または70億パラメータのエンドツーエンドモデルを1つのGPUで微調整します。Ollamaにデプロイします
19
19
 
20
- Backpropagateは、単一のGPUで大規模言語モデルを微調整するためのPythonライブラリです。3行のコードで、16GBのカード上で7Bモデルをトレーニングできます。さらに1つのコマンドで、微調整したモデルをOllamaにエクスポートし、`ollama run`コマンドで実行できるようにします。Windowsで最適に動作します。
20
+ 大規模言語モデルの微調整を**単一の**GPU上で実行し、実際に使用しているカードに合わせてサイズを調整します。3行のPythonコードで、70億~340億パラメータのモデルを1つの32GBのコンシューマーカード(RTX 5090)で実行できます。`--full-ft-offload`フラグを使用すると、最適化の状態をホストRAMにオフロードすることで、70億パラメータ規模のモデルを完全に微調整できます。さらにコマンドを実行してOllamaにエクスポートし、`ollama run`で微調整したモデルを実行します。16GBまでスムーズにスケールダウンできます。Windowsでも優れたパフォーマンスを発揮します。
21
21
 
22
22
  ```python
23
23
  from backpropagate import Trainer
@@ -69,33 +69,38 @@ Backpropagateは、不足している選択肢です。**単一のコンシュ
69
69
 
70
70
  上記のいずれかのライブラリを試して、設定ファイルの操作に苦労したり、モデルファミリーの制限に遭遇したり、Windowsを優先するデフォルト設定が必要になった場合は、Backpropagateが最適です。
71
71
 
72
- ## 16GBのコンシューマーGPUで微調整できること
72
+ ## 1つのGPUで微調整できるもの
73
73
 
74
- 16GBのカード(RTX 4080 / 5080 / 4070 Ti Super)で実際に使用できる範囲は次のとおりです。
74
+ Backpropagateは、実行に必要なリソースをカードに合わせて調整します。以下は、64GBのホストRAMを備えた**32GB**のコンシューマーGPU(RTX 5090)での実用的な上限です。
75
75
 
76
- | モデル | 方法 | 状態 |
76
+ | モデルサイズ | 方法 | 32GBカードでの状況 |
77
77
  |---|---|---|
78
- | Qwen-3.5-4B / Phi-4-mini-3.8B / SmolLM3-3B | LoRA / QLoRA / DoRA | 快適。完全なシーケンス長で、余裕があります。 |
79
- | SmolLM3-3B / Qwen2.5-3B / Llama-3.2-3B / Llama-3.2-1B | `mode="full"`(完全な微調整) | v1.4`backprop train`コマンドまたは`Trainer(..., mode="full")`で`--mode=full`を指定します。完全な精度(bf16)の重みをロードします。4ビット、アダプターは使用しません。勾配チェックポイントとページ化された8ビットAdamにより、フットプリントを16GB以内に収めることができます。 |
80
- | Qwen-2.5-7B / Llama-3.1-8B / Mistral-7B | QLoRA | 標準。約7〜8GB。Backpropagateのデフォルトプリセット。 |
81
- | Llama-3 13B | QLoRA + サンプルパッキング | ぎりぎりですが、動作します。短いシーケンスを使用してください。 |
82
- | Mixtral 8x7B(合計470億パラメータ) | | 範囲外2ビット(AQLM / QuIP#)は、マージ可能なアダプターとGGUFエクスポートの契約を破るため、[v1.5の概要](docs/V1_5_BRIEF.md)で廃止されました。16GBのカードでは、≤8Bのベースモデルを使用してください。 |
78
+ | 70億パラメータ(Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | QLoRA | 快適に動作します。約7~8GBを使用し、十分な余裕があります。完全なシーケンス長で実行できます。 |
79
+ | **140億パラメータ(Qwen2.5-14B)** | QLoRA | **日常的な使用に最適なサイズ約8.5GB**。rank/alpha 32、ページングされた8ビットAdamW、4096のコンテキスト長で測定。 |
80
+ | 240億パラメータ(Mistral-Small-24B) | QLoRA | 約18GBを使用します。4096のコンテキスト長で実行しても余裕があります。 |
81
+ | **320億パラメータ(Qwen2.5-32B)** | QLoRA | **ギリギリ動作するサイズ `max_len 2048` + ページングされた8ビットAdamWで約26GB**。上限に近い状態です。 |
82
+ | 60億パラメータ以下 | `mode="full"`(完全な微調整) | GPUのみを使用した完全な微調整bf16の重みを使用し、アダプターは使用しません。32GBでは、カードがサポートできる上限は60億パラメータです。 |
83
+ | **70億パラメータ規模(Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B)** | `mode="full" --full-ft-offload` | **FSDP2を使用したCPUオフロードによる完全な微調整** — パラメータと最適化の状態を64GBのホストRAMにオフロードします。速度は遅くなります(帯域幅がボトルネック)。Linux/WSL2でのみ動作します。 |
83
84
 
84
- `mode="full"`は、最大**40億パラメータ**のモデルをサポートします。上記の完全な微調整行にある4つのプリセットは、実際には約30億(実際のパラメータ数は3.08〜3.24億)であり、16GBのカードに適合します。3.8〜40億のクラス(Phi-4-mini-3.8B、Qwen-3.5-4B)も上限に達しますが、完全な微調整には**24GB以上の**カードが必要です。重みと勾配だけでも16GBに近づき、オプティマイザーと活性化も考慮する必要があります。そのため、16GBのカードでは、これらのモデルに対して`mode="lora"`を使用してください(LoRA行にあります)。40億を超えるモデルは、`RUNTIME_FULL_FT_MODEL_TOO_LARGE`というエラーで終了します。
85
+ ほとんどの単一GPUライブラリでは、**24~340億パラメータのQLoRA**と**単一カードでの70億パラメータ規模の完全な微調整**のために別の場所に誘導しますが、Backpropagateはこれらを1つのコンシューマーカードで実行し、結果をOllamaに直接エクスポートします。
85
86
 
86
- 2ビット量子化(AQLM / QuIP#)は、**範囲外**です。[v1.4で検討された後、[v1.5の概要](docs/V1_5_BRIEF.md)で廃止されました。2ビットのベースモデルを、完全な精度の重みにクリーンにマージすることはできません。これにより、Backpropagateのマージ可能なアダプター→GGUF→Ollamaエクスポートの契約(パイプラインの目的)が破られます。代わりに、Backpropagateが提供するヘッドルームは、v1.5の**FP8コンピューティングパス**(`--fp8`、Blackwell / Hopper)と、≤40億のモデルに対する`mode="full"`です。どちらもマージ可能で、エクスポート可能です。
87
+ **完全な微調整の上限は、カードに合わせて調整されます。** これは、4つの要素(重み + 勾配 + 最適化器 + 活性化)のトレーニングメモリ計算に基づいており、*検出された*VRAMに対して行われます。**16GB → 40億パラメータ、24GB → 50億パラメータ、32GB → 60億パラメータ**がGPUのみで使用できる上限です。`--full-ft-offload`を使用すると、パラメータと最適化の状態をFSDP2の`fully_shard` + `CPUOffloadPolicy`を通じてホストRAMにオフロードすることで、**70億パラメータ規模**まで拡張できます(速度は遅くなり、PCIe/CPU帯域幅がボトルネックになります。約64GBのホストRAMとNCCLバックエンドが必要です。つまり、Linux/WSL2でのみ動作します)。`--full-ft-ceiling-billions`を使用して、上限を明示的にオーバーライドできます。モデルがオフロードの上限を超える場合、`RUNTIME_FULL_FT_MODEL_TOO_LARGE`というエラーが発生し、回復方法(`--full-ft-offload`またはLoRA/QLoRA)が表示されます。[完全な微調整に関するハンドブック](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/)を参照して、VRAMの計算とBiderman 2024 / Thinking Machines 2025による品質比較を確認してください。
87
88
 
88
- 30億以下のモデルの場合、16GBで完全な微調整(LoRAだけでなく)が可能になり、v1.4で`mode="full"`として提供されます。`Trainer(..., mode="full")`または`backprop train --mode=full --model phi-4-mini-3.8b`を指定して有効にします。40億を超えるモデルの場合、`RUNTIME_FULL_FT_MODEL_TOO_LARGE`というエラーが発生し、LoRAと40億以下のプリセットが代替手段として提案されます。構成の計算と、Biderman 2024 / Thinking Machines 2025による品質比較については、[完全な微調整のハンドブック](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/)をご覧ください。70億以上のモデルの場合、完全な微調整には24GB以上のGPUが必要です。A100クラウドレンタルを検討するか、最新の研究では、ほとんどのポストトレーニングタスクで完全な微調整の品質に匹敵することが示されているため、LoRAを使用してください([アンチピッチセクション](#what-backpropagate-is-not-for)に参考文献を参照)。
89
+ ### 16GBまでスケールダウン可能
90
+
91
+ 16GB(RTX 4080 / 5080 / 4070 Ti Super)の環境でも優れたパフォーマンスを発揮します。70億パラメータのQLoRAは約7~8GBを使用し、真の完全な微調整を約30億パラメータ(SmolLM3-3B、Qwen2.5-3B、Llama-3.2-3B/1B)に対して16GB内で`mode="full"`を使用して実行できます(bf16の重み + 勾配チェックポイント + ページングされた8ビットAdamW)。同じコードは、検出されたカードに合わせてバッチサイズと完全な微調整の上限を自動的に選択します。設定を変更する必要はありません。
92
+
93
+ 2ビット量子化(AQLM / QuIP#)は**対象外**です — 2ビットのベースモデルを完全に精度の高い重みにクリーンにマージすることはできず、マージ可能なアダプター → GGUF → Ollamaのエクスポートという一連の流れが中断されます(このパイプライン全体の目的)。Backpropagateでは、代わりにQLoRA、`mode="full"`、`--full-ft-offload`、およびFP8計算パス(`--fp8`、Blackwell/Hopper)などの機能を提供し、これらはすべてマージ可能でエクスポート可能です。
89
94
 
90
95
  ## Backpropagateが適さない場合
91
96
 
92
97
  以下のユースケースに該当する場合は、別のライブラリを使用する方が良い結果が得られます。Backpropagateは適切な選択肢ではなく、無理に使用しようとすると、適切なツールを選択するよりも多くの労力がかかります。インストールを開始する前に、このセクションを読んでください。
93
98
 
94
- - **7B以上のモデルに対するフルパラメータのファインチューニング**BackpropagateはLoRA / QLoRAを使用し、すべての重みを更新するのではなく、小さなアダプターをトレーニングします。7B以上のモデルの場合、フルファインチューニングには24GB以上のGPUメモリが必要であり、16GBのコンシューマーカードでは実行できません。3B以下のモデルの場合、16GBでフルファインチューニングが可能であり、v1.4で`mode="full"`として提供されます(CLIで`Trainer(..., mode="full")`または`--mode=full`を渡します。4Bを超えるモデルの場合、ハードゲートが`RUNTIME_FULL_FT_MODEL_TOO_LARGE`を発生させ、LoRAと4B未満のプリセットをリカバリとして指定します)。より大きな視点として、最近の研究([Biderman 2024](https://arxiv.org/abs/2405.09673)、[Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/))は、適切な設定のLoRAが、ほとんどのポストトレーニングタスク(指示への従順、ドメインへの適応、ペルソナ/スタイル)において、フルファインチューニングの品質に匹敵し、計算コストは67%で済むことを示しています。したがって、ほとんどのオペレーターが実際に求める作業においては、LoRAを使用し続けることで何も失うことはありません。`mode="full"`は、品質の差を測定し、追加の計算コストを費やすことを決定した場合に使用します。7B以上のモデルのフルファインチューニングを本当に必要とする場合は、HuggingFaceの`transformers.Trainer`を24GB以上のカードで直接使用してください。
95
- - **オンラインRL — PPO / GRPO / RLVR** — Backpropagateは、単一ステージのSFTと参照なしの優先度調整(ORPOv1.5で提供され、SimPO / KTOは計画中)を実行します。実行しないのは、PPO、GRPO、またはRLVRなどのオンライン強化学習です。これには、報酬モデルまたはトレーニングステップの上に生成とスコアリングのループが必要です。これらの場合は、TRLまたはLLaMA-Factoryを直接使用してください。(参照なしの優先度調整は、単一ステージの範囲に適合します。なぜなら、メモリに保持する必要のある個別の参照モデルがないからです。詳細は、[クイックスタート](#quick-start)のORPOの注記を参照してください。)
96
- - **マルチノードトレーニング** — 単一のGPUを1つのマシンでのみ使用します。1つのマシンでのマルチGPUは機能しますが、公式にはサポートされていません(`accelerate launch`経由)。
97
- - **CUDAレール上のmacOSトレーニング** — Apple SiliconにはCUDAがないため、CUDAパスは、NVIDIA GPUを搭載したLinuxまたはWindowsマシンで実行する必要があります。トレーニングされたモデルは、Ollamaを介してMacで引き続き実行できます。**v1.5の新機能:** 実験的なMLXレール(`--backend mlx`)は、Apple Silicon上でLoRAアダプターをネイティブにトレーニングします。詳細は、[Apple SiliconMLX](#apple-silicon-mlx--experimental-v15)を参照してください。これはLoRA-SFTのみであり、実際のシリコン上で構築および検証されていますが、まだ完全に検証されていません。したがって、LoRA SFTORPO、フルファインチューニング、FP8、マルチラン)以外のものについては、引き続きCUDAレールを使用することをお勧めします。
98
- - **テストされたモデルファミリー以外のもの** — Qwen 2.5 / 3.57B / 4B)、Phi-4-mini-3.8BSmolLM3-3BLlama 3.23B / 1B)、Mistral 7B。他のモデルも多くの場合機能しますが、CIでは固定されていません。
99
+ - **フルパラメータの微調整を、オフロードの上限を超えて行う(約13B以上)**最大で**〜6GBの純粋なGPUと〜7Bクラスを`--full-ft-offload`オプションを使用して、32GBのカード上で実行し、フル微調整を行う**([この範囲](#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%で済む。したがって、最大34Bまで可能なQLoRAは、Backpropagateが単一のカード上で実行する場合、ほとんどのユーザーが求めるタスクに対してパフォーマンスを損なうことはない。
100
+ - **オンライン強化学習 — PPO / GRPO / RLVR** — Backpropagateは、シングルステージSFTと参照不要の嗜好調整(v1.5ではORPOv1.6ではSimPO + KTO)を実行する。ただし、オンライン強化学習—PPO、GRPO、またはRLVR—は実行しない。これらは、報酬モデルまたはトレーニングステップに加えて、生成とスコアリングを行うループを必要とする。これらの場合は、TRLを直接使用するか、LLaMA-Factoryを使用する(参照不要の嗜好調整は、メモリ内に保持する必要のある個別の参照モデルがないため、シングルステージの範囲に適合する。詳細は[Quick Start](#quick-start)のORPOに関する注を参照)。
101
+ - **マルチノードトレーニング** — 単一のマシン上の単一GPUのみ。単一のマシン上で複数のGPUを使用することも可能(`accelerate launch`経由)だが、公式にはサポートされていない。
102
+ - **CUDA環境でのmacOSトレーニング** — Apple SiliconCUDAをサポートしていないため、CUDAパスはNVIDIA GPUを備えたLinuxまたはWindowsマシンで実行される。ただし、トレーニングされたモデルはOllamaを使用してMac上で引き続き実行できる。**実験的で検証されていないMLXレール(`--backend mlx`)**を使用すると、Apple Silicon上でLoRAアダプターをネイティブにトレーニングできる([Apple Silicon (MLX)](#apple-silicon-mlx--unverified-preview)を参照)。これはLoRA-SFTのみであり、**実際のシリコン上での検証は行われていない**(サポートなし)ため、LoRA SFT以外のタスク(ORPO、フル微調整、FP8、複数回の実行など)にはCUDAレールを使用する必要がある。
103
+ - **テストされたモデルファミリー外のモデル** — Qwen 2.5 / 3.5 (7B / 4B), Phi-4-mini-3.8B, SmolLM3-3B, Llama 3.2 (3B / 1B), Mistral 7B。他のモデルも多くの場合動作するが、CIで固定されていない。
99
104
 
100
105
  これらの機能が必要な場合は、上記のライブラリのいずれかを使用してください。それらの機能により優れています。
101
106
 
@@ -145,7 +150,7 @@ trainer.export('gguf', quantization='q4_k_m')
145
150
 
146
151
  Alpaca(`instruction` / `output`)、OpenAIチャット(`messages`)、および生のテキスト形式も機能します。Backpropagateは、形式を自動的に検出します。
147
152
 
148
- ### 優先度調整(ORPO)
153
+ ### 嗜好性チューニング(ORPO、SimPO、KTO
149
154
 
150
155
  v1.5の新機能:プレーンなデモンストレーションではなく、優先度に基づいてトレーニングします。ORPOは参照なしで、単一ステージです。優先度のシグナルをSFTステップに組み込むため、個別の報酬モデルや参照モデルはなく、3行の構造は変わりません。`--method orpo`(CLI)または`method="orpo"`(Python)を渡し、`{prompt, chosen, rejected}`(または`{chosen, rejected}`のみ)の行のデータセットを渡します。
151
156
 
@@ -166,13 +171,17 @@ trainer.export("gguf", quantization="q4_k_m")
166
171
  backprop train --data preferences.jsonl --method orpo --steps 100
167
172
  ```
168
173
 
169
- デフォルトの学習率は、ORPO(損失が単純なSFTよりも鋭い)に対して自動的に `8e-6` に低下します。`--orpo-beta`(デフォルトは `0.1`)を調整して、オッズ比ペナルティの重みを調整します。v1.5では、ORPOは `mode="lora"` のみです。SimPOとKTOは今後の計画です。オンラインRL(PPO/GRPO)については、[What Backpropagate is NOT for](#what-backpropagate-is-not-for) を参照してください。
174
+ デフォルトの学習率は、ORPOに対して自動的に`8e-6`まで低下します(損失は単純なSFTよりも急峻です)。オッズ比ペナルティの重みを調整するために、`--orpo-beta`(デフォルトは`0.1`)を調整してください。ORPOは`mode="lora"`でのみ使用できます。
175
+
176
+ **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ペアではない大規模なフィードバックのクラスに対して、サンプルごとの肯定/否定の評価を行います。また、ラベル数に基づいて、望ましい/望ましくない損失の重みを自動的に調整します。どちらも`mode="lora"`でのみ使用でき、単一GPU SFT環境に留まります(個別の参照モデルは使用しません)。どの方法を使用するかについては、[嗜好性チューニングハンドブック](https://mcp-tool-shop-org.github.io/backpropagate/handbook/preference-tuning/)を参照してください。オンラインRL(PPO/GRPO)については、[Backpropagateが適さない理由](#what-backpropagate-is-not-for)をご覧ください。
170
177
 
171
178
  ### 推論トレースSFT(R1蒸留)
172
179
 
173
180
  v1.5の新機能:推論モデルを簡単に蒸留します。`--reasoning-trace`(CLI)または `Trainer(..., reasoning_trace=True)`(Python)を渡し、アシスタントの応答内に `<think>...</think>` の連鎖的な思考を保持するトレースを入力します。これは、[DeepSeek-R1](https://arxiv.org/abs/2501.12948) 蒸留の純粋なSFT部分であり、RLは必要ありません。バックプロパゲーションは `<think>` をトレーニングターゲットに保持し、空の/長すぎるトレースを削除(トレース長フィルタリング)、およびより長いCoTのためにデフォルトの `max_seq_length` を8192に引き上げます。重要な点として、`<think>` は **プレーンテキスト** のままです。特別なトークンや、埋め込みのリサイズは行われません。そのため、マージされたGGUFは、他のファインチューンと同様にOllamaにエクスポートできます。SFTのみです。データセットの形状と調整可能なトークンバンドについては、[reasoning-trace recipe](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/#reasoning-trace-sft-r1-distillation) を参照してください。
174
181
 
175
- ### Apple SiliconMLX)—実験的、v1.5
182
+ ### Apple Silicon (MLX) — 検証されていないプレビュー
183
+
184
+ > ⚠️ **検証されていないプレビュー — サポートされている機能セットの一部ではない。** MLXレールは構築され、ユニットテストも行われているが、**実際のApple Silicon上での検証(`mlx-lm`はApple専用であり、Backpropagateの開発に使用されるNVIDIAリグでは実行できない)は行われていない**。以下すべてを実験的なものとして扱い、自己責任で使用し、MシリーズのMacで実行した場合は[バグ報告](#reporting-bugs)を行うこと。
176
185
 
177
186
  v1.5の新機能:**1つのAPI、2つのレール。** CUDAは、引き続き標準で検証済みのバックエンドです。MLXは、Appleの [`mlx_lm.lora`](https://github.com/ml-explore/mlx-lm) ツールチェーンを介して、MシリーズMacでトレーニングを行う2番目のレールです(統合メモリ、CUDAは不要)。同じ3行のコードで、ハードウェアによってレールを選択します。`backend='auto'`(デフォルト)は、NVIDIAではCUDAに、Apple SiliconではMLXにルーティングするため、既存のCUDA環境はバイト単位で同一です。
178
187
 
@@ -190,7 +199,7 @@ backprop train --data my_data.jsonl --backend mlx --steps 100
190
199
 
191
200
  v1.5では、MLXレールは **LoRA SFTのみ** です。ORPO、FP8、`mode='full'`、MLXでのマルチランはまだサポートされていません(それぞれ `CONFIG_INVALID_SETTING` で拒否されます。それらの機能を使用する場合は、NVIDIA環境で `backend='cuda'` / `'auto'` を使用してください)。結果として得られるアダプターは、プレーンなsafetensorsであり、CUDAレールと同じパスを通じてOllamaにエクスポートされます。
192
201
 
193
- > ⚠️ **正直な状況:** MLXレールはv1.5に **構築およびユニットテスト済み(モック)** として含まれていますが、**まだ実際のApple Siliconでドッグフード検証されていません**。`mlx-lm` はApple専用であり、このソフトウェアが作成されたNVIDIA環境では実行できません。実験的なものとして扱い(FP8パスと同じ)、MシリーズMacで実行した後に、[バグの報告](#reporting-bugs) をお願いします。Apple以外のホストで `--backend mlx` を強制すると、`CONFIG_INVALID_SETTING` エラーが発生します。Macに `mlx_lm` ツールチェーンがない場合、`DEP_MLX_UNAVAILABLE` が発生します。
202
+ > `--backend mlx`をApple以外のホストに強制的に適用すると、`CONFIG_INVALID_SETTING`エラーが発生する。Mac上に`mlx_lm`ツールチェーンがない場合、`DEP_MLX_UNAVAILABLE`エラーが発生する。
194
203
 
195
204
  よりエンドツーエンドのワークフロー(ファインチューンとHF Hubへのプッシュ、OOM後の再開、長期間のキャンペーンにおけるマルチランSLAOなど)については、[ハンドブックのレシピページ](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/) を参照してください。
196
205
 
@@ -303,7 +312,7 @@ UIからのファイルシステムへの書き込みは、単一のディレク
303
312
 
304
313
  **要件:** Python 3.10+、CUDA GPU(8GB以上のVRAM)、PyTorch 2.0+
305
314
 
306
- Python 3.10は、2026年10月にサポートが終了し、v1.5で廃止される予定です。新しいインストールの場合、Python 3.11または3.12を推奨します。3.11は最もテストされたバージョンです。
315
+ Python 3.10は少なくともv1.6までサポートされます。2026年10月にアップストリームのサポートが終了し、その後最初のリリースで削除される予定です。新しいインストールでは、Python 3.11または3.12を推奨します。3.11は最もテストされたバージョンです。
307
316
 
308
317
  Backpropagateは、さまざまなプラットフォームでのトレーニングにおける実行時の癖に対処しますが、インストール時の問題を修正することはできません。最も一般的な問題は次の2つです。
309
318
 
@@ -362,8 +371,12 @@ backprop export-runs --format jsonl # bulk export run history
362
371
  | Llama 3.2 3B | 約8GB | Llama Community | Qwen 3Bの優れた代替手段で、許可に関する制限があります。 |
363
372
  | Llama 3.2 1B | 約6GB | Llama Community | 小さなカードで迅速な実験を行うためのものです。 |
364
373
  | Mistral 7B | 約12GB | Apache 2.0 | Qwen 7Bと同等で、異なるチャットテンプレートを使用します。 |
374
+ | Llama-3.1-8B | 〜7〜8GB(QLoRA) | Llama-3.1-Community | 8B QLoRA、128Kのネイティブコンテキスト(>700M-MAU条項には、別途Metaライセンスが必要)。 |
375
+ | **Qwen2.5-14B** | 〜8.5GB(QLoRA) | Apache 2.0 | **32GBのカードで最適なパフォーマンスを発揮するポイント** — ランク/アルファ32、ページングされた8ビットAdamW、4096 ctx。 |
376
+ | Mistral-Small-24B | 〜18GB(QLoRA) | Apache 2.0 | 4096-ctxの余裕がある状態で、32GBのカード上で24B QLoRAを実行。 |
377
+ | **Qwen2.5-32B** | 〜26GB(QLoRA) | Apache 2.0 | **32GBの範囲で最大限に活用できる設定** — `max_len 2048` + ページングされた8ビットAdamWで、ギリギリ収まる。 |
365
378
 
366
- 他のモデルも動作する場合がありますが、これらの8つだけがCIで固定されています。`--lora-preset=quality`(デフォルト)を渡すと、Biderman 2024 + Thinking Machines 2025のランク256 / すべての線形ターゲットが使用されます。v1.2.xのフットプリントが必要な場合は、`--lora-preset=fast`を渡すと、従来のランク16 / q+vターゲットが使用されます。
379
+ 他のモデルも多くの場合動作する。上記の行は、調整済みのプリセットである。14B〜32Bの範囲は、32GBのカード用にQLoRAが調整されている(測定された範囲)。Biderman 2024 + Thinking Machines 2025に従い、ランク256 / すべての線形ターゲットに対して`--lora-preset=quality`(デフォルト)を渡すか、v1.2.xのフットプリントが必要な場合は、レガシーのランク16 / q+vターゲットに対して`--lora-preset=fast`を渡す。
367
380
 
368
381
  ## トラブルシューティング
369
382
 
package/README.md CHANGED
@@ -15,9 +15,9 @@
15
15
  <a href="https://mcp-tool-shop-org.github.io/backpropagate/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
16
16
  </p>
17
17
 
18
- # Train an adapter. Ship it to Ollama. Move on.
18
+ # Fine-tune a 32B QLoRA — or a 7B end to end — on one GPU. Ship it to Ollama.
19
19
 
20
- Backpropagate is a Python library for fine-tuning large language models on a single GPU. Three lines of code train a 7B model on a 16GB card. One more command exports it to Ollama so you can `ollama run` your finetune. Works first-class on Windows.
20
+ Backpropagate fine-tunes large language models on a **single** GPU, sized for the card you actually have. Three lines of Python QLoRA a 7B–34B model on one 32 GB consumer card (RTX 5090); one flag — `--full-ft-offload` — full-fine-tunes a 7B-class model by spilling the optimizer state to host RAM. One more command exports to Ollama, then `ollama run` your finetune. Scales cleanly down to 16 GB. First-class on Windows.
21
21
 
22
22
  ```python
23
23
  from backpropagate import Trainer
@@ -69,32 +69,37 @@ Backpropagate is the missing option: **a 3-line Python API for solo operators on
69
69
 
70
70
  If you tried one of the libraries above and bounced off the config-file ceremony, or hit a model-family gap, or wanted Windows-first defaults — Backpropagate is for you.
71
71
 
72
- ## What you can fine-tune on a 16GB consumer GPU
72
+ ## What you can fine-tune on one GPU
73
73
 
74
- Here's the practical envelope on a 16GB card (RTX 4080 / 5080 / 4070 Ti Super):
74
+ Backpropagate sizes the run to your card. Here's the practical envelope on a **32 GB** consumer GPU (RTX 5090) with 64 GB host RAM — the rig it's tuned on:
75
75
 
76
- | Model | Method | Status |
76
+ | Model size | Method | Status on a 32 GB card |
77
77
  |---|---|---|
78
- | Qwen-3.5-4B / Phi-4-mini-3.8B / SmolLM3-3B | LoRA / QLoRA / DoRA | Comfortable. Full sequence length, room to spare. |
79
- | SmolLM3-3B / Qwen2.5-3B / Llama-3.2-3B / Llama-3.2-1B | `mode="full"` (full fine-tuning) | v1.4pass `--mode=full` on `backprop train` or `Trainer(..., mode="full")`. Loads full-precision (bf16) weights — no 4-bit, no adapter; gradient checkpointing + paged 8-bit Adam keep the footprint inside 16GB. |
80
- | Qwen-2.5-7B / Llama-3.1-8B / Mistral-7B | QLoRA | Standard. ~7-8 GB. Backpropagate's default presets. |
81
- | Llama-3 13B | QLoRA + sample packing | Tight but works. Use shorter sequences. |
82
- | Mixtral 8x7B (47B total parameters) | | Out of scope 2-bit (AQLM / QuIP#) breaks the mergeable-adapter + GGUF-export contract, so it was retired in the [v1.5 trajectory brief](docs/V1_5_BRIEF.md). On a 16GB card, use a ≤8B base. |
78
+ | 7B (Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | QLoRA | Comfortable ~7–8 GB. Full sequence length, lots of headroom. |
79
+ | **14B** (Qwen2.5-14B) | QLoRA | **The daily-driver sweet spot~8.5 GB** measured. rank/alpha 32, paged 8-bit AdamW, 4096 ctx. |
80
+ | 24B (Mistral-Small-24B) | QLoRA | ~18 GB. Fits with headroom at 4096 ctx. |
81
+ | **32B** (Qwen2.5-32B) | QLoRA | **Just fits ~26 GB** at `max_len 2048` + paged 8-bit AdamW. Top of the envelope. |
82
+ | ≤6B | `mode="full"` (true full fine-tuning) | Pure-GPU full FTbf16 weights, no adapter. The card-aware ceiling is 6B on 32 GB. |
83
+ | **7B-class** (Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | `mode="full" --full-ft-offload` | **Full fine-tuning via FSDP2 CPU-offload** — spills params + optimizer to 64 GB host RAM. Slower (bandwidth-bound); Linux/WSL2. |
83
84
 
84
- `mode="full"` admits models up to **4B parameters**. The four presets in the full-FT row above are genuine ~3B (true parameter count 3.08–3.24B) and fit a 16GB card. The 3.8–4B class (Phi-4-mini-3.8B, Qwen-3.5-4B) is also accepted by the ceiling but needs a **24GB+** card for full FT weights + gradients alone approach 16GB before the optimizer and activations — so on a 16GB card use `mode="lora"` for those (they're in the LoRA row). Models >4B exit with `RUNTIME_FULL_FT_MODEL_TOO_LARGE`.
85
+ Two things most single-GPU libraries send you elsewhere for **24–34B QLoRA** and **single-card 7B-class full fine-tuning** — Backpropagate does on one consumer card, then exports the result straight to Ollama.
85
86
 
86
- 2-bit quantization (AQLM / QuIP#) is **out of scope**. It was scoped for v1.4, then retired in the [v1.5 trajectory brief](docs/V1_5_BRIEF.md): a 2-bit base can't be cleanly merged back into full-precision weights, which breaks Backpropagate's mergeable-adapter GGUF Ollama export contract (the whole point of the pipeline). The headroom levers Backpropagate ships instead are the v1.5 **FP8 compute path** (`--fp8`, Blackwell/Hopper) and `mode="full"` for ≤4B models both stay mergeable and exportable.
87
+ **The full-FT ceiling is card-aware.** It's derived from the 4-addend training-memory arithmetic (weights + gradients + optimizer + activations) against your *detected* VRAM: **16 GB 4B, 24 GB 5B, 32 GB 6B** pure-GPU. `--full-ft-offload` lifts it to **7B-class** by spilling params + optimizer state into host RAM via FSDP2 `fully_shard` + `CPUOffloadPolicy` (slower, PCIe/CPU-bandwidth-bound; needs ~64 GB host RAM and an NCCL backend, i.e. Linux/WSL2). Override the ceiling explicitly with `--full-ft-ceiling-billions`. A model past even the offload ceiling exits with `RUNTIME_FULL_FT_MODEL_TOO_LARGE`, naming the recovery (`--full-ft-offload`, or LoRA/QLoRA). See [the full fine-tuning handbook page](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/) for the VRAM math + the Biderman 2024 / Thinking Machines 2025 quality comparison.
87
88
 
88
- For models 3B and smaller, full fine-tuning (not just LoRA) is feasible on 16GB and now ships in v1.4 as `mode="full"`. Pass `Trainer(..., mode="full")` or `backprop train --mode=full --model phi-4-mini-3.8b` to enable it. A hard gate refuses the mode for models > 4B with `RUNTIME_FULL_FT_MODEL_TOO_LARGE`, naming LoRA + the sub-4B presets as the recovery options. See [the full fine-tuning handbook page](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/) for the configuration math + Biderman 2024 / Thinking Machines 2025 quality comparison. For 7B+ models, full fine-tuning needs a 24GB+ GPU — consider an A100 cloud rental, or stick with LoRA, which recent research shows matches full fine-tuning quality on most post-training tasks anyway (see [the anti-pitch section](#what-backpropagate-is-not-for) for citations).
89
+ ### Scales down to 16 GB
90
+
91
+ The 16 GB envelope (RTX 4080 / 5080 / 4070 Ti Super) is still first-class: 7B QLoRA at ~7–8 GB, and true full fine-tuning of a genuine ~3B (SmolLM3-3B, Qwen2.5-3B, Llama-3.2-3B/1B) inside 16 GB via `mode="full"` (bf16 weights + gradient checkpointing + paged 8-bit AdamW). The same code picks the batch size and full-FT ceiling that fit whatever card it detects — no flags to change between rigs.
92
+
93
+ 2-bit quantization (AQLM / QuIP#) stays **out of scope** — a 2-bit base can't be cleanly merged back into full-precision weights, which breaks the mergeable-adapter → GGUF → Ollama export contract (the whole point of the pipeline). The headroom levers Backpropagate ships instead — QLoRA, `mode="full"`, `--full-ft-offload`, and the FP8 compute path (`--fp8`, Blackwell/Hopper) — all stay mergeable and exportable.
89
94
 
90
95
  ## What Backpropagate is NOT for
91
96
 
92
97
  If your use case is below, you'll have a better time with a different library — Backpropagate is not the right pick and trying to make it work would cost more than just reaching for the right tool. Reading this section before you start saves the install-and-bounce cycle:
93
98
 
94
- - **Full-parameter fine-tuning of 7B+ models** — Backpropagate uses LoRA / QLoRA, which trains a small adapter rather than updating every weight. For models 7B and larger, full fine-tuning needs 24GB+ of GPU memory and doesn't fit on a 16GB consumer card. For models 3B and smaller, full fine-tuning IS feasible on 16GB and ships in v1.4 as `mode="full"` (pass `Trainer(..., mode="full")` or `--mode=full` on the CLI; a hard gate raises `RUNTIME_FULL_FT_MODEL_TOO_LARGE` for models > 4B and names LoRA + the sub-4B presets as recoveries). The bigger picture: recent research ([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/)) shows that LoRA at correct configuration matches full fine-tuning quality on most post-training tasks (instruction-following, domain adaptation, persona/style) at 67% of the compute — so for the work most operators actually want, you don't lose anything by sticking with LoRA. `mode="full"` exists for the cases where you've measured a quality gap and decided to spend the extra compute. If you genuinely need full fine-tuning of a 7B+ model, use HuggingFace `transformers.Trainer` directly on a 24GB+ card.
95
- - **Online RL — PPO / GRPO / RLVR** — Backpropagate does single-stage SFT plus reference-free preference tuning (ORPO ships in v1.5; SimPO/KTO are planned). What it does *not* do is online reinforcement learning — PPO, GRPO, or RLVR — which needs a reward model or a generation-and-scoring loop on top of the training step. For those, use TRL directly or LLaMA-Factory. (Reference-free preference tuning fits the single-stage envelope because there's no separate reference model to hold in memory; see the ORPO note under [Quick Start](#quick-start).)
99
+ - **Full-parameter fine-tuning past the offload ceiling (≈13B+)** — Backpropagate full-fine-tunes up to **~6B pure-GPU and ~7B-class via `--full-ft-offload`** on a 32 GB card (see [the envelope](#what-you-can-fine-tune-on-one-gpu)). A *true full* fine-tune of a 13B+ model is past that it wants multi-GPU FSDP or a bigger card (reach for `transformers.Trainer` across multiple GPUs, or rent an A100/H100). Before spending that compute, though: recent research ([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/)) shows LoRA at correct configuration matches full fine-tuning quality on most post-training tasks (instruction-following, domain adaptation, persona/style) at ~67% of the compute — so QLoRA up to 34B, which Backpropagate does on one card, loses nothing for the work most operators actually want.
100
+ - **Online RL — PPO / GRPO / RLVR** — Backpropagate does single-stage SFT plus reference-free preference tuning (ORPO in v1.5; SimPO + KTO in v1.6). What it does *not* do is online reinforcement learning — PPO, GRPO, or RLVR — which needs a reward model or a generation-and-scoring loop on top of the training step. For those, use TRL directly or LLaMA-Factory. (Reference-free preference tuning fits the single-stage envelope because there's no separate reference model to hold in memory; see the ORPO note under [Quick Start](#quick-start).)
96
101
  - **Multi-node training** — single GPU on one machine only. Multi-GPU on one machine works (via `accelerate launch`) but isn't officially supported.
97
- - **macOS training on the CUDA rail** — Apple Silicon doesn't have CUDA, so the CUDA path has to run on a Linux or Windows box with an NVIDIA GPU. You can still run the trained model on a Mac via Ollama. **New in v1.5:** an experimental MLX rail (`--backend mlx`) trains a LoRA adapter natively on Apple Silicon — see [Apple Silicon (MLX)](#apple-silicon-mlx--experimental-v15). It is LoRA-SFT-only and built-but-not-yet-dogfood-verified on real silicon, so for anything beyond a LoRA SFT (ORPO, full fine-tune, FP8, multi-run) you still want the CUDA rail.
102
+ - **macOS training on the CUDA rail** — Apple Silicon doesn't have CUDA, so the CUDA path runs on a Linux or Windows box with an NVIDIA GPU. You can still run the trained model on a Mac via Ollama. An **experimental, unverified-preview** MLX rail (`--backend mlx`) trains a LoRA adapter natively on Apple Silicon — see [Apple Silicon (MLX)](#apple-silicon-mlx--unverified-preview). It is LoRA-SFT-only and **not dogfood-verified on real silicon** (no support), so for anything beyond a LoRA SFT (ORPO, full fine-tune, FP8, multi-run) you want the CUDA rail.
98
103
  - **Anything outside the tested model families** — Qwen 2.5 / 3.5 (7B / 4B), Phi-4-mini-3.8B, SmolLM3-3B, Llama 3.2 (3B / 1B), Mistral 7B. Other models often work but aren't pinned in CI.
99
104
 
100
105
  If you need any of those things, reach for one of the libraries listed above. They're better at them.
@@ -145,9 +150,9 @@ This trains a Qwen 2.5 7B adapter on 5 short ShareGPT-format conversations, then
145
150
 
146
151
  Alpaca (`instruction` / `output`), OpenAI chat (`messages`), and raw text formats also work — Backpropagate auto-detects the format.
147
152
 
148
- ### Preference tuning (ORPO)
153
+ ### Preference tuning (ORPO, SimPO, KTO)
149
154
 
150
- New in v1.5: train on preferences instead of plain demonstrations. ORPO is reference-free and single-stage — it folds the preference signal into the SFT step, so there's no separate reward or reference model and the 3-line shape is unchanged. Pass `--method orpo` (CLI) or `method="orpo"` (Python) and feed it a dataset of `{prompt, chosen, rejected}` (or just `{chosen, rejected}`) rows:
155
+ Train on preferences instead of plain demonstrations. ORPO is reference-free and single-stage — it folds the preference signal into the SFT step, so there's no separate reward or reference model and the 3-line shape is unchanged. Pass `--method orpo` (CLI) or `method="orpo"` (Python) and feed it a dataset of `{prompt, chosen, rejected}` (or just `{chosen, rejected}`) rows:
151
156
 
152
157
  ```jsonl
153
158
  {"prompt": "What is Python?", "chosen": "A high-level programming language known for readability.", "rejected": "idk look it up"}
@@ -166,15 +171,19 @@ trainer.export("gguf", quantization="q4_k_m")
166
171
  backprop train --data preferences.jsonl --method orpo --steps 100
167
172
  ```
168
173
 
169
- The default learning rate auto-lowers to `8e-6` for ORPO (the loss is sharper than plain SFT); tune `--orpo-beta` (default `0.1`) to weight the odds-ratio penalty. In v1.5 ORPO is `mode="lora"` only. SimPO and KTO are planned follow-ons; for online RL (PPO/GRPO) see [What Backpropagate is NOT for](#what-backpropagate-is-not-for).
174
+ The default learning rate auto-lowers to `8e-6` for ORPO (the loss is sharper than plain SFT); tune `--orpo-beta` (default `0.1`) to weight the odds-ratio penalty. ORPO is `mode="lora"` only.
175
+
176
+ **New in v1.6 — SimPO and KTO.** `--method simpo` ([Meng et al. 2024](https://arxiv.org/abs/2405.14734)) is reference-free with a length-normalized reward and takes the same paired `{prompt, chosen, rejected}` data as ORPO (`--simpo-beta`, `--simpo-gamma`). `--method kto` ([Ethayarajh et al. 2024](https://arxiv.org/abs/2402.01306)) takes **unpaired** `{prompt, completion, label}` data — per-example thumbs-up/down — for the large class of feedback that isn't curated A/B pairs; it auto-balances the desirable/undesirable loss weights from your label counts. Both are `mode="lora"` only and stay in the single-GPU SFT envelope (no separate reference model). See the [preference-tuning handbook](https://mcp-tool-shop-org.github.io/backpropagate/handbook/preference-tuning/) for which to use. For online RL (PPO/GRPO) see [What Backpropagate is NOT for](#what-backpropagate-is-not-for).
170
177
 
171
178
  ### Reasoning-trace SFT (R1 distillation)
172
179
 
173
- New in v1.5: distill a reasoning model the easy way. Pass `--reasoning-trace` (CLI) or `Trainer(..., reasoning_trace=True)` (Python) and feed it traces that keep a `<think>...</think>` chain-of-thought inside the assistant turn — the pure-SFT half of [DeepSeek-R1](https://arxiv.org/abs/2501.12948) distillation, no RL required. Backpropagate keeps `<think>` in the training target, drops empty / over-long traces (trace-length filtering), and raises the default `max_seq_length` to 8192 for the longer CoT. Critically, `<think>` stays **plain text** — no special tokens, no embedding resize — so the merged GGUF still exports to Ollama like any other fine-tune. SFT only. See the [reasoning-trace recipe](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/#reasoning-trace-sft-r1-distillation) for the dataset shape and the tunable token band.
180
+ Distill a reasoning model the easy way. Pass `--reasoning-trace` (CLI) or `Trainer(..., reasoning_trace=True)` (Python) and feed it traces that keep a `<think>...</think>` chain-of-thought inside the assistant turn — the pure-SFT half of [DeepSeek-R1](https://arxiv.org/abs/2501.12948) distillation, no RL required. Backpropagate keeps `<think>` in the training target, drops empty / over-long traces (trace-length filtering), and raises the default `max_seq_length` to 8192 for the longer CoT. Critically, `<think>` stays **plain text** — no special tokens, no embedding resize — so the merged GGUF still exports to Ollama like any other fine-tune. SFT only. See the [reasoning-trace recipe](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/#reasoning-trace-sft-r1-distillation) for the dataset shape and the tunable token band.
181
+
182
+ ### Apple Silicon (MLX) — unverified preview
174
183
 
175
- ### Apple Silicon (MLX) experimental, v1.5
184
+ > ⚠️ **Unverified preview — not part of the supported feature set.** The MLX rail is built and unit-tested but has **not** been dogfood-verified on real Apple Silicon (`mlx-lm` is Apple-only and can't run on the NVIDIA rigs Backpropagate is developed on). Treat everything below as experimental, use at your own risk, and [report anomalies](#reporting-bugs) if you run it on an M-series Mac.
176
185
 
177
- New in v1.5: **one API, two rails.** CUDA stays the canonical, verified backend; MLX is a second rail that trains on an M-series Mac via Apple's [`mlx_lm.lora`](https://github.com/ml-explore/mlx-lm) toolchain (unified memory, no CUDA). The same 3-line shape picks the rail by hardware — `backend='auto'` (the default) routes to CUDA on NVIDIA and to MLX on Apple Silicon, so existing CUDA rigs are byte-identical:
186
+ **One API, two rails.** CUDA is the canonical, verified backend; MLX is a second rail that trains on an M-series Mac via Apple's [`mlx_lm.lora`](https://github.com/ml-explore/mlx-lm) toolchain (unified memory, no CUDA). The 3-line shape picks the rail by hardware — `backend='auto'` (the default) routes to CUDA on NVIDIA and to MLX on Apple Silicon, so existing CUDA rigs are byte-identical:
178
187
 
179
188
  ```python
180
189
  from backpropagate import Trainer
@@ -188,9 +197,9 @@ trainer.train("examples/quickstart.jsonl", steps=100)
188
197
  backprop train --data my_data.jsonl --backend mlx --steps 100
189
198
  ```
190
199
 
191
- In v1.5 the MLX rail is **LoRA SFT only** — no ORPO, no FP8, no `mode='full'`, no multi-run on MLX yet (each is rejected with `CONFIG_INVALID_SETTING`; use `backend='cuda'`/`'auto'` on an NVIDIA box for those). The resulting adapter is plain safetensors and exports to Ollama through the same path as the CUDA rail.
200
+ The MLX rail is **LoRA SFT only** — no ORPO, no FP8, no `mode='full'`, no multi-run (each is rejected with `CONFIG_INVALID_SETTING`; use `backend='cuda'`/`'auto'` on an NVIDIA box for those). The resulting adapter is plain safetensors and exports to Ollama through the same path as the CUDA rail.
192
201
 
193
- > ⚠️ **Honest status:** the MLX rail ships in v1.5 **built + unit-tested (mocked)** but **NOT yet dogfood-verified on real Apple Silicon** — `mlx-lm` is Apple-only and could not be run on the NVIDIA rig this was authored on. Treat it as experimental (same framing as the FP8 path), and please [report anomalies](#reporting-bugs) once it runs on an M-series Mac. Forcing `--backend mlx` on a non-Apple host errors with `CONFIG_INVALID_SETTING`; a missing `mlx_lm` toolchain on a Mac raises `DEP_MLX_UNAVAILABLE`.
202
+ > Forcing `--backend mlx` on a non-Apple host errors with `CONFIG_INVALID_SETTING`; a missing `mlx_lm` toolchain on a Mac raises `DEP_MLX_UNAVAILABLE`.
194
203
 
195
204
  For more end-to-end workflows (fine-tune-and-push-to-HF-Hub, resume after OOM, multi-run SLAO across a long campaign, etc.) see the [handbook recipes page](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/).
196
205
 
@@ -303,14 +312,14 @@ Filesystem writes from the UI are sandboxed to a single directory:
303
312
 
304
313
  **Requirements:** Python 3.10+ · CUDA GPU (8GB+ VRAM) · PyTorch 2.0+
305
314
 
306
- Python 3.10 reaches upstream end-of-life in October 2026 and is scheduled for drop in v1.5. For new installs, prefer Python 3.11 or 3.12 — 3.11 is the most-tested floor.
315
+ Python 3.10 is supported through at least v1.6; it reaches upstream end-of-life in October 2026 and is scheduled for removal in the first release after that. For new installs, prefer Python 3.11 or 3.12 — 3.11 is the most-tested floor.
307
316
 
308
317
  Backpropagate handles the runtime quirks of training on different platforms, but it can't fix install-time problems. The two most common are:
309
318
 
310
319
  - **Wrong CUDA wheel.** PyTorch is published one binary per CUDA version. If you pick the wrong one, you silently get CPU-only PyTorch and training is impossibly slow. Use the wheel picker at <https://pytorch.org/get-started/locally/> for your driver. Run `nvidia-smi` to see your driver / CUDA version.
311
320
  - **Windows + GGUF export.** The `[export]` extra builds `llama-cpp-python` from source, which needs Visual Studio Build Tools (C++ component) and CMake.
312
321
 
313
- **macOS:** the CUDA rail is not supported (no CUDA) — a CUDA-routed `trainer.train()` raises `DEP_GPU_NOT_AVAILABLE`, and you can run the trained adapter on a Mac via Ollama. **New in v1.5:** an experimental MLX rail (`--backend mlx`, `pip install 'backpropagate[mlx]'`) trains a LoRA adapter natively on Apple Silicon via `mlx_lm.lora` — LoRA SFT only, and built + unit-tested but not yet dogfood-verified on real silicon (see [Apple Silicon (MLX)](#apple-silicon-mlx--experimental-v15)). For the CUDA path, or for ORPO / full fine-tune / FP8 / multi-run, use a CUDA Linux or Windows machine.
322
+ **macOS:** the CUDA rail is not supported (no CUDA) — a CUDA-routed `trainer.train()` raises `DEP_GPU_NOT_AVAILABLE`, and you can run the trained adapter on a Mac via Ollama. An **experimental, unverified-preview** MLX rail (`--backend mlx`, `pip install 'backpropagate[mlx]'`) trains a LoRA adapter natively on Apple Silicon via `mlx_lm.lora` — LoRA SFT only, and **not dogfood-verified on real silicon** (see [Apple Silicon (MLX)](#apple-silicon-mlx--unverified-preview)). For the CUDA path, or for ORPO / full fine-tune / FP8 / multi-run, use a CUDA Linux or Windows machine.
314
323
 
315
324
  See the [troubleshooting handbook page](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/) for the long-form install fix-it guide, and the dedicated [CUDA troubleshooting page](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/) for driver / VRAM / xformers / bf16-vs-fp16 issues.
316
325
 
@@ -362,8 +371,12 @@ Nested keys use double underscore (`MODEL__NAME`, not `MODEL_NAME`). The full re
362
371
  | Llama 3.2 3B | ~8GB | Llama Community | Solid alternative to Qwen 3B with permissive caveats. |
363
372
  | Llama 3.2 1B | ~6GB | Llama Community | For quick experiments on small cards. |
364
373
  | Mistral 7B | ~12GB | Apache 2.0 | Comparable to Qwen 7B, different chat template. |
374
+ | Llama-3.1-8B | ~7-8GB (QLoRA) | Llama-3.1-Community | 8B QLoRA, 128K native context (the >700M-MAU clause needs a separate Meta license). |
375
+ | **Qwen2.5-14B** | ~8.5GB (QLoRA) | Apache 2.0 | **The 32 GB daily-driver sweet spot** — rank/alpha 32, paged 8-bit AdamW, 4096 ctx. |
376
+ | Mistral-Small-24B | ~18GB (QLoRA) | Apache 2.0 | 24B QLoRA on a 32 GB card with 4096-ctx headroom. |
377
+ | **Qwen2.5-32B** | ~26GB (QLoRA) | Apache 2.0 | **Top of the 32 GB envelope** — just fits at `max_len 2048` + paged 8-bit AdamW. |
365
378
 
366
- Other models often work, but only these eight are pinned in CI. Pass `--lora-preset=quality` (default) for rank-256 / all-linear targets per Biderman 2024 + Thinking Machines 2025, or `--lora-preset=fast` for the legacy rank-16 / q+v target if you need the v1.2.x footprint.
379
+ Other models often work; the rows above are the curated presets — the 14B–32B tier is QLoRA-tuned for a 32 GB card (the measured envelope). Pass `--lora-preset=quality` (default) for rank-256 / all-linear targets per Biderman 2024 + Thinking Machines 2025, or `--lora-preset=fast` for the legacy rank-16 / q+v target if you need the v1.2.x footprint.
367
380
 
368
381
  ## Troubleshooting
369
382
 
package/README.pt-BR.md CHANGED
@@ -15,9 +15,9 @@
15
15
  <a href="https://mcp-tool-shop-org.github.io/backpropagate/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
16
16
  </p>
17
17
 
18
- # Treine um adaptador. Envie-o para o Ollama. Siga em frente
18
+ # Ajuste um modelo QLoRA de 32 bilhões de parâmetros – ou um modelo completo de 7 bilhões de parâmetros – em uma única GPU. Envie-o para o Ollama
19
19
 
20
- Backpropagate é uma biblioteca Python para ajustar modelos de linguagem grandes em uma única GPU. Três linhas de código são suficientes para treinar um modelo de 7 bilhões de parâmetros em uma placa de 16 GB. Um comando adicional permite exportá-lo para o Ollama, para que possa usar o comando `ollama run` com o modelo ajustado. Funciona perfeitamente no Windows.
20
+ Realize o ajuste fino de grandes modelos de linguagem em uma **única** GPU, dimensionada para a placa que você realmente possui. Três linhas de código Python QLoRA para um modelo de 7–34 bilhões de parâmetros em uma única placa de consumidor de 32 GB (RTX 5090); uma flag `--full-ft-offload` – realiza o ajuste fino completo de um modelo da classe 7B, transferindo o estado do otimizador para a RAM do host. Mais um comando exporta para o Ollama e, em seguida, `ollama run` executa o seu modelo ajustado. Escala de forma eficiente até 16 GB. Desempenho de primeira linha no Windows.
21
21
 
22
22
  ```python
23
23
  from backpropagate import Trainer
@@ -69,33 +69,38 @@ O «backpropagation» é a funcionalidade que faltava: uma API Python de 3 linha
69
69
 
70
70
  Se você experimentou uma das bibliotecas mencionadas acima e teve dificuldades com a configuração, ou encontrou uma lacuna na compatibilidade com determinados modelos, ou preferia configurações padrão otimizadas para o Windows, então o Backpropagate é a solução ideal para você.
71
71
 
72
- ## Quais os aspetos que pode ajustar numa GPU de 16 GB para uso doméstico?
72
+ ## O que você pode ajustar em uma única GPU
73
73
 
74
- Aqui estão os valores práticos de desempenho que se podem esperar numa placa de 16 GB (RTX 4080 / 5080 / 4070 Ti Super):
74
+ A ferramenta Backpropagate dimensiona a execução para sua placa. Aqui está o limite prático em uma GPU de consumidor de **32 GB** (RTX 5090) com 64 GB de RAM do host – o hardware no qual ele é ajustado:
75
75
 
76
- | Modelo | Método | Estado/Situação |
76
+ | Tamanho do modelo | Método | Status em uma placa de 32 GB |
77
77
  |---|---|---|
78
- | Qwen-3.5-4B / Phi-4-mini-3.8B / SmolLM3-3B | LoRA / QLoRA / DoRA | Confortável. Comprimento total da sequência adequado, com margem de sobra. |
79
- | SmolLM3-3B / Qwen2.5-3B / Llama-3.2-3B / Llama-3.2-1B | `mode="full"` (ajuste fino completo) | v1.4 utilize a opção `--mode=full` em `backprop train` ou `Trainer(..., mode="full")`. Carrega os pesos em precisão total (bf16) — sem pesos de 4 bits, sem adaptadores; o uso de «gradient checkpointing» e do otimizador Adam de 8 bits com paginação mantém o consumo de memória abaixo de 16 GB. |
80
- | Qwen-2.5-7B / Llama-3.1-8B / Mistral-7B | QLoRA | Padrão. Aproximadamente 7-8 GB. Configurações predefinidas padrão do Backpropagate. |
81
- | Llama-3 13B | QLoRA + compactação de amostras | Ajustado, mas funciona. Use sequências mais curtas. |
82
- | Mixtral 8x7B (47 mil milhões de parâmetros no total) | | Fora do âmbito de aplicação a versão de 2 bits (AQLM/QuIP#) quebra o contrato de compatibilidade entre o adaptador e a exportação para o formato GGUF, pelo que foi descontinuada no [resumo da trajetória da versão 1.5](docs/V1_5_BRIEF.md). Em uma placa de 16 GB, use uma base de ≤ 8 GB. |
78
+ | 7B (Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | QLoRA | Confortável ~7–8 GB. Comprimento total da sequência, bastante espaço livre. |
79
+ | **14B** (Qwen2.5-14B) | QLoRA | **O ponto ideal para uso diário ~8,5 GB**, medido. rank/alpha 32, paged 8-bit AdamW, 4096 ctx. |
80
+ | 24B (Mistral-Small-24B) | QLoRA | ~18 GB. Encaixa com espaço livre em 4096 ctx. |
81
+ | **32B** (Qwen2.5-32B) | QLoRA | **Apenas encaixa ~26 GB** em `max_len 2048` + paged 8-bit AdamW. Limite máximo. |
82
+ | ≤6B | `mode="full"` (ajuste fino completo) | Ajuste fino completo na GPU pesos bf16, sem adaptador. O limite consciente da placa é de 6B em 32 GB. |
83
+ | **Classe 7B** (Qwen 2.5 7B / Llama-3.1-8B / Mistral 7B) | `mode="full" --full-ft-offload` | **Ajuste fino completo via FSDP2 com descarregamento para a CPU** – transfere parâmetros + otimizador para 64 GB de RAM do host. Mais lento (limitado pela largura de banda); Linux/WSL2. |
83
84
 
84
- `mode="full"` permite modelos com até **4 bilhões de parâmetros**. Os quatro modelos pré-definidos na linha «full-FT» acima são modelos genuínos de aproximadamente 3 bilhões de parâmetros (contagem real de parâmetros de 3,08 a 3,24 bilhões) e cabem em uma placa de 16 GB. A classe de 3,8 a 4 bilhões de parâmetros (Phi-4-mini-3.8B, Qwen-3.5-4B) também é aceita, mas requer uma placa de **24 GB ou mais** para o ajuste fino completo — apenas os pesos e gradientes ocupam cerca de 16 GB antes do otimizador e das ativações —, portanto, em uma placa de 16 GB, use `mode="lora"` para esses modelos (eles estão na linha LoRA). Modelos com mais de 4 bilhões de parâmetros são rejeitados com a mensagem `RUNTIME_FULL_FT_MODEL_TOO_LARGE`.
85
+ Duas coisas que a maioria das bibliotecas de GPU única exige que você faça em outro lugar **QLoRA de 24–34B** e **ajuste fino completo de modelo da classe 7B em uma única placa** Backpropagate faz em uma única placa de consumidor e, em seguida, exporta o resultado diretamente para o Ollama.
85
86
 
86
- A quantização de 2 bits (AQLM / QuIP#) está **fora do escopo**. Foi considerada para a versão 1.4, mas foi removida no [resumo da trajetória da versão 1.5](docs/V1_5_BRIEF.md): uma base de 2 bits não pode ser facilmente reintegrada em pesos de precisão total, o que prejudica o contrato de exportação do Backpropagate (adaptador que pode ser combinado GGUF Ollama), que é o objetivo principal do processo. Em vez disso, o Backpropagate oferece as seguintes opções: o caminho de computação **FP8 da versão 1.5** (`--fp8`, Blackwell/Hopper) e `mode="full"` para modelos de até 4 bilhões de parâmetros ambos permanecem combináveis e exportáveis.
87
+ **O limite do ajuste fino completo é consciente da placa.** É derivado da aritmética de memória de treinamento de 4 termos (pesos + gradientes + otimizador + ativações) em relação à sua VRAM *detectada*: **16 GB 4B, 24 GB 5B, 32 GB 6B** apenas na GPU. `--full-ft-offload` aumenta para **classe 7B**, transferindo parâmetros + estado do otimizador para a RAM do host via FSDP2 `fully_shard` + `CPUOffloadPolicy` (mais lento, limitado pela largura de banda PCIe/CPU; requer ~64 GB de RAM do host e um backend NCCL, ou seja, Linux/WSL2). Substitua o limite explicitamente com `--full-ft-ceiling-billions`. Um modelo que ultrapassa até mesmo o limite de descarregamento é interrompido com `RUNTIME_FULL_FT_MODEL_TOO_LARGE`, indicando a recuperação (`--full-ft-offload` ou LoRA/QLoRA). Consulte [a página completa do manual de ajuste fino](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/) para os cálculos da VRAM + a comparação de qualidade Biderman 2024 / Thinking Machines 2025.
87
88
 
88
- Para os modelos 3B e inferiores, é possível realizar um ajuste fino completo (e não apenas LoRA) com 16 GB de memória, e esta funcionalidade já está disponível na versão 1.4, com o parâmetro `mode="full"`. Para ativá-la, utilize `Trainer(..., mode="full")` ou `backprop train --mode=full --model phi-4-mini-3.8b`. Um mecanismo de segurança impede o uso desta funcionalidade para modelos com mais de 4B, exibindo a mensagem `RUNTIME_FULL_FT_MODEL_TOO_LARGE`, e sugere o uso de LoRA juntamente com as configurações para modelos inferiores a 4B como alternativas. Consulte a [página completa do manual de ajuste fino](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/) para obter informações detalhadas sobre a configuração e uma comparação da qualidade, baseada nos estudos de Biderman (2024) e Thinking Machines (2025). Para modelos com 7B ou mais, o ajuste fino completo requer uma GPU com 24 GB ou mais de memória — considere alugar uma GPU A100 na nuvem ou utilize LoRA, já que pesquisas recentes mostram que esta técnica oferece resultados semelhantes ao ajuste fino completo na maioria das tarefas de pós-treinamento (consulte a [seção "O que o Backpropagate não é para"](#what-backpropagate-is-not-for) para obter referências).
89
+ ### Escala até 16 GB
90
+
91
+ O limite de 16 GB (RTX 4080 / 5080 / 4070 Ti Super) ainda oferece excelente desempenho: QLoRA de 7B em ~7–8 GB e ajuste fino completo de um modelo genuíno de ~3B (SmolLM3-3B, Qwen2.5-3B, Llama-3.2-3B/1B) dentro de 16 GB via `mode="full"` (pesos bf16 + checkpointing de gradiente + paged 8-bit AdamW). O mesmo código seleciona o tamanho do lote e o limite de ajuste fino completo que se ajustam a qualquer placa detectada – sem flags para alterar entre os hardwares.
92
+
93
+ A quantização de 2 bits (AQLM / QuIP#) está **fora do escopo** – uma base de 2 bits não pode ser mesclada de volta aos pesos de precisão total, o que interrompe o contrato de adaptador mesclável → GGUF → exportação para Ollama (o objetivo principal da pipeline). Em vez disso, a ferramenta Backpropagate oferece os recursos de QLoRA, `mode="full"`, `--full-ft-offload` e o caminho de computação FP8 (`--fp8`, Blackwell/Hopper) – todos permanecem mescláveis e exportáveis.
89
94
 
90
95
  ## Para que NÃO serve o algoritmo de retropropagação
91
96
 
92
97
  Se o seu caso de uso for um dos seguintes, será mais vantajoso utilizar uma biblioteca diferente — a Backpropagate não é a escolha certa e tentar fazê-la funcionar custará mais do que simplesmente optar pela ferramenta adequada. Ler esta secção antes de começar evita o ciclo de instalação e tentativa frustrante:
93
98
 
94
- - **Ajuste fino de parâmetros completos de modelos 7B+** Backpropagate usa LoRA/QLoRA, que treina um pequeno adaptador em vez de atualizar todos os pesos. Para modelos de 7B e superiores, o ajuste fino completo requer 24 GB ou mais de memória da GPU e não cabe em uma placa de consumidor de 16 GB. Para modelos de 3B e inferiores, o ajuste fino completo é viável em 16 GB e está disponível na v1.4 como `mode="full"` (passe `Trainer(..., mode="full")` ou `--mode=full` na CLI; um filtro rígido aciona `RUNTIME_FULL_FT_MODEL_TOO_LARGE` para modelos > 4B e nomeia LoRA + os predefinidos de sub-4B como alternativas). Em resumo: pesquisas recentes ([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/)) mostram que o LoRA, com a configuração correta, corresponde à qualidade do ajuste fino completo na maioria das tarefas de pós-treinamento (seguimento de instruções, adaptação de domínio, persona/estilo) em 67% do poder computacional — portanto, para o trabalho que a maioria dos operadores realmente deseja, você não perde nada ao optar por LoRA. `mode="full"` existe para os casos em que você mediu uma diferença de qualidade e decidiu gastar o poder computacional extra. Se você realmente precisar de um ajuste fino completo de um modelo de 7B+, use HuggingFace `transformers.Trainer` diretamente em uma placa de 24 GB ou mais.
95
- - **RL online — PPO / GRPO / RLVR** — Backpropagate faz um ajuste fino SFT de estágio único mais ajuste de preferência sem referência (ORPO está disponível na v1.5; SimPO/KTO estão planejados). O que ele *não* faz é aprendizado por reforço online — PPO, GRPO ou RLVR —, que requer um modelo de recompensa ou um loop de geração e pontuação no topo da etapa de treinamento. Para esses, use TRL diretamente ou LLaMA-Factory. (O ajuste de preferência sem referência se encaixa no envelope de estágio único porque não há um modelo de referência separado para manter na memória; veja a nota sobre ORPO em [Início Rápido](#início-rápido).)
96
- - **Treinamento multi-nó** — GPU única em uma máquina. Multi-GPU em uma máquina funciona (via `accelerate launch`), mas não é oficialmente suportado.
97
- - **Treinamento macOS no ambiente CUDA** — Apple Silicon não tem CUDA, então o caminho CUDA tem que ser executado em uma máquina Linux ou Windows com uma GPU NVIDIA. Você ainda pode executar o modelo treinado em um Mac via Ollama. **Novo na v1.5:** um ambiente MLX experimental (`--backend mlx`) treina um adaptador LoRA nativamente no Apple Silicon — veja [Apple Silicon (MLX)](#apple-silicon-mlx--experimental-v15). É apenas LoRA-SFT e foi construído, mas ainda não foi totalmente testado em silício real, então, para qualquer coisa além de um LoRA SFT (ORPO, ajuste fino completo, FP8, execução múltipla), você ainda deseja o ambiente CUDA.
98
- - **Qualquer coisa fora das famílias de modelos testadas** — Qwen 2.5 / 3.5 (7B / 4B), Phi-4-mini-3.8B, SmolLM3-3B, Llama 3.2 (3B / 1B), Mistral 7B. Outros modelos geralmente funcionam, mas não estão fixados no CI.
99
+ - **Ajuste fino com todos os parâmetros além do limite de transferência (≈13B+)** Propague o ajuste fino completo até **~6 GB de GPU pura e ~7 GB via `--full-ft-offload`** em uma placa de 32 GB (veja [o envelope](#what-you-can-fine-tune-on-one-gpu)). Um ajuste fino *verdadeiramente completo* de um modelo de 13B+ está além disso ele requer FSDP multi-GPU ou uma placa maior (use `transformers.Trainer` em várias GPUs, ou alugue uma A100/H100). Antes de investir nesse poder computacional, no entanto: pesquisas recentes ([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/)) mostram que o LoRA, com a configuração correta, corresponde à qualidade do ajuste fino completo na maioria das tarefas de pós-treinamento (seguimento de instruções, adaptação de domínio, persona/estilo) em cerca de 67% do poder computacional — portanto, QLoRA até 34B, que o Backpropagate executa em uma única placa, não perde nada para o trabalho que a maioria dos operadores realmente deseja.
100
+ - **RL online — PPO / GRPO / RLVR** — O Backpropagate faz ajuste fino de estágio único (SFT) mais ajuste de preferência sem referência (ORPO na v1.5; SimPO + KTO na v1.6). O que ele *não* faz é aprendizado por reforço online — PPO, GRPO ou RLVR —, o que requer um modelo de recompensa ou um loop de geração e pontuação no topo da etapa de treinamento. Para isso, use TRL diretamente ou LLaMA-Factory. (O ajuste de preferência sem referência se encaixa no envelope de estágio único porque não há um modelo de referência separado para manter na memória; veja a nota do ORPO em [Quick Start](#quick-start).)
101
+ - **Treinamento multi-nó** — GPU única em uma máquina apenas. Multi-GPU em uma máquina funciona (via `accelerate launch`), mas não é oficialmente suportado.
102
+ - **Treinamento no macOS na plataforma CUDA** — Apple Silicon não tem CUDA, então o caminho CUDA é executado em uma caixa Linux ou Windows com uma GPU NVIDIA. Você ainda pode executar o modelo treinado em um Mac via Ollama. Uma plataforma MLX **experimental e não verificada** (`--backend mlx`) treina um adaptador LoRA nativamente no Apple Silicon — veja [Apple Silicon (MLX)](#apple-silicon-mlx--unverified-preview). É apenas LoRA-SFT e **não foi verificado em silício real** (sem suporte), portanto, para qualquer coisa além de um SFT LoRA (ORPO, ajuste fino completo, FP8, execução múltipla), você deve usar a plataforma CUDA.
103
+ - **Qualquer coisa fora das famílias de modelos testadas** — Qwen 2.5 / 3.5 (7B / 4B), Phi-4-mini-3.8B, SmolLM3-3B, Llama 3.2 (3B / 1B), Mistral 7B. Outros modelos geralmente funcionam, mas não estão definidos no CI.
99
104
 
100
105
  Se você precisar de alguma dessas coisas, use uma das bibliotecas listadas acima. Elas são melhores para isso.
101
106
 
@@ -145,7 +150,7 @@ Isso treina um adaptador Qwen 2.5 7B em 5 conversas curtas no formato ShareGPT e
145
150
 
146
151
  Os formatos Alpaca (`instruction` / `output`), OpenAI chat (`messages`) e texto bruto também funcionam — Backpropagate detecta automaticamente o formato.
147
152
 
148
- ### Ajuste de preferência (ORPO)
153
+ ### Ajuste de preferências (ORPO, SimPO, KTO)
149
154
 
150
155
  Novo na v1.5: treine com base em preferências em vez de demonstrações simples. ORPO não requer referência e é de estágio único — ele incorpora o sinal de preferência na etapa de ajuste fino SFT, portanto, não há um modelo de recompensa ou referência separado e a forma de 3 linhas permanece inalterada. Passe `--method orpo` (CLI) ou `method="orpo"` (Python) e forneça um conjunto de dados de linhas `{prompt, chosen, rejected}` (ou apenas `{chosen, rejected}`):
151
156
 
@@ -166,13 +171,17 @@ trainer.export("gguf", quantization="q4_k_m")
166
171
  backprop train --data preferences.jsonl --method orpo --steps 100
167
172
  ```
168
173
 
169
- A taxa de aprendizado padrão é automaticamente reduzida para `8e-6` para ORPO (a perda é mais acentuada do que em SFT simples); ajuste `--orpo-beta` (padrão `0.1`) para ponderar a penalidade da razão de chances. Na v1.5, ORPO é apenas `mode="lora"`. SimPO e KTO são planejados como complementos; para RL online (PPO/GRPO), consulte [O que Backpropagate NÃO é](#what-backpropagate-is-not-for).
174
+ A taxa de aprendizado padrão é automaticamente reduzida para `8e-6` para ORPO (a perda é mais acentuada do que no SFT simples); ajuste `--orpo-beta` (padrão `0.1`) para ponderar a penalidade da razão de chances. ORPO é apenas em `mode="lora"`.
175
+
176
+ **Novo na v1.6 — SimPO e KTO.** `--method simpo` ([Meng et al. 2024](https://arxiv.org/abs/2405.14734)) não requer referência, utiliza uma recompensa normalizada pelo comprimento e usa os mesmos dados pareados `{prompt, chosen, rejected}` que o ORPO (`--simpo-beta`, `--simpo-gamma`). `--method kto` ([Ethayarajh et al. 2024](https://arxiv.org/abs/2402.01306)) usa dados **não pareados** `{prompt, completion, label}` — avaliações individuais de "gostei/não gostei" — para a grande classe de feedback que não é um conjunto curado de pares A/B; ele equilibra automaticamente os pesos desejáveis/indesejáveis da perda com base nas contagens dos seus rótulos. Ambos são apenas em `mode="lora"` e permanecem no ambiente SFT de GPU única (sem modelo de referência separado). Consulte o [manual de ajuste de preferências](https://mcp-tool-shop-org.github.io/backpropagate/handbook/preference-tuning/) para saber qual usar. Para RL online (PPO/GRPO), consulte [O que o Backpropagate NÃO é](#what-backpropagate-is-not-for).
170
177
 
171
178
  ### Rastreamento de raciocínio SFT (destilação R1)
172
179
 
173
180
  Novo na v1.5: destile um modelo de raciocínio de forma fácil. Passe `--reasoning-trace` (CLI) ou `Trainer(..., reasoning_trace=True)` (Python) e forneça rastreamentos que mantenham uma cadeia de pensamento `<think>...</think>` dentro da interação do assistente — a metade pura de SFT de [DeepSeek-R1](https://arxiv.org/abs/2501.12948), sem necessidade de RL. Backpropagate mantém `<think>` no alvo de treinamento, remove rastreamentos vazios/muito longos (filtragem do comprimento do rastreamento) e aumenta o `max_seq_length` padrão para 8192 para o CoT mais longo. Fundamentalmente, `<think>` permanece como **texto simples** — sem tokens especiais, sem redimensionamento de incorporação — para que o GGUF mesclado ainda seja exportado para o Ollama como qualquer outro ajuste fino. Apenas SFT. Consulte a [receita de rastreamento de raciocínio](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/#reasoning-trace-sft-r1-distillation) para o formato do conjunto de dados e o intervalo de tokens ajustável.
174
181
 
175
- ### Apple Silicon (MLX) — experimental, v1.5
182
+ ### Apple Silicon (MLX) — visualização não verificada
183
+
184
+ > ⚠️ **Visualização não verificada — não faz parte do conjunto de recursos suportados.** A plataforma MLX é construída e testada em nível de unidade, mas **não** foi verificada em silício Apple real (`mlx-lm` é exclusivo da Apple e não pode ser executado nos equipamentos NVIDIA nos quais o Backpropagate é desenvolvido). Considere tudo abaixo como experimental, use por sua conta e risco e [relate anomalias](#reporting-bugs) se você o executar em um Mac da série M.
176
185
 
177
186
  Novo na v1.5: **uma API, dois caminhos.** CUDA permanece como o backend canônico e verificado; MLX é um segundo caminho que treina em um Mac da série M por meio do conjunto de ferramentas [`mlx_lm.lora`](https://github.com/ml-explore/mlx-lm) da Apple (memória unificada, sem CUDA). O mesmo formato de 3 linhas seleciona o caminho por hardware — `backend='auto'` (o padrão) direciona para CUDA em NVIDIA e para MLX em Apple Silicon, para que as configurações CUDA existentes sejam idênticas em termos de bytes:
178
187
 
@@ -190,7 +199,7 @@ backprop train --data my_data.jsonl --backend mlx --steps 100
190
199
 
191
200
  Na v1.5, o caminho MLX é **apenas LoRA SFT** — sem ORPO, sem FP8, sem `mode='full'`, sem execução múltipla em MLX ainda (cada um é rejeitado com `CONFIG_INVALID_SETTING`; use `backend='cuda'`/`'auto'` em uma máquina NVIDIA para esses). O adaptador resultante é apenas safetensors e é exportado para o Ollama pelo mesmo caminho do caminho CUDA.
192
201
 
193
- > ⚠️ **Status honesto:** o caminho MLX é lançado na v1.5 **construído + testado em unidade (simulado)**, mas **AINDA NÃO verificado em Apple Silicon real** — `mlx-lm` é exclusivo da Apple e não pôde ser executado na máquina NVIDIA em que isso foi desenvolvido. Trate-o como experimental (o mesmo enquadramento do caminho FP8) e, por favor, [relate anomalias](#reporting-bugs) assim que for executado em um Mac da série M. Forçar `--backend mlx` em um host que não seja Apple gera um erro com `CONFIG_INVALID_SETTING`; a ausência do conjunto de ferramentas `mlx_lm` em um Mac gera `DEP_MLX_UNAVAILABLE`.
202
+ > Forçar `--backend mlx` em um host que não seja Apple gera um erro com `CONFIG_INVALID_SETTING`; a ausência de uma ferramenta `mlx_lm` em um Mac gera `DEP_MLX_UNAVAILABLE`.
194
203
 
195
204
  Para fluxos de trabalho de ponta a ponta mais abrangentes (ajuste fino e envio para o HF-Hub, retomada após estouro de memória, SLAO de execução múltipla em uma campanha longa, etc.), consulte a [página de receitas do manual](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/).
196
205
 
@@ -303,7 +312,7 @@ As operações de escrita no sistema de arquivos a partir da interface do usuár
303
312
 
304
313
  **Requisitos:** Python 3.10+ · GPU CUDA (8 GB+ de VRAM) · PyTorch 2.0+
305
314
 
306
- O Python 3.10 atingirá o fim do ciclo de vida em outubro de 2026 e está programado para ser removido na versão 1.5. Para novas instalações, prefira o Python 3.11 ou 3.12 — o 3.11 é a versão mais testada.
315
+ O Python 3.10 é suportado até, pelo menos, a v1.6; seu suporte oficial termina em outubro de 2026 e está programado para ser removido na primeira versão após essa data. Para novas instalações, prefira o Python 3.11 ou 3.12 — o 3.11 é a versão mais testada.
307
316
 
308
317
  O Backpropagate lida com as peculiaridades de tempo de execução do treinamento em diferentes plataformas, mas não pode corrigir problemas de tempo de instalação. Os dois mais comuns são:
309
318
 
@@ -362,8 +371,12 @@ Chaves aninhadas usam sublinhado duplo (`MODEL__NAME`, não `MODEL_NAME`). A ref
362
371
  | Llama 3.2 3B | ~8GB | Llama Community | Alternativa sólida ao Qwen 3B com ressalvas permissivas. |
363
372
  | Llama 3.2 1B | ~6GB | Llama Community | Para experimentos rápidos em placas pequenas. |
364
373
  | Mistral 7B | ~12GB | Apache 2.0 | Comparável ao Qwen 7B, modelo de chat diferente. |
374
+ | Llama-3.1-8B | ~7-8 GB (QLoRA) | Llama-3.1-Community | 8B QLoRA, contexto nativo de 128 mil tokens (a cláusula >700M-MAU requer uma licença Meta separada). |
375
+ | **Qwen2.5-14B** | ~8,5 GB (QLoRA) | Apache 2.0 | **O ponto ideal para uso diário em uma placa de 32 GB** — classificação/alfa 32, AdamW de 8 bits com paginação, 4096 ctx. |
376
+ | Mistral-Small-24B | ~18 GB (QLoRA) | Apache 2.0 | 24B QLoRA em uma placa de 32 GB com margem de 4096 ctx. |
377
+ | **Qwen2.5-32B** | ~26 GB (QLoRA) | Apache 2.0 | **No limite da capacidade de uma placa de 32 GB** — apenas se encaixa em `max_len 2048` + AdamW de 8 bits com paginação. |
365
378
 
366
- Outros modelos geralmente funcionam, mas apenas esses oito são fixados no CI. Use `--lora-preset=quality` (padrão) para alvos de rank-256 / totalmente lineares, conforme Biderman 2024 + Thinking Machines 2025, ou `--lora-preset=fast` para o alvo legado de rank-16 / q+v, se você precisar do footprint da v1.2.x.
379
+ Outros modelos geralmente funcionam; as linhas acima são os predefinições selecionadas — a camada de 14B–32B é ajustada com QLoRA para uma placa de 32 GB (o envelope medido). Passe `--lora-preset=quality` (padrão) para alvos de classificação 256 / totalmente linear, conforme Biderman 2024 + Thinking Machines 2025, ou `--lora-preset=fast` para o alvo de classificação 16 / q+v legado se você precisar da pegada da v1.2.x.
367
380
 
368
381
  ## Solução de problemas
369
382