@mcptoolshop/backpropagate 1.1.1 → 1.3.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.es.md CHANGED
@@ -10,144 +10,152 @@
10
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
11
  <a href="https://pypi.org/project/backpropagate/"><img src="https://img.shields.io/pypi/v/backpropagate" alt="PyPI"></a>
12
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="https://scorecard.dev/viewer/?uri=github.com/mcp-tool-shop-org/backpropagate"><img src="https://api.scorecard.dev/projects/github.com/mcp-tool-shop-org/backpropagate/badge" alt="OpenSSF Scorecard"></a>
13
14
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
14
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>
15
16
  </p>
16
17
 
17
- **Ajuste fino de LLM sin interfaz gráfica en 3 líneas. Configuraciones predeterminadas inteligentes, ajuste automático del tamaño de los lotes según la VRAM, entrenamiento SLAO en múltiples ejecuciones y exportación a GGUF con un solo clic para Ollama.**
18
+ # Entrena un adaptador. Envíalo a Ollama. ¡Listo!
18
19
 
19
- *SLAO es Single LoRA Continual Learning via Asymmetric Merging, una técnica de combinación entre ejecuciones que evita el olvido catastrófico durante las campañas de ajuste fino prolongadas ([artículo](https://arxiv.org/abs/2512.23017)).*
20
+ Backpropagate es una biblioteca de Python para el ajuste fino de modelos de lenguaje grandes en una sola GPU. Tres líneas de código entrenan un modelo de 7B en una tarjeta de 16GB. Un comando más lo exporta a Ollama para que puedas ejecutar tu ajuste fino con `ollama run`. Funciona perfectamente en Windows.
20
21
 
21
- *Entrena LLM con 3 líneas de código. Exporte a Ollama con una línea más.*
22
+ ```python
23
+ from backpropagate import Trainer
22
24
 
23
- ## Inicio rápido
25
+ trainer = Trainer("Qwen/Qwen2.5-7B-Instruct")
26
+ trainer.train("my_data.jsonl", steps=100)
27
+ trainer.export("gguf", quantization="q4_k_m")
28
+ ```
24
29
 
25
30
  ```bash
26
- pip install backpropagate[standard]
31
+ backprop ollama register ./output/lora --name my-model
32
+ ollama run my-model
27
33
  ```
28
34
 
29
- ```python
30
- from backpropagate import Trainer
35
+ Eso es todo. No hay un archivo de configuración YAML. No hay una "ceremonia" de `accelerate launch`. No hay un tutorial separado para "convertirlo a GGUF". Si tienes una GPU con CUDA y un archivo JSONL con tus datos de entrenamiento, estás a solo tres líneas de tener un ajuste fino funcional.
31
36
 
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
- ```
37
+ ## Instalación
36
38
 
37
- El repositorio incluye un pequeño archivo `examples/quickstart.jsonl` (5 ejemplos en formato ShareGPT) para que el fragmento de código anterior se ejecute de extremo a extremo en una instalación limpia. Para su propio entrenamiento, consulte el formato de conjunto de datos [Dataset Format](#dataset-format) a continuación.
39
+ ```bash
40
+ # Recommended: isolated Python install (no conflicts with system Python or other projects)
41
+ pipx install backpropagate
38
42
 
39
- ### Opción sin código: Interfaz web
43
+ # Or via uv (faster install, same isolation)
44
+ uv tool install backpropagate
40
45
 
41
- ¿Prefiere una interfaz gráfica en lugar de una terminal de Python? Instale el paquete correspondiente y ejecute:
46
+ # Standard pip (if you manage your own virtualenv)
47
+ pip install backpropagate
48
+ ```
49
+
50
+ Si quieres las funciones opcionales, reemplaza la instalación con una de estas:
42
51
 
43
52
  ```bash
44
- pip install backpropagate[standard]
45
- backprop ui --port 7862
53
+ pipx install "backpropagate[standard]" # adds Unsloth (2x faster training) + the web UI
54
+ pipx install "backpropagate[full]" # adds everything: unsloth, ui, monitoring, export, etc.
46
55
  ```
47
56
 
48
- La interfaz de Reflex (Radix UI) le permite seleccionar un archivo JSONL, elegir un modelo, entrenar y exportar, sin necesidad de Python. La interfaz es local; para acceder desde Internet, consulte la sección [Web UI](#web-ui) a continuación, donde se explica el contrato de seguridad `--share` + `--auth` y las opciones de túnel admitidas (Cloudflare Tunnel, ngrok).
57
+ ¿Prefieres Docker? `docker pull ghcr.io/mcp-tool-shop-org/backpropagate:latest` también funciona. Las imágenes están disponibles para `linux/amd64` y `linux/arm64`, por lo que los usuarios de Apple Silicon y ARM Linux obtienen una imagen nativa. Un archivo `compose.yaml` canónico para "UI en un contenedor" se encuentra en la raíz del repositorio; `docker compose up` inicia la interfaz web en `http://localhost:7860` con un volumen persistente `~/.backpropagate` montado.
49
58
 
50
- ## Formato del conjunto de datos
59
+ ## Dónde encaja Backpropagate
51
60
 
52
- Su archivo de entrenamiento en formato JSONL debe tener un ejemplo por línea. El formato más sencillo es el chat de ShareGPT:
61
+ Existen varias bibliotecas excelentes para el ajuste fino de LLM. Cada una es excelente para diferentes cosas:
53
62
 
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
- ```
63
+ - **[Axolotl](https://github.com/OpenAccess-AI-Collective/axolotl)**: si te gustan las configuraciones YAML y quieres una comunidad de recetas para copiar.
64
+ - **[LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)**: si quieres una GUI web y soporte integrado para DPO/PPO/RLHF.
65
+ - **[Unsloth](https://github.com/unslothai/unsloth)**: si necesitas el entrenamiento más rápido posible y estás utilizando una familia de modelos compatible.
66
+ - **[torchtune](https://github.com/pytorch/torchtune)**: si quieres las recetas nativas de PyTorch de Meta que puedes editar.
58
67
 
59
- También se admiten formatos Alpaca (`instruction`/`output`), OpenAI chat (`messages`) y texto sin formato. Consulte `examples/quickstart.jsonl` para obtener un punto de partida que se puede copiar.
68
+ Backpropagate es la opción que falta: **una API de Python de 3 líneas para usuarios individuales en una sola GPU de consumo que desean entrenar un adaptador y enviarlo.** Sin YAML, sin GUI, sin DPO/PPO, sin nodos múltiples. Solo el bucle que realmente necesita todo el mundo y el paso de exportación que dificulta las cosas.
60
69
 
61
- ## ¿Por qué propagar hacia atrás?
70
+ Si has probado alguna de las bibliotecas anteriores y te has sentido frustrado por la "ceremonia" del archivo de configuración, o has encontrado una limitación en la familia de modelos, o querías configuraciones predeterminadas para Windows: Backpropagate es para ti.
62
71
 
63
- | Problema | Solución |
64
- |---------|----------|
65
- | El ajuste fino es complejo | 3 líneas: cargar, entrenar, guardar |
66
- | Windows es un problema | Soporte completo para Windows |
67
- | La gestión de la VRAM es difícil | Ajuste automático del tamaño de los lotes, monitoreo de la GPU |
68
- | La exportación de modelos es confusa | Exportación a GGUF con un solo clic + registro automático en Ollama |
69
- | Las ejecuciones prolongadas causan olvido | Entrenamiento SLAO en múltiples ejecuciones |
72
+ ## Lo que puedes ajustar en una GPU de consumo de 16GB
70
73
 
71
- ## Características principales
74
+ Aquí tienes un rango práctico en una tarjeta de 16GB (RTX 4080 / 5080 / 4070 Ti Super):
72
75
 
73
- - **Diseñado para funcionar sin interfaz gráfica:** Ideal para pipelines de CI/CD, flujos de trabajo automatizados y ejecución programática.
74
- - **Configuraciones predeterminadas inteligentes:** Configura automáticamente los hiperparámetros óptimos según su hardware y conjunto de datos.
75
- - **Entrenamiento SLAO en múltiples ejecuciones:** Estrategias de entrenamiento avanzadas para evitar el olvido catastrófico durante las ejecuciones prolongadas.
76
- - **Soporte completo para Windows:** Probado y optimizado para entornos Windows, evitando problemas comunes de PyTorch/CUDA.
77
- - **Exportación sencilla:** Exportación con un solo clic al formato GGUF y registro automático en Ollama.
78
- - **Arquitectura modular:** Instale solo las dependencias que necesita (por ejemplo, `[unsloth]`, `[ui]`, `[export]`).
76
+ | Modelo | Método | Estado |
77
+ |---|---|---|
78
+ | Qwen-3.5-4B / Phi-4-mini-3.8B / SmolLM3-3B | LoRA / QLoRA / DoRA | Cómodo. Longitud de secuencia completa, con espacio de sobra. |
79
+ | Qwen-2.5-7B / Llama-3.1-8B / Mistral-7B | QLoRA | Estándar. ~7-8 GB. Configuraciones predeterminadas de Backpropagate. |
80
+ | Llama-3 13B | QLoRA + empaquetado de muestras | Apretado pero funciona. Usa secuencias más cortas. |
81
+ | Mixtral 8x7B (47B de parámetros totales) | AQLM de 2 bits + LoRA | Experimental en v1.4. El modelo más grande que puedes usar en una tarjeta de 16GB. |
79
82
 
80
- ## Instalación
83
+ Para modelos de 3B y menos, el ajuste fino completo (no solo LoRA) es factible en 16GB y está planeado como una opción `mode="full"` para v1.4. Para modelos de 7B o más, el ajuste fino completo requiere una GPU de 24GB o más: considera alquilar una instancia de A100 en la nube, o quédate con LoRA, que la investigación reciente muestra que coincide con la calidad del ajuste fino completo en la mayoría de las tareas posteriores al entrenamiento (consulta la sección "lo que Backpropagate no es" para obtener citas).
81
84
 
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
- ```
85
+ ## Lo que Backpropagate NO es
89
86
 
90
- | Paquetes adicionales | Descripción | Dependencias |
91
- |-------|-------------|--------------|
92
- | `unsloth` | Entrenamiento 2 veces más rápido, 50% menos de VRAM | unsloth |
93
- | `ui` | Interfaz web Reflex (Radix UI) | reflex>=0.9.2, fastapi>=0.115 |
94
- | `validation` | Validación de configuración de Pydantic | pydantic, pydantic-settings |
95
- | `export` | Exportación a GGUF para Ollama | llama-cpp-python |
96
- | `monitoring` | WandB + monitoreo del sistema (integrado automáticamente en el entrenador en v1.1.0) | wandb, psutil |
97
- | `observability` | Trazado de OpenTelemetry | opentelemetry-api, opentelemetry-sdk |
98
- | `logging` | Registro estructurado | structlog |
99
- | `security` | Autenticación JWT + generación de tokens | PyJWT, cryptography |
100
- | `production` | unsloth + ui + validación + registro + seguridad | (paquete) |
87
+ La honestidad ayuda a todos. Backpropagate no hace estas cosas, e intentar que lo haga sería una experiencia peor que buscar la herramienta adecuada:
101
88
 
102
- **Requisitos:** Python 3.10+ · GPU con CUDA (8GB+ de VRAM) · PyTorch 2.0+
89
+ - **Ajuste fino completo de parámetros para modelos de 7B+** — Backpropagate utiliza LoRA/QLoRA, que entrena un adaptador pequeño en lugar de actualizar cada peso. Para modelos de 7B y superiores, el ajuste fino completo requiere 24 GB+ de memoria de GPU y no cabe en una tarjeta de consumo de 16 GB. Para modelos de 3B y menos, el ajuste fino completo SÍ es posible con 16 GB; se planea una opción `mode="full"` para la versión 1.4. En resumen: investigaciones recientes ([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/)) muestran que LoRA, con la configuración correcta, iguala la calidad del ajuste fino completo en la mayoría de las tareas posteriores al entrenamiento (seguimiento de instrucciones, adaptación de dominio, personalidad/estilo) con el 67% de la capacidad de cómputo; por lo tanto, para el trabajo que la mayoría de los usuarios realmente desean, no se pierde nada al usar LoRA. Si realmente necesita el ajuste fino completo de un modelo de 7B+, utilice `transformers.Trainer` de HuggingFace directamente en una tarjeta de 24 GB+.
90
+ - **DPO / PPO / GRPO / ajuste de preferencias** — Backpropagate solo realiza un ajuste fino supervisado en una sola etapa. Para el aprendizaje por preferencias, utilice TRL directamente o LLaMA-Factory.
91
+ - **Entrenamiento en múltiples nodos** — solo una GPU en una sola máquina. El uso de múltiples GPU en una sola máquina funciona (a través de `accelerate launch`), pero no está oficialmente soportado.
92
+ - **Entrenamiento en macOS** — Apple Silicon no tiene CUDA, por lo que el entrenamiento debe ejecutarse en una máquina con Linux o Windows con una GPU NVIDIA. Aún puede ejecutar el modelo entrenado en una Mac a través de Ollama.
93
+ - **Cualquier cosa fuera de las familias de modelos probadas** — Qwen 2.5 / 3.5 (7B / 4B), Phi-4-mini-3.8B, SmolLM3-3B, Llama 3.2 (3B / 1B), Mistral 7B. Otros modelos a menudo funcionan, pero no están incluidos en las pruebas automatizadas.
103
94
 
104
- ### Requisitos de la plataforma
95
+ Si necesita alguna de estas funciones, utilice una de las bibliotecas mencionadas anteriormente. Son mejores en eso.
105
96
 
106
- Backpropagate se encarga de las peculiaridades de la ejecución (multiproceso, xformers en RTX 40/50, trabajadores del cargador de datos en Windows). **No** se encarga de los problemas de instalación relacionados con la plataforma; resuélvalos primero:
97
+ ## Lo que Backpropagate le ofrece:
107
98
 
108
- - **Versión del kit de herramientas CUDA.** PyTorch se publica por versión de CUDA; elegir la versión incorrecta instala silenciosamente solo la versión de torch para CPU. Utilice el selector en <https://pytorch.org/get-started/locally/> para obtener el comando exacto `pip install torch ...` para su controlador. Ejecute `nvidia-smi` para ver la versión de su controlador/CUDA.
109
- - **Windows.** Visual Studio Build Tools (C++) y CMake son necesarios para el extra `[export]` (las compilaciones de `llama-cpp-python` se realizan desde el código fuente). El paquete `bitsandbytes` se publica ahora de forma nativa para Windows (>= 0.43); las guías anteriores que mencionan `bitsandbytes-windows` están desactualizadas.
110
- - **macOS.** El entrenamiento con GPU **no está soportado**; no hay CUDA. Puede instalar Backpropagate para ejecutar la *inferencia* en un modelo GGUF exportado a través de Ollama, pero `trainer.train()` genera un error `DEP_GPU_NOT_AVAILABLE`. Utilice una máquina con CUDA para el entrenamiento.
111
- - **Linux.** La mayoría de las distribuciones funcionan sin problemas. Si está utilizando la versión binaria de PyPI, tenga en cuenta que la compilación de Linux utiliza solo la versión de torch para CPU (para mantenerse dentro del límite de 2 GB de archivos adjuntos de lanzamiento de GitHub); instale primero el paquete CUDA correspondiente de pytorch.org.
99
+ Cuatro cosas, en una sola instalación:
112
100
 
113
- Para la resolución de problemas de instalación más detallada, consulte [la página del manual de solución de problemas](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/).
101
+ **1. Una API real de 3 líneas que funciona sin un archivo de configuración.**
102
+ El fragmento de código que se encuentra al principio de este archivo README se ejecuta de principio a fin. No requiere `accelerate config`, ni YAML, ni anulaciones de Hydra. Simplemente `Trainer(model).train(data)` y tendrá un modelo ajustado.
114
103
 
115
- ## Configuración
104
+ **2. Funcionalidad que realmente funciona en Windows.**
105
+ La mayoría de las bibliotecas de aprendizaje automático tratan a Windows como una opción secundaria. Backpropagate se prueba exhaustivamente en Windows + RTX 5080. La biblioteca se encarga de las peculiaridades del entorno de ejecución: sabe cómo pre-tokenizar sus datos para que el procesamiento multiproceso de Windows no se bloquee, desactiva automáticamente xformers en las tarjetas RTX 40/50 donde podría fallar, y selecciona la configuración del cargador de datos que no causa problemas. No tiene que saber nada de esto. Simplemente funciona.
116
106
 
117
- Todas las configuraciones se pueden sobrescribir con variables de entorno utilizando el prefijo `BACKPROPAGATE_` (por ejemplo, `BACKPROPAGATE_LOG_LEVEL=debug`). Un archivo `.env` en la raíz del proyecto se carga automáticamente cuando se instala el extra `[validation]`.
107
+ **3. Diseñado para ejecuciones no supervisadas.**
108
+ El entrenamiento lleva horas. No quiere tener que vigilarlo constantemente. Backpropagate está diseñado para que se pueda dejar funcionando:
118
109
 
119
- Parámetros comunes (consulte [la referencia completa de las variables de entorno](https://mcp-tool-shop-org.github.io/backpropagate/handbook/env-vars/) para obtener información completa):
110
+ - Si se queda sin memoria de GPU, reduce automáticamente el tamaño del lote e intenta de nuevo, hasta tres veces. No requiere ajuste manual.
111
+ - Si la GPU se calienta demasiado, se pausa hasta que se enfría y luego continúa.
112
+ - Cada punto de control se guarda de forma atómica: si su computadora portátil se bloquea durante el guardado, el punto de control anterior y válido sigue intacto.
113
+ - Cada ejecución de entrenamiento recibe un ID único que se imprime en cada línea de registro, cada punto de control y cada entrada de Weights & Biases. Si algo sale mal, un solo ID permite a un desarrollador correlacionar todo.
114
+ - Los errores vienen con códigos estables (`RUNTIME_GPU_OOM`, `DEP_OLLAMA_REGISTRATION_FAILED`, etc.) para que pueda buscar en sus registros y en la [guía de solución de problemas](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/) para encontrar la solución. Los fallos específicos de CUDA tienen una [página de solución de problemas de CUDA](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/) dedicada.
120
115
 
121
- | Variable | Valor predeterminado | Notas |
122
- |----------|---------|-------|
123
- | `BACKPROPAGATE_LOG_LEVEL` | `INFO` | `DEBUG` / `INFO` / `WARNING` / `ERROR` |
124
- | `BACKPROPAGATE_LOG_JSON` | auto | Fuerza registros en formato JSON (`true`) o en la consola (`false`) |
125
- | `BACKPROPAGATE_LOG_FILE` | no definido | Ruta para guardar los registros |
126
- | `BACKPROPAGATE_DEFER_FEATURE_DETECTION` | no definido | Omite la detección de dependencias opcionales al inicio para un inicio más rápido de la interfaz de línea de comandos. |
127
- | `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE` | `true` | Cuando es `true`, rechaza `backprop ui --share` sin `--auth` |
128
- | `BACKPROPAGATE_UI__OUTPUT_DIR` | `~/.backpropagate/ui-outputs` | Directorio base para todas las escrituras del sistema de archivos de la interfaz de usuario; validado por denylist. |
129
- | `BACKPROPAGATE_MODEL__NAME` | `Qwen/Qwen2.5-7B-Instruct` | Modelo predeterminado |
130
- | `BACKPROPAGATE_TRAINING__LEARNING_RATE` | `2e-4` | Tasa de aprendizaje |
131
- | `BACKPROPAGATE_LORA__R` | `16` | Rango de LoRA |
116
+ **4. Un solo comando para pasar del adaptador entrenado a `ollama run`.**
117
+ Muchas bibliotecas entrenan un modelo. Pocas de ellas le permiten continuar una vez que realmente quiere usarlo. Backpropagate exporta a GGUF (el formato que utiliza Ollama) y registra un modelo de Ollama con un solo comando. Pasa de "entrenamiento completado" a "puedo chatear con mi modelo ajustado" en aproximadamente 30 segundos.
132
118
 
133
- Las claves anidadas utilizan el doble guion bajo como delimitador (convención de Pydantic `env_nested_delimiter`).
119
+ ## Cómo empezar
134
120
 
135
- ## Uso
121
+ El repositorio incluye un conjunto de datos de ejemplo pequeño para que el fragmento de código que se muestra al principio de este archivo README se ejecute correctamente en una instalación limpia:
136
122
 
137
- ### Entrenamiento básico
123
+ ```bash
124
+ pipx install "backpropagate[standard]"
138
125
 
139
- ```python
126
+ python -c "
140
127
  from backpropagate import Trainer
128
+ trainer = Trainer('Qwen/Qwen2.5-7B-Instruct')
129
+ trainer.train('examples/quickstart.jsonl', steps=10)
130
+ trainer.export('gguf', quantization='q4_k_m')
131
+ "
132
+ ```
141
133
 
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")
134
+ Esto entrena un adaptador Qwen 2.5 de 7B con 5 conversaciones cortas en formato ShareGPT, y luego exporta el resultado a GGUF. Para sus propios datos, formatee su archivo JSONL con un ejemplo por línea:
135
+
136
+ ```jsonl
137
+ {"conversations": [{"from": "human", "value": "What is Python?"}, {"from": "gpt", "value": "A programming language."}]}
138
+ {"conversations": [{"from": "human", "value": "Explain recursion."}, {"from": "gpt", "value": "A function that calls itself."}]}
139
+ ```
140
+
141
+ También funcionan los formatos de Alpaca (`instruction` / `output`), OpenAI chat (`messages`) y texto sin formato; Backpropagate detecta automáticamente el formato.
142
+
143
+ Para flujos de trabajo más completos (ajuste fino y publicación en Hugging Face Hub, reanudación después de errores de memoria, ejecuciones múltiples de SLAO durante una campaña larga, etc.), consulte la [página de recetas del manual](https://mcp-tool-shop-org.github.io/backpropagate/handbook/recipes/).
144
+
145
+ ### Interfaz web (opcional)
146
+
147
+ Si prefiere hacer clic en lugar de escribir código Python, instale el paquete de la interfaz de usuario y ejecútelo:
148
+
149
+ ```bash
150
+ pipx install "backpropagate[ui]"
151
+ backprop ui --port 7862
146
152
  ```
147
153
 
148
- `Qwen/Qwen2.5-7B-Instruct` es el valor predeterminado canónico; el valor `Trainer()` se resuelve cuando se llama sin un argumento de modelo (consulte [`config.py`](backpropagate/config.py) `ModelConfig.name`). Los ejemplos anteriores utilizaban `unsloth/Qwen2.5-7B-Instruct-bnb-4bit` pre-cuantizado; hemos cambiado el valor predeterminado a los pesos oficiales de Qwen para una mejor fiabilidad ([REGISTRO DE CAMBIOS v0.1.3](CHANGELOG.md)). Cualquier modelo funciona.
154
+ Se abre una interfaz web local en `http://localhost:7862`, donde puede seleccionar un conjunto de datos, elegir un modelo, entrenar y exportar. La interfaz de usuario solo funciona localmente de forma predeterminada. Para permitir el acceso desde otros dispositivos, consulte la sección [Interfaz web](#web-ui) a continuación para obtener información sobre el contrato de seguridad `--share` + `--auth`.
155
+
156
+ ## Entrenamiento con múltiples ejecuciones
149
157
 
150
- ### Entrenamiento multi-ejecución SLAO
158
+ Si desea realizar un ajuste fino incremental en varios conjuntos de datos, por ejemplo, si recibe nuevos datos de entrenamiento cada semana y desea agregarlos sin olvidar lo que aprendió antes, el modo `multi_run` de Backpropagate es para usted:
151
159
 
152
160
  ```python
153
161
  from backpropagate import Trainer
@@ -159,198 +167,196 @@ result = trainer.multi_run(
159
167
  num_runs=5,
160
168
  steps_per_run=100,
161
169
  samples_per_run=1000,
162
- merge_mode="slao", # Single LoRA Continual Learning via Asymmetric Merging
163
170
  )
164
171
  ```
165
172
 
166
- SLAO (Aprendizaje continuo de LoRA único mediante fusión asimétrica) implementa el artículo [Merge before Forget](https://arxiv.org/abs/2512.23017): inicialización ortogonal de la matriz A mediante descomposición QR, manejo asimétrico de A/B y escalado dependiente del tiempo `λ(i) = 1/√i`. La opción de la interfaz de línea de comandos es `--samples` (el campo subyacente es `samples_per_run`).
167
-
168
- ### Exportación a 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
- ```
173
+ Esto realiza cinco pasadas de entrenamiento, fusionando el adaptador entre cada ejecución de una manera que preserva el conocimiento previo al tiempo que incorpora nuevos ejemplos. Esta técnica se basa en investigaciones recientes sobre aprendizaje continuo; consulte la sección [Referencias](#references) al final de este archivo README.
179
174
 
180
- ### Interfaz de línea de comandos
175
+ La versión de la línea de comandos:
181
176
 
182
177
  ```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
178
+ backprop multi-run --data my_data.jsonl --runs 5 --steps 100 --samples 1000
192
179
  ```
193
180
 
194
- Consulte [la referencia de la interfaz de línea de comandos](https://mcp-tool-shop-org.github.io/backpropagate/handbook/cli-reference/) para cada subcomando y opción, o ejecute `backprop <subcomando> --help`.
195
-
196
- ### Reanudación desde el punto de control (v1.1.0)
181
+ ## Reanudar desde un punto de control
197
182
 
198
- Una ejecución multi-ejecución que falla en la ejecución 4 ahora es recuperable. Cada sesión de ejecución multi-ejecución escribe su `run_id` tanto en `run_history.json` como en el manifiesto de puntos de control en el disco, por lo que para reanudar desde donde lo dejó, solo necesita un comando:
183
+ Una ejecución de entrenamiento de 5 pasadas que se interrumpe en la pasada 4 se puede recuperar. Cada sesión de entrenamiento con múltiples ejecuciones escribe su ID de ejecución en el historial y el manifiesto del punto de control almacenados en el disco, por lo que para reanudar desde donde lo dejó, solo necesita un comando:
199
184
 
200
185
  ```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)
186
+ backprop resume <run-id>
187
+ backprop multi-run --data ... --resume <run-id>
188
+ backprop train --data ... --resume <run-id> # single-run resume
204
189
  ```
205
190
 
206
- El comportamiento predeterminado de `backprop multi-run` (sin `--resume`) detecta automáticamente una entrada en curso para el mismo directorio de salida y la continúa. Para forzar una sesión limpia, pase `resume_from="off"` (API de Python) o omita `--resume` y comience en un directorio de salida nuevo.
191
+ El comportamiento predeterminado de `backprop multi-run` (sin `--resume`) detecta automáticamente una ejecución en curso en el mismo directorio de salida y la continúa. Para forzar un inicio limpio, especifique un directorio de salida nuevo.
207
192
 
208
- Cuando se reanuda una ejecución multi-ejecución, el último punto de control para ese `run_id` se carga en el modelo, el estado de fusión SLAO se restaura desde el directorio `slao/` junto al punto de control, y el bucle de ejecución continúa desde `last_completed_run + 1`. El estado de la entrada de historial cambia de nuevo a `running`, por lo que `backprop list-runs --status running` muestra la sesión activa.
193
+ ## Historial de entrenamiento
209
194
 
210
- ### Seguimiento de experimentos (v1.1.0)
211
-
212
- `Trainer` detecta automáticamente los rastreadores de experimentos instalados (`wandb`, `tensorboard`, `mlflow`) y los integra en los `transformers.TrainingArguments` subyacentes. El valor predeterminado `report_to="auto"` selecciona lo que sea importable:
195
+ Cada invocación de `backprop train` y `backprop multi-run` registra una fila en `<output>/run_history.json`, que incluye el modelo utilizado, el conjunto de datos, los hiperparámetros, el estado, la pérdida final y el historial de pérdidas. Puede enumerar e inspeccionar ejecuciones anteriores:
213
196
 
214
197
  ```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
198
+ backprop list-runs # last 20 runs
199
+ backprop list-runs --status failed # filter by status
200
+ backprop list-runs --json --limit 100 # machine-readable
201
+ backprop show-run abcd1234 # detail view (partial ID is fine)
218
202
  ```
219
203
 
220
- Para optar explícitamente por no usarlo, use `Trainer(report_to=["wandb"])`, `Trainer(report_to=["tensorboard"])` o `Trainer(report_to="none")`. Para MLflow, instale `pip install mlflow`; para TensorBoard, instale `pip install tensorboard`. El nombre de la ejecución de W&B es `backprop-<run_id_prefix>`, lo que permite a un operador buscar en W&B, nuestros registros y `run_history.json` utilizando el mismo identificador.
221
-
222
- ### Historial de entrenamiento
204
+ ## Seguimiento de experimentos
223
205
 
224
- Cada invocación de `backprop train` y `backprop multi-run` registra una fila en `<output>/run_history.json` con el `run_id`, el modelo, el conjunto de datos, los hiperparámetros, el estado, la pérdida final, el historial de pérdidas y, para las ejecuciones multi-ejecución, la línea de tiempo de fusión SLAO. Para ver las ejecuciones recientes:
206
+ Backpropagate detecta automáticamente los sistemas de seguimiento de experimentos instalados (Weights & Biases, TensorBoard, MLflow) y los integra. Si `wandb` está instalado y ha iniciado sesión, cada ejecución se registra automáticamente en W&B con un nombre de ejecución que coincide con el ID de ejecución almacenado en el disco, lo que le permite buscar en W&B, sus registros y `run_history.json` utilizando un único identificador.
225
207
 
226
208
  ```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)
209
+ pip install backpropagate[monitoring] # installs wandb + psutil
210
+ wandb login # one-time setup
211
+ backprop train --data my_data.jsonl
231
212
  ```
232
213
 
233
- El historial de ejecuciones persiste entre procesos; la pestaña `Runs` en la interfaz web es una vista en memoria; el historial en el disco es la fuente de verdad para `list-runs` / `show-run` / `resume`.
214
+ Puede anular este comportamiento con `Trainer(report_to=["wandb"])`, `Trainer(report_to=["tensorboard"])` o `Trainer(report_to="none")` para desactivarlo.
234
215
 
235
- ### Interfaz web
216
+ ## Interfaz web
236
217
 
237
- Inicie la interfaz de Reflex localmente:
218
+ La interfaz web de Reflex es opcional; instálela con `pipx install "backpropagate[ui]"` y ejecútela:
238
219
 
239
220
  ```bash
240
221
  backprop ui --port 7862
241
222
  ```
242
223
 
243
- Para exponer una URL accesible desde Internet, debe combinar `--share` con `--auth`:
224
+ La interfaz de usuario se ejecuta localmente en `http://localhost:7862`. Para permitir el acceso desde otros dispositivos (otras personas en su red, una URL pública, etc.), debe combinar `--share` (o `--host`) con `--auth`:
244
225
 
245
226
  ```bash
246
227
  backprop ui --share --auth alice:hunter2
247
228
  ```
248
229
 
249
- `backprop ui --share` sin `--auth` termina con el código `1` y el error estructurado `[INPUT_AUTH_REQUIRED]`. La razón: `--share` publica una URL `*.gradio.live` que cualquier persona en Internet puede acceder, y sin autenticación, eso significa que cualquier persona puede controlar su canal de entrenamiento.
230
+ `backprop ui --share` sin `--auth` genera un error. La razón es que `--share` publica una URL a la que cualquier persona en Internet puede acceder, y sin autenticación, eso significa que cualquier persona puede controlar su canal de entrenamiento y leer su token de Hugging Face. No hay forma de desactivar esta función; si no desea establecer credenciales, utilice el reenvío de puertos SSH en su lugar:
250
231
 
251
- Para optar explícitamente por no usarlo (por ejemplo, en un entorno de desarrollo interno), establezca la variable de entorno `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE=false`. Se imprimirá una advertencia audible en cada inicio, y hay un período de gracia de 5 segundos antes de que la interfaz de usuario sin autenticación se active, por lo que puede presionar `Ctrl-C` si parece incorrecta.
232
+ ```bash
233
+ # On the client:
234
+ ssh -L 7860:localhost:7860 <your-training-host>
235
+ # On the server:
236
+ backprop ui # no --share
237
+ # Then open http://localhost:7860 in your local browser
238
+ ```
252
239
 
253
- Las escrituras en el sistema de archivos desde la interfaz de usuario están aisladas en un solo directorio:
240
+ Consulte [handbook/security.md](https://mcp-tool-shop-org.github.io/backpropagate/handbook/security/) para obtener información detallada sobre el modelo de amenazas.
241
+
242
+ Las escrituras en el sistema de archivos desde la interfaz de usuario están restringidas a un solo directorio:
254
243
 
255
244
  - Predeterminado: `~/.backpropagate/ui-outputs`
256
- - Para sobrescribir: `BACKPROPAGATE_UI__OUTPUT_DIR=/path/you/own`
257
- - La sobrescritura está **validada mediante una lista de denegación**; las rutas del sistema/credenciales (`/etc`, `/var`, `~/.ssh`, `~/.aws`, `C:\Windows\System32`, etc.) se rechazan con `[UI_OUTPUT_DIR_FORBIDDEN]`.
245
+ - Para sobrescribir: establezca `BACKPROPAGATE_UI__OUTPUT_DIR=/ruta/propia`
246
+ - La sobrescritura se valida mediante una lista de denegación; se rechazan las rutas del sistema o de credenciales (`/etc`, `~/.ssh`, `~/.aws`, `C:\Windows\System32`, etc.).
258
247
 
259
- ## Soporte para Windows
248
+ ## Notas sobre la plataforma
260
249
 
261
- Backpropagate está diseñado para funcionar en Windows de forma predeterminada:
250
+ **Requisitos:** Python 3.10+ · GPU con CUDA (8GB+ de VRAM) · PyTorch 2.0+
262
251
 
263
- - Pre-tokenización para evitar fallos de multiprocesamiento
264
- - Desactivación automática de xformers para series RTX 40/50
265
- - Configuración segura del cargador de datos
266
- - Probado en RTX 5080 (16GB de VRAM)
252
+ Python 3.10 llegará al final de su vida útil en octubre de 2026, y Backpropagate planea eliminar el soporte para 3.10 en la versión 1.4. Para nuevas instalaciones, prefiera Python 3.11 o 3.12; 3.11 es la versión más probada.
267
253
 
268
- ## Preajustes de modelos
254
+ Backpropagate gestiona las peculiaridades del entorno de ejecución al entrenar en diferentes plataformas, pero no puede solucionar problemas de instalación. Los dos problemas más comunes son:
269
255
 
270
- | Preajuste | VRAM | Velocidad | Calidad |
271
- |--------|------|-------|---------|
272
- | Qwen 2.5 7B | ~12GB | Medio | Mejor |
273
- | Qwen 2.5 3B | ~8GB | Rápido | Bueno |
274
- | Llama 3.2 3B | ~8GB | Rápido | Bueno |
275
- | Llama 3.2 1B | ~6GB | Más rápido | Básico |
276
- | Mistral 7B | ~12GB | Medio | Bueno |
256
+ - **Controlador CUDA incorrecto.** PyTorch se publica con un binario por cada versión de CUDA. Si elige el incorrecto, obtendrá una versión de PyTorch solo para CPU, y el entrenamiento será extremadamente lento. Utilice el selector de controladores en <https://pytorch.org/get-started/locally/> para su controlador. Ejecute `nvidia-smi` para ver la versión de su controlador/CUDA.
257
+ - **Windows + exportación GGUF.** La opción `[export]` compila `llama-cpp-python` desde el código fuente, lo que requiere Visual Studio Build Tools (componente C++) y CMake.
277
258
 
278
- ## Arquitectura
259
+ **macOS:** El entrenamiento con GPU no está soportado (no hay CUDA). Puede ejecutar el adaptador entrenado en un Mac a través de Ollama, pero `trainer.train()` genera un error `DEP_GPU_NOT_AVAILABLE`. Utilice una máquina con Linux o Windows con CUDA para el entrenamiento.
279
260
 
261
+ Consulte la [página del manual de solución de problemas](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/) para obtener una guía completa sobre la solución de problemas de instalación, y la [página de solución de problemas de CUDA](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/) dedicada para problemas de controlador/VRAM/xformers/bf16-vs-fp16.
262
+
263
+ ## Interfaz de línea de comandos
264
+
265
+ Cada API de Python tiene un equivalente de línea de comandos (CLI):
266
+
267
+ ```bash
268
+ backprop train --data my_data.jsonl --model Qwen/Qwen2.5-7B-Instruct --steps 100
269
+ backprop multi-run --data my_data.jsonl --runs 5 --steps 100
270
+ backprop export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-name my-model
271
+ backprop ui --port 7862
272
+ backprop info # environment + version snapshot
273
+ backprop list-runs # past training runs
274
+ backprop show-run <run-id> # detail view
275
+ backprop resume <run-id> # resume a crashed run
276
+ backprop push ./output/lora --repo me/my-model # push adapter to HuggingFace Hub
277
+ backprop diff-runs <run-a> <run-b> # diff two runs side by side
278
+ backprop replay <run-id> # re-run with same config / dataset
279
+ backprop export-runs --format jsonl # bulk export run history
280
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
- ```
281
+
282
+ Consulte la referencia completa en [la página de referencia del CLI](https://mcp-tool-shop-org.github.io/backpropagate/handbook/cli-reference/), o `backprop <subcomando> --help`.
283
+
284
+ ## Configuración
285
+
286
+ Cada configuración se puede sobrescribir con una variable de entorno utilizando el prefijo `BACKPROPAGATE_`:
287
+
288
+ | Variable | Valor predeterminado | Notas |
289
+ |---|---|---|
290
+ | `BACKPROPAGATE_LOG_LEVEL` | `INFO` | `DEBUG` / `INFO` / `WARNING` / `ERROR` |
291
+ | `BACKPROPAGATE_LOG_JSON` | automático | Forzar registros JSON o de consola |
292
+ | `BACKPROPAGATE_MODEL__NAME` | `Qwen/Qwen2.5-7B-Instruct` | Modelo predeterminado |
293
+ | `BACKPROPAGATE_TRAINING__LEARNING_RATE` | `2e-4` | Tasa de aprendizaje |
294
+ | `BACKPROPAGATE_LORA__R` | `256` | Rango LoRA (valor predeterminado de la versión 1.3; use `--lora-preset=fast` para el valor predeterminado de la versión 1.2.x, que es 16) |
295
+ | `BACKPROPAGATE_UI__OUTPUT_DIR` | `~/.backpropagate/ui-outputs` | Sistema de archivos de la interfaz de usuario (sandbox) |
296
+
297
+ Las claves anidadas utilizan doble guion bajo (`MODEL__NAME`, no `MODEL_NAME`). La referencia completa se encuentra en [la página del manual de variables de entorno](https://mcp-tool-shop-org.github.io/backpropagate/handbook/env-vars/).
298
+
299
+ ## Preajustes de modelos
300
+
301
+ | Preajuste | VRAM | Licencia | Notas |
302
+ |---|---|---|---|
303
+ | Qwen-3.5-4B | ~8GB | Apache 2.0 | Valor predeterminado recomendado para modelos de menos de 5B. La mejor calidad para este tamaño. |
304
+ | Phi-4-mini-3.8B | ~8GB | MIT | Excelente para razonamiento, matemáticas y código. Licencia limpia. |
305
+ | SmolLM3-3B | ~6GB | Apache 2.0 | Receta completamente abierta. Contexto nativo de 64K. |
306
+ | Qwen 2.5 7B | ~12GB | Apache 2.0 | Valor predeterminado existente. La mejor calidad de los modelos heredados de 7B. |
307
+ | Qwen 2.5 3B | ~8GB | Qwen-Research | ⚠ licencia de investigación; consulte los términos de la licencia de Qwen antes de usarlo comercialmente. |
308
+ | Llama 3.2 3B | ~8GB | Llama Community | Una alternativa sólida a Qwen 3B con algunas restricciones. |
309
+ | Llama 3.2 1B | ~6GB | Llama Community | Ideal para experimentos rápidos en tarjetas pequeñas. |
310
+ | Mistral 7B | ~12GB | Apache 2.0 | Comparable a Qwen 7B, pero con una plantilla de chat diferente. |
311
+
312
+ Otros modelos pueden funcionar, pero solo estos ocho están incluidos en las pruebas automatizadas (CI). Utilice `--lora-preset=quality` (predeterminado) para obtener un rango de 256 / objetivos de línea recta, según Biderman 2024 + Thinking Machines 2025, o `--lora-preset=fast` para obtener el rango de 16 / objetivo q+v de la versión 1.2.x si necesita la huella de la versión 1.2.x.
306
313
 
307
314
  ## Resolución de problemas
308
315
 
309
- Un índice breve de los fallos más comunes al inicio. El índice inverso completo se encuentra en [la página del manual de resolución de problemas](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/); cada código que se muestra a continuación está documentado en [códigos de error](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/).
316
+ Un índice breve de los fallos más comunes al ejecutarlo por primera vez. El índice inverso completo se encuentra en [la página del manual de solución de problemas](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/). Para obtener información detallada sobre el controlador/VRAM/precisión mixta, consulte la [página de solución de problemas de CUDA](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting-cuda/).
310
317
 
311
- | Síntoma | Código | Solución |
312
- |---------|------|-----|
313
- | La GPU se queda sin memoria durante el entrenamiento. | `RUNTIME_GPU_OOM` | La recuperación automática de errores de memoria (B-002) reduce automáticamente el tamaño del lote hasta 3 veces. Para desactivar esta función: `Trainer(oom_recovery=False)`. Para forzar un tamaño de lote más pequeño: `--batch-size 1`. |
314
- | El centro de descargas de Hugging Face devuelve un error 401 / "modelo no encontrado". | `DEP_MODEL_LOAD_FAILED` | Ejecute `huggingface-cli login` e inténtelo de nuevo. Para corregir errores tipográficos, copie el ID exacto de <https://huggingface.co/models>. |
315
- | Error tipográfico en el nombre del modelo. | `INPUT_VALIDATION_FAILED` o `DEP_MODEL_LOAD_FAILED`. | Verifique el identificador `org/name` en <https://huggingface.co/models>. |
318
+ | Síntoma | Código de error | Solución |
319
+ |---|---|---|
320
+ | La GPU se queda sin memoria durante el entrenamiento. | `RUNTIME_GPU_OOM` | Automatic Backpropagate reduce la mitad del tamaño del lote e intenta hasta 3 veces. Para desactivar esta función: `Trainer(oom_recovery=False)`. Para forzar un tamaño de lote más pequeño: `--batch-size 1`. |
321
+ | HuggingFace devuelve 401 / "modelo no encontrado" | `DEP_MODEL_LOAD_FAILED` | Ejecute `huggingface-cli login` e inténtelo de nuevo. Si hay errores tipográficos, copie el ID exacto de <https://huggingface.co/models>. |
316
322
  | `register_with_ollama` rechaza la conexión. | `DEP_OLLAMA_REGISTRATION_FAILED` | Inicie el demonio: `ollama serve`. Instálelo desde <https://ollama.com>. Se puede volver a intentar. |
317
323
  | El disco se llena durante el guardado del punto de control. | `STATE_CHECKPOINT_INVALID` | Las escrituras atómicas dejan un directorio `.partial` en caso de fallo; es seguro eliminarlo. El punto de control anterior y válido está intacto. |
318
- | El entrenamiento se pausa/interrumpe debido al sobrecalentamiento de la GPU. | `RUNTIME_GPU_TEMPERATURE_CRITICAL` | B-003: el monitor se pausa debido al umbral de temperatura de NVML; se reanuda automáticamente a medida que la GPU se enfría. Mejore el flujo de aire o reduzca la carga sostenida. |
319
- | `backprop ui --share` es rechazado. | `INPUT_AUTH_REQUIRED` | Pase `--auth user:password` o configure `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE=false` para desactivar esta función (con una advertencia). |
320
- | "Superposición de validación" en múltiples ejecuciones. | `CONFIG_INVALID` (Etapa A, backend B-001). | Reduzca `--samples` por debajo del tamaño del conjunto de entrenamiento, aumente el conjunto de datos o desactive la validación. |
324
+ | Entrenamiento pausado debido a sobrecalentamiento de la GPU. | `RUNTIME_GPU_TEMPERATURE_CRITICAL` | Automatic Backpropagate pausa cuando se alcanza el umbral de temperatura y reanuda cuando la GPU se enfría. Mejore el flujo de aire si esto ocurre con frecuencia. |
325
+ | `backprop ui --share` es rechazado. | `INPUT_AUTH_REQUIRED` | Utilice `--auth user:password` o, en su lugar, use el reenvío de puertos SSH (consulte [Interfaz de usuario web](#web-ui)). |
321
326
  | La exportación a GGUF falló en el primer intento. | `RUNTIME_GGUF_EXPORT_FAILED` | `pip install backpropagate[export]`; en Windows, también necesita Visual C++ Build Tools + CMake. |
322
327
 
323
328
  ## Informar de errores
324
329
 
325
- Cuando algo falla, Backpropagate imprime una línea `run_started run_id=<uuid>` al inicio y asocia el mismo ID a los manifiestos de puntos de control, la historia de combinación de SLAO y las líneas de registro estructuradas. Incluya el `run_id` en cualquier informe de error; esto permite a un mantenedor correlacionar cada línea de registro, cada punto de control y cada combinación para esa ejecución específica.
330
+ Cuando algo falla, Backpropagate imprime una línea al inicio, como `run_started run_id=<uuid>`, y asocia el mismo ID a cada línea de registro, a cada punto de control y a cada entrada de Weights & Biases. **Incluya el `run_id` en cualquier informe de error**; esto permite al responsable del mantenimiento correlacionar todo para esa ejecución específica.
326
331
 
327
332
  Un buen informe de error incluye:
328
333
 
329
- 1. **`run_id`** el UUID impreso al inicio (también disponible como `TrainingRun.run_id` y `RunResult.run_id`).
330
- 2. **El código de error** la línea `[CODE_NAME]: message` en stderr es lo que debe buscar; consulte [códigos de error](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/) para ver el catálogo.
331
- 3. **La línea de comandos sin información confidencial.** La salida de error en modo no detallado se borra automáticamente (los tokens Bearer, `sk-*`, `hf_*`, las claves de AWS, los pares `password=/token=/api_key=` se eliminan): es seguro pegarla. Para obtener el rastreo completo y sin información confidencial, vuelva a ejecutar con `--verbose`, pero revise antes de publicarlo.
332
- 4. **Versiones de Python / PyTorch, modelo de GPU, sistema operativo.** `backprop info` imprime todo esto de una vez.
334
+ 1. **El `run_id`**: el UUID que se imprime al inicio.
335
+ 2. **El código de error**: la línea `[CODE_NAME]: message` en stderr. Consulte [códigos de error](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/) para ver el catálogo.
336
+ 3. **La línea de comandos con información sensible eliminada**. El stderr se elimina automáticamente (los tokens Bearer, `sk-*`, `hf_*`, las claves de AWS, los pares `password=` / `token=` se eliminan), por lo que es seguro pegarlo. Para obtener el rastreo completo y sin eliminar información, vuelva a ejecutar con `--verbose`, pero revise antes de publicarlo.
337
+ 4. **Versiones de Python / PyTorch, modelo de GPU, sistema operativo**. `backprop info` imprime todo esto de una vez.
338
+
339
+ Las preguntas, ideas o discusiones sobre si algo es "esperado" deben realizarse en [GitHub Discussions](https://github.com/mcp-tool-shop-org/backpropagate/discussions). Los problemas de seguridad deben informarse de forma privada a través del formulario [GitHub Security Advisory](https://github.com/mcp-tool-shop-org/backpropagate/security/advisories/new); consulte [SECURITY.md](SECURITY.md) para ver la política.
333
340
 
334
341
  ## Privacidad
335
342
 
336
343
  Todo el entrenamiento se realiza localmente en su GPU. Backpropagate no realiza solicitudes de red excepto para descargar modelos de HuggingFace (lo cual usted inicia). No hay telemetría, ni dependencia de la nube.
337
344
 
338
- ## Tabla de rendimiento
345
+ ## Referencias
339
346
 
340
- | Categoría | Puntuación | Notas |
341
- |----------|-------|-------|
342
- | A. Seguridad | 6/8 | SECURITY.md, modelo de confianza, sin secretos/telemetría, safe_path(). Se omiten los elementos de MCP. |
343
- | B. Manejo de errores | 5/7 | Estructura de excepciones (`código`/`mensaje`/`indicación`/`causa`/`reintentable`) a través del registro ERROR_CODES; códigos de salida de la CLI: 0/1/2/3; no se muestran rastreos de pila sin `--verbose`; correlación con `run_id`; salida de error estándar (stderr) censurada; bloqueo mediante `--share` + `--auth`. MCP/escritorio/VS Code omitidos. |
344
- | C. Documentación para operadores | 4/7 | README, CHANGELOG, LICENCIA, --help. Registro/MCP/elementos complejos omitidos. |
345
- | D. Higiene del proceso de entrega | 6/9 | verify.sh, versión=etiqueta, 5 analizadores en CI, dependabot, python_requires, compilación limpia. |
346
- | E. Identidad | 4/4 | Logotipo, traducciones, página de inicio, metadatos. |
347
- | **Total** | **25/31** | 14 elementos omitidos con justificación. `shipcheck audit` pasa el 100%. Fecha de auditoría: 2026-05-21 (la fila B fue reevaluada después de la etapa B y el trabajo de códigos de salida de la CLI). |
347
+ Los valores predeterminados de Backpropagate y el modo de entrenamiento con múltiples ejecuciones se basan en investigaciones recientes. Si está interesado en las técnicas subyacentes:
348
348
 
349
- Historial de diseño y correspondencia de cada elemento: consulte [ROADMAP.md](ROADMAP.md). Todos los elementos de las semanas 1 a 4 se incluyen en la versión 1.1.0.
349
+ - **Hu et al. 2021.** *LoRA: Low-Rank Adaptation of Large Language Models.* [arXiv:2106.09685](https://arxiv.org/abs/2106.09685) el artículo fundamental que introduce LoRA, que es la forma en que Backpropagate entrena adaptadores de manera eficiente.
350
+ - **Biderman et al. 2024.** *LoRA Learns Less and Forgets Less.* [arXiv:2405.09673](https://arxiv.org/abs/2405.09673) — evidencia empírica de que LoRA con un rango de 256 y objetivos totalmente lineales coincide con la calidad del ajuste fino completo en la mayoría de las tareas posteriores al entrenamiento, utilizando el 67% de la capacidad de cómputo. Define la configuración predeterminada de LoRA de la versión 1.3 de Backpropagate.
351
+ - **Thinking Machines 2025.** *LoRA Without Regret.* [thinkingmachines.ai/blog/lora](https://thinkingmachines.ai/blog/lora/) — el seguimiento práctico que identifica la corrección de 10 veces la tasa de aprendizaje con respecto al ajuste fino completo necesaria para rangos LoRA altos.
352
+ - **Kirkpatrick et al. 2017.** *Overcoming catastrophic forgetting in neural networks.* [arXiv:1612.00796](https://arxiv.org/abs/1612.00796) — la caracterización original de por qué las redes neuronales "olvidan" el entrenamiento anterior cuando se ajustan a nuevos datos (EWC — Elastic Weight Consolidation).
353
+ - **Wang et al. 2023.** *Orthogonal Subspace Learning for Language Model Continual Learning.* [arXiv:2310.14152](https://arxiv.org/abs/2310.14152) — O-LoRA, un enfoque anterior para usar LoRA para el aprendizaje continuo, restringiendo los nuevos adaptadores a subespacios ortogonales.
354
+ - **Yadav et al. 2023.** *TIES-Merging: Resolving Interference When Merging Models.* [arXiv:2306.01708](https://arxiv.org/abs/2306.01708) — una técnica fundamental para fusionar múltiples modelos ajustados sin interferencia.
355
+ - **Qiao & Mahdavi 2025.** *Merge before Forget: A Single LoRA Continual Learning via Continual Merging.* [arXiv:2512.23017](https://arxiv.org/abs/2512.23017) — el algoritmo específico que implementa el fusionador de múltiples ejecuciones de Backpropagate. Un preprint de diciembre de 2025; Backpropagate es el primer adoptador conocido en un entorno de producción.
350
356
 
351
357
  ## Licencia
352
358
 
353
- MIT: Consulte [LICENSE](LICENSE) para obtener más detalles.
359
+ MIT consulte [LICENSE](LICENSE).
354
360
 
355
361
  ---
356
362