@mcptoolshop/backpropagate 1.0.5 → 1.1.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/LICENSE +21 -21
- package/README.es.md +359 -0
- package/README.fr.md +359 -0
- package/README.hi.md +359 -0
- package/README.it.md +359 -0
- package/README.ja.md +359 -0
- package/README.md +306 -56
- package/README.pt-BR.md +359 -0
- package/README.zh.md +359 -0
- package/bin/backpropagate.js +6 -6
- package/package.json +12 -3
package/README.it.md
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.md">English</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/backpropagate/readme.png" alt="Backpropagate" width="400">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/backpropagate/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/backpropagate/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
11
|
+
<a href="https://pypi.org/project/backpropagate/"><img src="https://img.shields.io/pypi/v/backpropagate" alt="PyPI"></a>
|
|
12
|
+
<a href="https://codecov.io/gh/mcp-tool-shop-org/backpropagate"><img src="https://img.shields.io/codecov/c/github/mcp-tool-shop-org/backpropagate" alt="Coverage"></a>
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
|
|
14
|
+
<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>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
**Messa a punto di modelli linguistici di grandi dimensioni (LLM) senza interfaccia grafica in 3 righe di codice. Impostazioni predefinite intelligenti, gestione automatica delle dimensioni dei batch in base alla VRAM, addestramento SLAO multi-sessione e esportazione GGUF con un solo clic per Ollama.**
|
|
18
|
+
|
|
19
|
+
*SLAO è Single LoRA Continual Learning via Asymmetric Merging: una tecnica di fusione tra sessioni di addestramento che previene la perdita di informazioni durante le sessioni di messa a punto prolungate (articolo: [https://arxiv.org/abs/2512.23017](https://arxiv.org/abs/2512.23017)).*
|
|
20
|
+
|
|
21
|
+
*Addestra modelli linguistici di grandi dimensioni con 3 righe di codice. Esportali su Ollama con un'altra riga.*
|
|
22
|
+
|
|
23
|
+
## Guida rapida
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install backpropagate[standard]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from backpropagate import Trainer
|
|
31
|
+
|
|
32
|
+
trainer = Trainer("Qwen/Qwen2.5-7B-Instruct")
|
|
33
|
+
trainer.train("examples/quickstart.jsonl", steps=10)
|
|
34
|
+
trainer.export("gguf", quantization="q4_k_m") # Ready for Ollama
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Il repository include un piccolo file `examples/quickstart.jsonl` (5 esempi in formato ShareGPT) in modo che lo snippet di codice precedente possa essere eseguito completamente su un'installazione pulita. Per il tuo addestramento, consulta la sezione [Formato del dataset](#dataset-format) qui sotto.
|
|
38
|
+
|
|
39
|
+
### Percorso senza codice: Interfaccia utente
|
|
40
|
+
|
|
41
|
+
Preferisci un'interfaccia utente anziché una REPL Python? Installa gli extra necessari ed esegui:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install backpropagate[standard]
|
|
45
|
+
backprop ui --port 7862
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
L'interfaccia Reflex (Radix UI) ti consente di selezionare un file JSONL, scegliere un modello, addestrare e esportare: non è richiesta alcuna conoscenza di Python. L'interfaccia utente è progettata per funzionare principalmente in locale; per l'accesso tramite internet, consulta la sezione [Interfaccia utente](#web-ui) qui sotto per le opzioni di sicurezza `--share` + `--auth` e le opzioni di tunneling supportate (Cloudflare Tunnel, ngrok).
|
|
49
|
+
|
|
50
|
+
## Formato del dataset
|
|
51
|
+
|
|
52
|
+
Il tuo file di addestramento in formato JSONL deve contenere un esempio per riga. Il formato più semplice è la conversazione ShareGPT:
|
|
53
|
+
|
|
54
|
+
```jsonl
|
|
55
|
+
{"conversations": [{"from": "human", "value": "What is Python?"}, {"from": "gpt", "value": "A programming language."}]}
|
|
56
|
+
{"conversations": [{"from": "human", "value": "Explain recursion."}, {"from": "gpt", "value": "A function that calls itself."}]}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Sono supportati anche i formati Alpaca (`instruction`/`output`), OpenAI chat (`messages`) e testo semplice. Consulta il file `examples/quickstart.jsonl` per un punto di partenza.
|
|
60
|
+
|
|
61
|
+
## Perché propagare l'errore?
|
|
62
|
+
|
|
63
|
+
| Problema | Soluzione |
|
|
64
|
+
|---------|----------|
|
|
65
|
+
| La messa a punto è complessa | 3 righe: caricamento, addestramento, salvataggio |
|
|
66
|
+
| Windows è un incubo | Supporto completo per Windows |
|
|
67
|
+
| La gestione della VRAM è difficile | Dimensioni dei batch automatiche, monitoraggio della GPU |
|
|
68
|
+
| L'esportazione del modello è confusa | Esportazione GGUF con un solo clic + registrazione automatica con Ollama |
|
|
69
|
+
| Le sessioni di addestramento prolungate causano la perdita di informazioni | Addestramento SLAO multi-sessione |
|
|
70
|
+
|
|
71
|
+
## Caratteristiche principali
|
|
72
|
+
|
|
73
|
+
- **Senza interfaccia grafica per design**: Progettato per pipeline CI/CD, flussi di lavoro automatizzati ed esecuzione programmatica.
|
|
74
|
+
- **Impostazioni predefinite intelligenti**: Configura automaticamente gli iperparametri ottimali in base all'hardware e al dataset.
|
|
75
|
+
- **Addestramento SLAO multi-sessione**: Strategie di addestramento avanzate per prevenire la perdita di informazioni durante le sessioni di addestramento prolungate.
|
|
76
|
+
- **Supporto completo per Windows**: Testato e ottimizzato per gli ambienti Windows, evitando i problemi comuni di PyTorch/CUDA.
|
|
77
|
+
- **Esportazione semplificata**: Esportazione con un solo clic nel formato GGUF e registrazione automatica con Ollama.
|
|
78
|
+
- **Architettura modulare**: Installa solo le dipendenze necessarie (ad esempio, `[unsloth]`, `[ui]`, `[export]`).
|
|
79
|
+
|
|
80
|
+
## Installazione
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
pip install backpropagate # Core only (minimal)
|
|
84
|
+
pip install backpropagate[unsloth] # + Unsloth 2x faster training
|
|
85
|
+
pip install backpropagate[ui] # + Reflex (Radix UI) web interface
|
|
86
|
+
pip install backpropagate[standard] # unsloth + ui (recommended)
|
|
87
|
+
pip install backpropagate[full] # Everything
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
| Extra | Descrizione | Dipendenze |
|
|
91
|
+
|-------|-------------|--------------|
|
|
92
|
+
| `unsloth` | Addestramento 2 volte più veloce, 50% in meno di VRAM | unsloth |
|
|
93
|
+
| `ui` | Interfaccia utente web Reflex (Radix UI) | reflex>=0.9.2, fastapi>=0.115 |
|
|
94
|
+
| `validation` | Validazione della configurazione Pydantic | pydantic, pydantic-settings |
|
|
95
|
+
| `export` | Esportazione GGUF per Ollama | llama-cpp-python |
|
|
96
|
+
| `monitoring` | WandB + monitoraggio del sistema (integrato automaticamente nel trainer dalla versione 1.1.0) | wandb, psutil |
|
|
97
|
+
| `observability` | Tracciamento OpenTelemetry | opentelemetry-api, opentelemetry-sdk |
|
|
98
|
+
| `logging` | Logging strutturato | structlog |
|
|
99
|
+
| `security` | Autenticazione JWT + generazione di token | PyJWT, cryptography |
|
|
100
|
+
| `production` | unsloth + ui + validation + logging + security | (bundle) |
|
|
101
|
+
|
|
102
|
+
**Requisiti:** Python 3.10+ · GPU CUDA (8GB+ di VRAM) · PyTorch 2.0+
|
|
103
|
+
|
|
104
|
+
### Prerequisiti della piattaforma
|
|
105
|
+
|
|
106
|
+
Backpropagate gestisce le problematiche specifiche dell'ambiente di esecuzione (multiprocessing, xformers su RTX 40/50, worker del dataloader su Windows). **Non** gestisce i problemi relativi all'installazione sulla piattaforma; risolvete prima quelli:
|
|
107
|
+
|
|
108
|
+
- **Versione del toolkit CUDA.** PyTorch viene rilasciato in base alla versione di CUDA; scegliere la versione sbagliata installa silenziosamente solo la versione per CPU. Utilizzate lo strumento di selezione all'indirizzo <https://pytorch.org/get-started/locally/> per ottenere il comando `pip install torch ...` corretto per il vostro driver. Eseguite `nvidia-smi` per visualizzare la versione del vostro driver/CUDA.
|
|
109
|
+
- **Windows.** Sono necessari Visual Studio Build Tools (C++) e CMake per l'extra `[export]` (costruzione di `llama-cpp-python` da sorgente). Il pacchetto `bitsandbytes` è ora disponibile nativamente per Windows (>= 0.43); le guide più vecchie che menzionano `bitsandbytes-windows` sono obsolete.
|
|
110
|
+
- **macOS.** L'addestramento con GPU **non è supportato**; non è disponibile CUDA. È possibile installare Backpropagate per eseguire l'inferenza su un file GGUF esportato tramite Ollama, ma `trainer.train()` genera un'eccezione `DEP_GPU_NOT_AVAILABLE`. Utilizzate una macchina con CUDA per l'addestramento.
|
|
111
|
+
- **Linux.** La maggior parte delle distribuzioni funziona immediatamente. Se state utilizzando la versione binaria distribuita tramite PyPI, tenete presente che la build per Linux utilizza solo la versione per CPU di torch (per rimanere al di sotto del limite di 2 GB per gli asset di rilascio di GitHub); installate prima la versione CUDA corrispondente da pytorch.org.
|
|
112
|
+
|
|
113
|
+
Per la risoluzione dei problemi di installazione, consultate [la pagina della guida alla risoluzione dei problemi](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/).
|
|
114
|
+
|
|
115
|
+
## Configurazione
|
|
116
|
+
|
|
117
|
+
Tutte le impostazioni possono essere sovrascritte tramite variabili d'ambiente utilizzando il prefisso `BACKPROPAGATE_` (ad esempio, `BACKPROPAGATE_LOG_LEVEL=debug`). Un file `.env` nella directory principale del progetto viene caricato automaticamente quando viene installato l'extra `[validation]`.
|
|
118
|
+
|
|
119
|
+
Impostazioni comuni (consultate [il riferimento completo delle variabili d'ambiente](https://mcp-tool-shop-org.github.io/backpropagate/handbook/env-vars/) per tutti i dettagli):
|
|
120
|
+
|
|
121
|
+
| Variabile | Valore predefinito | Note |
|
|
122
|
+
|----------|---------|-------|
|
|
123
|
+
| `BACKPROPAGATE_LOG_LEVEL` | `INFO` | `DEBUG` / `INFO` / `WARNING` / `ERROR` |
|
|
124
|
+
| `BACKPROPAGATE_LOG_JSON` | auto | Forza i log in formato JSON (`true`) o nella console (`false`) |
|
|
125
|
+
| `BACKPROPAGATE_LOG_FILE` | non impostato | Percorso per salvare i log |
|
|
126
|
+
| `BACKPROPAGATE_DEFER_FEATURE_DETECTION` | non impostato | Salta il rilevamento delle dipendenze opzionali all'avvio per un avvio più rapido della CLI |
|
|
127
|
+
| `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE` | `true` | Quando impostato su `true`, rifiuta `backprop ui --share` senza l'opzione `--auth` |
|
|
128
|
+
| `BACKPROPAGATE_UI__OUTPUT_DIR` | `~/.backpropagate/ui-outputs` | Directory di base per tutte le scritture del filesystem dell'interfaccia utente; con convalida della whitelist |
|
|
129
|
+
| `BACKPROPAGATE_MODEL__NAME` | `Qwen/Qwen2.5-7B-Instruct` | Modello predefinito |
|
|
130
|
+
| `BACKPROPAGATE_TRAINING__LEARNING_RATE` | `2e-4` | Learning rate (tasso di apprendimento) |
|
|
131
|
+
| `BACKPROPAGATE_LORA__R` | `16` | LoRA rank (grado di LoRA) |
|
|
132
|
+
|
|
133
|
+
Le chiavi nidificate utilizzano il doppio underscore come delimitatore (convenzione `env_nested_delimiter` di Pydantic).
|
|
134
|
+
|
|
135
|
+
## Utilizzo
|
|
136
|
+
|
|
137
|
+
### Addestramento di base
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
from backpropagate import Trainer
|
|
141
|
+
|
|
142
|
+
trainer = Trainer("Qwen/Qwen2.5-7B-Instruct")
|
|
143
|
+
trainer.train("my_data.jsonl", steps=100)
|
|
144
|
+
trainer.save("./my-model")
|
|
145
|
+
trainer.export("gguf", quantization="q4_k_m")
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`Qwen/Qwen2.5-7B-Instruct` è il valore predefinito; questo è il valore che `Trainer()` restituisce quando viene chiamato senza un argomento del modello (vedere [`config.py`](backpropagate/config.py) `ModelConfig.name`). Gli esempi precedenti utilizzavano `unsloth/Qwen2.5-7B-Instruct-bnb-4bit` quantizzato; abbiamo modificato il valore predefinito per utilizzare i pesi ufficiali di Qwen per una maggiore affidabilità ([CHANGELOG v0.1.3](CHANGELOG.md)). È possibile utilizzare entrambi i modelli.
|
|
149
|
+
|
|
150
|
+
### Addestramento SLAO multi-esecuzione
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
from backpropagate import Trainer
|
|
154
|
+
|
|
155
|
+
trainer = Trainer("Qwen/Qwen2.5-7B-Instruct")
|
|
156
|
+
|
|
157
|
+
result = trainer.multi_run(
|
|
158
|
+
dataset="HuggingFaceH4/ultrachat_200k",
|
|
159
|
+
num_runs=5,
|
|
160
|
+
steps_per_run=100,
|
|
161
|
+
samples_per_run=1000,
|
|
162
|
+
merge_mode="slao", # Single LoRA Continual Learning via Asymmetric Merging
|
|
163
|
+
)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
SLAO (Single LoRA Continual Learning via Asymmetric Merging) implementa l'articolo [Merge before Forget](https://arxiv.org/abs/2512.23017): inizializzazione ortogonale della matrice A tramite decomposizione QR, gestione asimmetrica di A/B e scalatura dipendente dal tempo `λ(i) = 1/√i`. Il flag della CLI è `--samples` (il campo sottostante è `samples_per_run`).
|
|
167
|
+
|
|
168
|
+
### Esportazione in Ollama
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
# Export to GGUF
|
|
172
|
+
result = trainer.export("gguf", quantization="q4_k_m")
|
|
173
|
+
|
|
174
|
+
# Register with Ollama separately
|
|
175
|
+
from backpropagate import register_with_ollama
|
|
176
|
+
register_with_ollama(result.path, "my-finetuned-model")
|
|
177
|
+
# ollama run my-finetuned-model
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### CLI
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
backprop train --data my_data.jsonl --model Qwen/Qwen2.5-7B-Instruct --steps 100
|
|
184
|
+
backprop multi-run --data my_data.jsonl --runs 5 --steps 100
|
|
185
|
+
backprop export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-name my-model
|
|
186
|
+
backprop ui --port 7862
|
|
187
|
+
backprop info
|
|
188
|
+
backprop list-runs # v1.1.0: query past training runs
|
|
189
|
+
backprop show-run <run-id> # v1.1.0: detail view
|
|
190
|
+
backprop resume <run-id> # v1.1.0: resume a crashed multi-run
|
|
191
|
+
backprop push ./output/lora --repo me/my-model # v1.1.0: push adapter to HF Hub
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Consultate [il riferimento della CLI](https://mcp-tool-shop-org.github.io/backpropagate/handbook/cli-reference/) per tutti i sottocomandi e i flag, oppure eseguite `backprop <sottocomando> --help`.
|
|
195
|
+
|
|
196
|
+
### Ripresa da checkpoint (v1.1.0)
|
|
197
|
+
|
|
198
|
+
Un'esecuzione multi-run che si interrompe al run 4 è ora recuperabile. Ogni sessione multi-run scrive il suo `run_id` sia in `run_history.json` che nel manifest delle checkpoint salvate su disco, quindi per riprendere da dove si era interrotto, è sufficiente un comando.
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
backprop resume <run-id> # picks up the in-progress session
|
|
202
|
+
backprop multi-run --data ... --resume <run-id> # explicit form
|
|
203
|
+
backprop train --data ... --resume <run-id> # single-run resume (continues run_id)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Il comportamento predefinito di `backprop multi-run` (senza `--resume`) rileva automaticamente un'esecuzione in corso per la stessa directory di output e la continua. Per forzare una nuova sessione, utilizzare `resume_from="off"` (API Python) oppure omettere `--resume` e avviare in una nuova directory di output.
|
|
207
|
+
|
|
208
|
+
Quando una multi-run viene ripresa, l'ultima checkpoint per quel `run_id` viene caricata nel modello, lo stato del merger SLAO viene ripristinato dalla directory `slao/` accanto alla checkpoint, e il ciclo di esecuzione continua da `last_completed_run + 1`. Lo stato della voce nella cronologia viene riportato a `running`, quindi `backprop list-runs --status running` mostra la sessione in corso.
|
|
209
|
+
|
|
210
|
+
### Tracciamento degli esperimenti (v1.1.0)
|
|
211
|
+
|
|
212
|
+
`Trainer` rileva automaticamente i tracker di esperimenti installati (`wandb`, `tensorboard`, `mlflow`) e li integra con i `transformers.TrainingArguments` sottostanti. Il valore predefinito `report_to="auto"` utilizza qualsiasi libreria importabile:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
pip install backpropagate[monitoring] # installs wandb + psutil
|
|
216
|
+
wandb login # one-time
|
|
217
|
+
backprop train --data my_data.jsonl # W&B run gets the same run_id prefix as the on-disk history
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Per disabilitare esplicitamente, utilizzare `Trainer(report_to=["wandb"])`, `Trainer(report_to=["tensorboard"])` oppure `Trainer(report_to="none")`. Per MLflow, installare `pip install mlflow`; per TensorBoard, installare `pip install tensorboard`. Il nome dell'esecuzione W&B è `backprop-<run_id_prefix>`, quindi un operatore può utilizzare `grep` su W&B, i nostri log e `run_history.json` utilizzando lo stesso identificatore.
|
|
221
|
+
|
|
222
|
+
### Cronologia dell'addestramento
|
|
223
|
+
|
|
224
|
+
Ogni invocazione di `backprop train` e `backprop multi-run` registra una riga in `<output>/run_history.json` con il `run_id`, il modello, il dataset, gli iperparametri, lo stato, la perdita finale, la cronologia delle perdite e, per le multi-run, la cronologia del merger SLAO. Per visualizzare le esecuzioni recenti:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
backprop list-runs # most recent 20 runs, all statuses
|
|
228
|
+
backprop list-runs --status failed # filter
|
|
229
|
+
backprop list-runs --json --limit 100 # machine-readable
|
|
230
|
+
backprop show-run abcd1234 # detail view (partial run_id ok)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
La cronologia delle esecuzioni viene mantenuta anche tra i processi: la scheda "Runs" nell'interfaccia web è una visualizzazione separata in memoria; la cronologia salvata su disco è la fonte di verità per `list-runs` / `show-run` / `resume`.
|
|
234
|
+
|
|
235
|
+
### Interfaccia web
|
|
236
|
+
|
|
237
|
+
Avviare l'interfaccia Reflex localmente:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
backprop ui --port 7862
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Per esporre un URL accessibile da Internet, è necessario associare `--share` a `--auth`:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
backprop ui --share --auth alice:hunter2
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
`backprop ui --share` senza `--auth` termina con il codice `1` e l'errore strutturato `[INPUT_AUTH_REQUIRED]`. La motivazione è che `--share` pubblica un URL `*.gradio.live` che chiunque su Internet può raggiungere, e senza autenticazione, ciò significa che chiunque può controllare la pipeline di addestramento.
|
|
250
|
+
|
|
251
|
+
Per disabilitare esplicitamente (ad esempio, in un ambiente di sviluppo interno), impostare la variabile d'ambiente `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE=false`. Verrà visualizzato un avviso ben visibile ad ogni avvio, e c'è un periodo di grazia di 5 secondi prima che l'interfaccia utente non autenticata venga caricata, quindi è possibile premere `Ctrl-C` se qualcosa non sembra corretto.
|
|
252
|
+
|
|
253
|
+
Le scritture sul file system dall'interfaccia utente sono limitate a una singola directory:
|
|
254
|
+
|
|
255
|
+
- Predefinito: `~/.backpropagate/ui-outputs`
|
|
256
|
+
- Override: `BACKPROPAGATE_UI__OUTPUT_DIR=/path/you/own`
|
|
257
|
+
- L'override è **validato tramite una lista di esclusione**: i percorsi di sistema/credenziali (`/etc`, `/var`, `~/.ssh`, `~/.aws`, `C:\Windows\System32`, ecc.) vengono rifiutati con `[UI_OUTPUT_DIR_FORBIDDEN]`.
|
|
258
|
+
|
|
259
|
+
## Supporto per Windows
|
|
260
|
+
|
|
261
|
+
Backpropagate è progettato per funzionare su Windows senza modifiche:
|
|
262
|
+
|
|
263
|
+
- Pre-tokenizzazione per evitare crash dovuti all'uso di multiprocessing
|
|
264
|
+
- Disabilitazione automatica di xformers per le serie RTX 40/50
|
|
265
|
+
- Impostazioni del dataloader sicure
|
|
266
|
+
- Testato su RTX 5080 (16GB di VRAM)
|
|
267
|
+
|
|
268
|
+
## Modelli predefiniti
|
|
269
|
+
|
|
270
|
+
| Modello | VRAM | Velocità | Qualità |
|
|
271
|
+
|--------|------|-------|---------|
|
|
272
|
+
| Qwen 2.5 7B | ~12GB | Media | Ottima |
|
|
273
|
+
| Qwen 2.5 3B | ~8GB | Veloce | Buona |
|
|
274
|
+
| Llama 3.2 3B | ~8GB | Veloce | Buona |
|
|
275
|
+
| Llama 3.2 1B | ~6GB | Velocissimo | Base |
|
|
276
|
+
| Mistral 7B | ~12GB | Media | Buona |
|
|
277
|
+
|
|
278
|
+
## Architettura
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
backpropagate/
|
|
282
|
+
├── trainer.py # Core Trainer class
|
|
283
|
+
├── multi_run.py # Multi-run SLAO training
|
|
284
|
+
├── slao.py # SLAO LoRA merging algorithm
|
|
285
|
+
├── datasets.py # Dataset loading, filtering & curriculum
|
|
286
|
+
├── export.py # GGUF/Ollama export
|
|
287
|
+
├── config.py # Pydantic settings + training presets
|
|
288
|
+
├── gpu_safety.py # GPU monitoring & safety
|
|
289
|
+
├── cli.py # CLI entry point (backprop command)
|
|
290
|
+
├── checkpoints.py # Checkpoint management
|
|
291
|
+
├── exceptions.py # Structured error hierarchy
|
|
292
|
+
├── feature_flags.py # Optional feature detection
|
|
293
|
+
├── security.py # Path traversal & torch security
|
|
294
|
+
├── logging_config.py # Structured logging setup
|
|
295
|
+
├── ui_theme.py # Radix theme tokens + CSS (Reflex era)
|
|
296
|
+
├── ui_state.py # rx.State subclasses
|
|
297
|
+
├── ui_app/ # Reflex web interface (Radix UI)
|
|
298
|
+
│ ├── app.py # rx.App entry point
|
|
299
|
+
│ ├── chrome.py # Header / LeftNav / SideRail / Footer
|
|
300
|
+
│ ├── pages/ # Train / Multi-Run / Export / Dataset
|
|
301
|
+
│ └── components/ # Bp* primitives (status pill, sparkline, event log…)
|
|
302
|
+
├── ui_security.py # Rate limiting, CSRF, file validation (framework-agnostic)
|
|
303
|
+
├── ui_gradio_legacy.py # DEPRECATED — preserved as v1.0 reference; removed in v1.2
|
|
304
|
+
└── theme_gradio_legacy.py # DEPRECATED — same
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Risoluzione dei problemi
|
|
308
|
+
|
|
309
|
+
Un breve indice degli errori più comuni che si verificano all'avvio. L'indice completo è disponibile nella [pagina del manuale di risoluzione dei problemi](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/); ogni codice riportato di seguito è documentato nella sezione [codici di errore](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/).
|
|
310
|
+
|
|
311
|
+
| Sintomo | Codice | Soluzione |
|
|
312
|
+
|---------|------|-----|
|
|
313
|
+
| La GPU esaurisce la memoria durante l'addestramento. | `RUNTIME_GPU_OOM` | Il meccanismo di ripristino automatico OOM (B-002) riduce automaticamente la dimensione del batch fino a 3 volte. Per disabilitarlo: `Trainer(oom_recovery=False)`. Per forzare una dimensione inferiore: `--batch-size 1`. |
|
|
314
|
+
| Il servizio HF Hub restituisce un errore 401 / "modello non trovato". | `DEP_MODEL_LOAD_FAILED` | Eseguire `huggingface-cli login` e riprovare. In caso di errori di battitura, copiare l'ID esatto da <https://huggingface.co/models>. |
|
|
315
|
+
| Errore nel nome del modello. | `INPUT_VALIDATION_FAILED` o `DEP_MODEL_LOAD_FAILED`. | Verificare l'identificatore `org/name` su <https://huggingface.co/models>. |
|
|
316
|
+
| Impossibile connettersi a `register_with_ollama`. | `DEP_OLLAMA_REGISTRATION_FAILED` | Avviare il demone: `ollama serve`. Installare da <https://ollama.com>. Operazione riprovare. |
|
|
317
|
+
| Disco pieno durante il salvataggio del checkpoint. | `STATE_CHECKPOINT_INVALID` | In caso di crash, le scritture atomiche lasciano una directory `.partial` che può essere eliminata in sicurezza. Il checkpoint valido precedente è intatto. |
|
|
318
|
+
| L'addestramento viene interrotto/annullato a causa del surriscaldamento della GPU. | `RUNTIME_GPU_TEMPERATURE_CRITICAL` | B-003: il monitor si interrompe quando si supera la soglia di temperatura NVML; riprende automaticamente quando la GPU si raffredda. Migliorare il flusso d'aria o ridurre il carico sostenuto. |
|
|
319
|
+
| `backprop ui --share` viene rifiutato. | `INPUT_AUTH_REQUIRED` | Fornire `--auth user:password` oppure impostare `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE=false` per disabilitare questa funzionalità (con un avviso). |
|
|
320
|
+
| "Sovrapposizione" di esecuzioni multiple durante la validazione. | `CONFIG_INVALID` (Backend Stage A B-001). | Ridurre il valore di `--samples` al di sotto della dimensione del pool di addestramento, aumentare le dimensioni del dataset o disabilitare la validazione. |
|
|
321
|
+
| Esportazione GGUF non riuscita al primo tentativo. | `RUNTIME_GGUF_EXPORT_FAILED` | Eseguire `pip install backpropagate[export]`; su Windows è necessario anche Visual C++ Build Tools + CMake. |
|
|
322
|
+
|
|
323
|
+
## Segnalazione di bug
|
|
324
|
+
|
|
325
|
+
Quando si verifica un errore, Backpropagate stampa una riga `run_started run_id=<uuid>` all'avvio e associa lo stesso ID ai manifest dei checkpoint, alla cronologia di unione SLAO e alle righe del log strutturato. Includere l'`run_id` in qualsiasi segnalazione di bug: questo consente all'amministratore di correlare ogni riga del log, ogni checkpoint e ogni unione per quella specifica esecuzione.
|
|
326
|
+
|
|
327
|
+
Una segnalazione di bug efficace include:
|
|
328
|
+
|
|
329
|
+
1. **`run_id`** — l'UUID stampato all'avvio (disponibile anche come `TrainingRun.run_id` e `RunResult.run_id`).
|
|
330
|
+
2. **Il codice di errore** — la riga `[CODE_NAME]: message` nell'output di errore standard (stderr); consultare la [sezione dei codici di errore](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/) per l'elenco completo.
|
|
331
|
+
3. **La riga di comando senza informazioni sensibili.** L'output di errore standard (stderr) viene automaticamente oscurato in modalità non dettagliata (i token di autorizzazione, le stringhe che iniziano con `sk-*`, `hf_*`, le chiavi AWS, le coppie `password=/token=/api_key=` vengono rimosse) e può essere incollata in sicurezza. Per ottenere la traccia completa e non oscurata, eseguire nuovamente il comando con l'opzione `--verbose`, ma esaminare l'output prima di pubblicarlo.
|
|
332
|
+
4. **Versioni di Python / PyTorch, modello della GPU, sistema operativo.** Il comando `backprop info` stampa tutte queste informazioni in un'unica volta.
|
|
333
|
+
|
|
334
|
+
## Privacy
|
|
335
|
+
|
|
336
|
+
Tutto l'addestramento avviene localmente sulla GPU. Backpropagate non effettua richieste di rete, ad eccezione del download dei modelli da HuggingFace (che viene avviato dall'utente). Non sono presenti telemetrie né dipendenze dal cloud.
|
|
337
|
+
|
|
338
|
+
## Valutazione
|
|
339
|
+
|
|
340
|
+
| Categoria | Punteggio | Note |
|
|
341
|
+
|----------|-------|-------|
|
|
342
|
+
| A. Sicurezza | 6/8 | SECURITY.md, modello affidabile, nessuna informazione sensibile/telemetria, safe_path(). Gli elementi MCP sono esclusi. |
|
|
343
|
+
| B. Gestione degli errori | 5/7 | Struttura delle eccezioni (`codice`/`messaggio`/`suggerimento`/`causa`/`riprovabile`) tramite il registro ERROR_CODES; codici di uscita della CLI: 0/1/2/3; nessuna traccia dello stack non elaborata senza l'opzione `--verbose`; correlazione `run_id`; output di errore standard oscurato; controllo di accesso con `--share`+`--auth`. MCP/desktop/vscode esclusi. |
|
|
344
|
+
| C. Documentazione per gli operatori | 4/7 | README, CHANGELOG, LICENZA, --help. Logging/MCP/funzionalità complesse esclusi. |
|
|
345
|
+
| D. Igiene del rilascio | 6/9 | verify.sh, versione=tag, 5 scanner nell'integrazione continua, dependabot, python_requires, build pulito. |
|
|
346
|
+
| E. Identità | 4/4 | Logo, traduzioni, pagina di destinazione, metadati. |
|
|
347
|
+
| **Total** | **25/31** | 14 elementi esclusi con motivazione · `shipcheck audit` supera il 100% · Data dell'audit: 2026-05-21 (la riga B è stata riclassificata dopo la fase B e il lavoro sui codici di uscita della CLI). |
|
|
348
|
+
|
|
349
|
+
Storia del design e a cosa corrisponde ogni elemento: vedere [ROADMAP.md](ROADMAP.md) — tutti gli elementi delle settimane 1-4 sono inclusi nella versione 1.1.0.
|
|
350
|
+
|
|
351
|
+
## Licenza
|
|
352
|
+
|
|
353
|
+
MIT — vedere [LICENSE](LICENSE) per i dettagli.
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
<p align="center">
|
|
358
|
+
Built by <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|
|
359
|
+
</p>
|