@mcptoolshop/backpropagate 1.0.5 → 1.1.1

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.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>