@mcptoolshop/backpropagate 1.2.0 → 1.4.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,143 +10,155 @@
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 en 3 líneas. Configuraciones predeterminadas inteligentes, ajuste automático del tamaño del lote 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 el aprendizaje continuo de LoRA mediante una fusión asimétrica, una técnica 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
- ## Cómo empezar
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 export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-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
38
+
39
+ ```bash
40
+ # Recommended: isolated Python install (no conflicts with system Python or other projects)
41
+ pipx install backpropagate
36
42
 
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 principio a fin en una instalación limpia. Para tu propio entrenamiento, consulta el formato de conjunto de datos [Dataset Format](#dataset-format) a continuación.
43
+ # Or via uv (faster install, same isolation)
44
+ uv tool install backpropagate
38
45
 
39
- ### Opción sin código: Interfaz web
46
+ # Standard pip (if you manage your own virtualenv)
47
+ pip install backpropagate
48
+ ```
40
49
 
41
- ¿Prefieres una interfaz gráfica en lugar de una terminal de Python? Instala los componentes adicionales y ejecuta:
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) te permite seleccionar un archivo JSONL, elegir un modelo, entrenar y exportar, sin necesidad de Python. La interfaz es local; para acceder desde Internet, consulta la sección [Web UI](#web-ui) a continuación, donde encontrarás 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
- Tu 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. Consulta `examples/quickstart.jsonl` para obtener un punto de partida que puedes 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 del lote, monitorización 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 largas provocan el 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:** 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 tu 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 los 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:** Instala solo las dependencias que necesitas (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
+ | Phi-4-mini-3.8B / Qwen-3.5-4B / SmolLM3-3B (límite de 3B de parámetros) | `mode="full"` (ajuste fino completo) | v1.4: Use el parámetro `--mode=full` en `backprop train` o `Trainer(..., mode="full")`. El checkpointing de gradientes y el Adam de 8 bits con paginación mantienen la memoria de activación en sqrt(L). |
80
+ | Qwen-2.5-7B / Llama-3.1-8B / Mistral-7B | QLoRA | Estándar. ~7-8 GB. Configuraciones predeterminadas de Backpropagate. |
81
+ | Llama-3 13B | QLoRA + empaquetado de muestras | Apretado pero funciona. Usa secuencias más cortas. |
82
+ | Mixtral 8x7B (47B de parámetros totales) | AQLM de 2 bits + LoRA | Planificado para v1.5: Consulte el documento V1_5_BRIEF cuando se publique. |
79
83
 
80
- ## Instalación
84
+ La cuantización AQLM de 2 bits (`quant_method="aqlm"`, opción experimental para Mixtral-8x7B en 16GB) estaba prevista para v1.4 y ahora está planificada para v1.5. La biblioteca `aqlm` está madura; en la versión 1.4, se priorizó el soporte para el ajuste fino completo de modelos de hasta 3B (`mode="full"`) en lugar de agregar un nuevo backend de cuantización. Consulte el documento V1_5_BRIEF cuando se publique para ver el plan de implementación de la versión 1.5.
81
85
 
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
- ```
86
+ Para modelos de 3B o menos, el ajuste fino completo (no solo LoRA) es posible en 16GB y ahora está disponible en la versión 1.4 como `mode="full"`. Utilice `Trainer(..., mode="full")` o `backprop train --mode=full --model phi-4-mini-3.8b` para habilitarlo. Un mecanismo de seguridad impide el uso de este modo para modelos mayores de 3B, mostrando el error `RUNTIME_FULL_FT_MODEL_TOO_LARGE` y sugiriendo LoRA y las configuraciones preestablecidas para modelos de menos de 3B como alternativas. Consulte la [página completa del manual de ajuste fino](https://mcp-tool-shop-org.github.io/backpropagate/handbook/full-fine-tuning/) para obtener información sobre la configuración y la comparación de calidad de Biderman 2024 / Thinking Machines 2025. Para modelos de 7B o más, el ajuste fino completo requiere una GPU de 24GB o más; considere alquilar una GPU A100 en la nube, o utilice LoRA, que, según investigaciones recientes, ofrece una calidad comparable al ajuste fino completo en la mayoría de las tareas posteriores al entrenamiento (consulte la [sección de advertencias](#what-backpropagate-is-not-for) para obtener referencias).
89
87
 
90
- | Componentes 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 + monitorización del sistema (integrado automáticamente en el entrenador en v1.1.0) | wandb, psutil |
97
- | `logging` | Registro estructurado | structlog |
98
- | `security` | Autenticación JWT + generación de tokens | PyJWT, cryptography |
99
- | `production` | unsloth + ui + validación + registro + seguridad | (paquete) |
88
+ ## Lo que Backpropagate NO es
100
89
 
101
- **Requisitos:** Python 3.10+ · GPU con CUDA (8GB+ de VRAM) · PyTorch 2.0+
90
+ Si su caso de uso es diferente a los siguientes, obtendrá mejores resultados con otra biblioteca. Backpropagate no es la opción adecuada, e intentar que funcione le costará más que simplemente utilizar la herramienta correcta. Leer esta sección antes de comenzar le ahorrará el ciclo de instalación y prueba:
102
91
 
103
- ### Requisitos de la plataforma
92
+ - **Ajuste fino de todos los parámetros de modelos de 7B o más:** Backpropagate utiliza LoRA / QLoRA, que entrena un adaptador pequeño en lugar de actualizar cada peso. Para modelos de 7B o más, el ajuste fino completo requiere 24GB o más de memoria de GPU y no cabe en una tarjeta de consumo de 16GB. Para modelos de 3B o menos, el ajuste fino completo SÍ es posible en 16GB y está disponible en la versión 1.4 como `mode="full"` (utilice `Trainer(..., mode="full")` o `--mode=full` en la línea de comandos; un mecanismo de seguridad genera el error `RUNTIME_FULL_FT_MODEL_TOO_LARGE` para modelos mayores de 3B y sugiere LoRA y las configuraciones preestablecidas para modelos de menos de 3B como alternativas). En resumen: investigaciones recientes ([Biderman 2024](https://arxiv.org/abs/2405.09673), [Thinking Machines 2025](https://thinkingmachines.ai/blog/lora/)) demuestran que LoRA, con la configuración correcta, ofrece una calidad comparable al ajuste fino completo en la mayoría de las tareas posteriores al entrenamiento (seguimiento de instrucciones, adaptación de dominio, personalidad/estilo) con un 67% menos de recursos computacionales; por lo tanto, para el trabajo que la mayoría de los usuarios desean realizar, no se pierde nada al utilizar LoRA. `mode="full"` existe para los casos en los que ha detectado una diferencia de calidad y ha decidido invertir recursos computacionales adicionales. Si realmente necesita realizar un ajuste fino completo de un modelo de 7B o más, utilice directamente el `Trainer` de HuggingFace `transformers` en una tarjeta de 24GB o más.
93
+ - **DPO / PPO / GRPO / ajuste de preferencias:** Backpropagate solo realiza un ajuste fino supervisado de una sola etapa. Para el aprendizaje por preferencias, utilice TRL directamente o LLaMA-Factory.
94
+ - **Entrenamiento en múltiples nodos:** Solo se admite una GPU en una sola máquina. El entrenamiento con varias GPU en una sola máquina funciona (a través de `accelerate launch`), pero no está oficialmente soportado.
95
+ - **Entrenamiento en macOS:** Apple Silicon no tiene CUDA, por lo que el entrenamiento debe ejecutarse en un sistema Linux o Windows con una GPU NVIDIA. Aún puede ejecutar el modelo entrenado en un Mac a través de Ollama.
96
+ - **Cualquier modelo que no pertenezca a 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.
104
97
 
105
- Backpropagate gestiona las peculiaridades del entorno de ejecución (multiproceso, xformers en RTX 40/50, trabajadores del cargador de datos en Windows). No gestiona los problemas de instalación de la plataforma; soluciona esos problemas primero:
98
+ Si necesita alguna de estas funciones, utilice una de las bibliotecas mencionadas anteriormente. Son mejores en eso.
106
99
 
107
- - **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.
108
- - **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.
109
- - **macOS.** El entrenamiento con GPU **no está soportado**; no hay CUDA. Puede instalar Backpropagate para ejecutar la *inferencia* en un archivo GGUF a través de Ollama, pero `trainer.train()` genera un error `DEP_GPU_NOT_AVAILABLE`. Utilice una máquina con CUDA para el entrenamiento.
110
- - **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 GitHub); instálela primero con el paquete CUDA correspondiente de pytorch.org.
100
+ ## Lo que Backpropagate le ofrece:
111
101
 
112
- Para la resolución de problemas de instalación, consulte [la página del manual de solución de problemas](https://mcp-tool-shop-org.github.io/backpropagate/handbook/troubleshooting/).
102
+ Cuatro cosas, en una sola instalación:
113
103
 
114
- ## Configuración
104
+ **1. Una API real de 3 líneas que funciona sin un archivo de configuración.**
105
+ 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.
115
106
 
116
- 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
+ **2. Funcionalidad que realmente funciona en Windows.**
108
+ 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.
117
109
 
118
- 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
+ **3. Diseñado para ejecuciones no supervisadas.**
111
+ El entrenamiento lleva horas. No quiere tener que vigilarlo constantemente. Backpropagate está diseñado para que se pueda dejar funcionando:
119
112
 
120
- | Variable | Valor predeterminado | Notas |
121
- |----------|---------|-------|
122
- | `BACKPROPAGATE_LOG_LEVEL` | `INFO` | `DEBUG` / `INFO` / `WARNING` / `ERROR` |
123
- | `BACKPROPAGATE_LOG_JSON` | automático | Fuerza registros en formato JSON (`true`) o en la consola (`false`) |
124
- | `BACKPROPAGATE_LOG_FILE` | no definido | Ruta para copiar los registros |
125
- | `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. |
126
- | `BACKPROPAGATE_SECURITY__REQUIRE_AUTH_FOR_SHARE` | `true` | Si es `true`, rechaza `backprop ui --share` sin `--auth` |
127
- | `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. |
128
- | `BACKPROPAGATE_MODEL__NAME` | `Qwen/Qwen2.5-7B-Instruct` | Modelo predeterminado |
129
- | `BACKPROPAGATE_TRAINING__LEARNING_RATE` | `2e-4` | Tasa de aprendizaje |
130
- | `BACKPROPAGATE_LORA__R` | `16` | Rango de LoRA |
113
+ - 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.
114
+ - Si la GPU se calienta demasiado, se pausa hasta que se enfría y luego continúa.
115
+ - 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.
116
+ - 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.
117
+ - 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.
131
118
 
132
- Las claves anidadas utilizan el doble guion bajo como delimitador (convención de Pydantic `env_nested_delimiter`).
119
+ **4. Un solo comando para pasar del adaptador entrenado a `ollama run`.**
120
+ 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.
133
121
 
134
- ## Uso
122
+ ## Cómo empezar
135
123
 
136
- ### Entrenamiento básico
124
+ 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:
137
125
 
138
- ```python
126
+ ```bash
127
+ pipx install "backpropagate[standard]"
128
+
129
+ python -c "
139
130
  from backpropagate import Trainer
131
+ trainer = Trainer('Qwen/Qwen2.5-7B-Instruct')
132
+ trainer.train('examples/quickstart.jsonl', steps=10)
133
+ trainer.export('gguf', quantization='q4_k_m')
134
+ "
135
+ ```
140
136
 
141
- trainer = Trainer("Qwen/Qwen2.5-7B-Instruct")
142
- trainer.train("my_data.jsonl", steps=100)
143
- trainer.save("./my-model")
144
- trainer.export("gguf", quantization="q4_k_m")
137
+ 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:
138
+
139
+ ```jsonl
140
+ {"conversations": [{"from": "human", "value": "What is Python?"}, {"from": "gpt", "value": "A programming language."}]}
141
+ {"conversations": [{"from": "human", "value": "Explain recursion."}, {"from": "gpt", "value": "A function that calls itself."}]}
142
+ ```
143
+
144
+ También funcionan los formatos de Alpaca (`instruction` / `output`), OpenAI chat (`messages`) y texto sin formato; Backpropagate detecta automáticamente el formato.
145
+
146
+ 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/).
147
+
148
+ ### Interfaz web (opcional)
149
+
150
+ Si prefiere hacer clic en lugar de escribir código Python, instale el paquete de la interfaz de usuario y ejecútelo:
151
+
152
+ ```bash
153
+ pipx install "backpropagate[ui]"
154
+ backprop ui --port 7862
145
155
  ```
146
156
 
147
- `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` cuantizado; hemos cambiado el valor predeterminado a los pesos oficiales de Qwen para una mejor fiabilidad ([REGISTRO DE CAMBIOS v1.1.0](CHANGELOG.md#110---2026-05-21)). Puede utilizar cualquiera de los dos modelos.
157
+ 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`.
148
158
 
149
- ### Entrenamiento multi-ejecución SLAO
159
+ ## Entrenamiento con múltiples ejecuciones
160
+
161
+ 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:
150
162
 
151
163
  ```python
152
164
  from backpropagate import Trainer
@@ -158,196 +170,196 @@ result = trainer.multi_run(
158
170
  num_runs=5,
159
171
  steps_per_run=100,
160
172
  samples_per_run=1000,
161
- merge_mode="slao", # Single LoRA Continual Learning via Asymmetric Merging
162
173
  )
163
174
  ```
164
175
 
165
- 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`).
166
-
167
- ### Exportación a Ollama
168
-
169
- ```python
170
- # Export to GGUF
171
- result = trainer.export("gguf", quantization="q4_k_m")
172
-
173
- # Register with Ollama separately
174
- from backpropagate import register_with_ollama
175
- register_with_ollama(result.path, "my-finetuned-model")
176
- # ollama run my-finetuned-model
177
- ```
176
+ 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.
178
177
 
179
- ### Interfaz de línea de comandos
178
+ La versión de la línea de comandos:
180
179
 
181
180
  ```bash
182
- backprop train --data my_data.jsonl --model Qwen/Qwen2.5-7B-Instruct --steps 100
183
- backprop multi-run --data my_data.jsonl --runs 5 --steps 100
184
- backprop export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-name my-model
185
- backprop ui --port 7862
186
- backprop info
187
- backprop list-runs # v1.1.0: query past training runs
188
- backprop show-run <run-id> # v1.1.0: detail view
189
- backprop resume <run-id> # v1.1.0: resume a crashed multi-run
190
- backprop push ./output/lora --repo me/my-model # v1.1.0: push adapter to HF Hub
181
+ backprop multi-run --data my_data.jsonl --runs 5 --steps 100 --samples 1000
191
182
  ```
192
183
 
193
- 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`.
194
-
195
- ### Reanudación desde un punto de control (v1.1.0)
184
+ ## Reanudar desde un punto de control
196
185
 
197
- Una ejecución multi-ejecución de 5 ejecuciones que falla en la ejecución 4 ahora se puede recuperar. Cada sesión de ejecución multi-ejecución escribe su `run_id` tanto en `run_history.json` como en el manifiesto de punto de control en el disco, por lo que para reanudar donde lo dejó, solo necesita un comando:
186
+ 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:
198
187
 
199
188
  ```bash
200
- backprop resume <run-id> # picks up the in-progress session
201
- backprop multi-run --data ... --resume <run-id> # explicit form
202
- backprop train --data ... --resume <run-id> # single-run resume (continues run_id)
189
+ backprop resume <run-id>
190
+ backprop multi-run --data ... --resume <run-id>
191
+ backprop train --data ... --resume <run-id> # single-run resume
203
192
  ```
204
193
 
205
- El comportamiento predeterminado de `backprop multi-run` (sin `--resume`) detecta automáticamente si existe una ejecución en curso para el mismo directorio de salida y la continúa. Para forzar una sesión limpia, use `resume_from="off"` (API de Python) o omita `--resume` y comience en un directorio de salida nuevo.
206
-
207
- Cuando se reanuda una ejecución multi-run, se carga el último checkpoint para ese `run_id` en el modelo, el estado de fusión SLAO se restaura desde el directorio `slao/` junto al checkpoint, y el bucle de ejecución continúa desde `last_completed_run + 1`. El estado de la entrada del historial cambia a `running`, por lo que `backprop list-runs --status running` muestra la sesión activa.
194
+ 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.
208
195
 
209
- ### Seguimiento de experimentos (v1.1.0)
196
+ ## Historial de entrenamiento
210
197
 
211
- `Trainer` detecta automáticamente los sistemas de seguimiento de experimentos instalados (`wandb`, `tensorboard`, `mlflow`) y los integra con los `transformers.TrainingArguments` subyacentes. El valor predeterminado `report_to="auto"` utiliza cualquier sistema que se pueda importar:
198
+ 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:
212
199
 
213
200
  ```bash
214
- pip install backpropagate[monitoring] # installs wandb + psutil
215
- wandb login # one-time
216
- backprop train --data my_data.jsonl # W&B run gets the same run_id prefix as the on-disk history
201
+ backprop list-runs # last 20 runs
202
+ backprop list-runs --status failed # filter by status
203
+ backprop list-runs --json --limit 100 # machine-readable
204
+ backprop show-run abcd1234 # detail view (partial ID is fine)
217
205
  ```
218
206
 
219
- Para desactivar explícitamente, 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.
220
-
221
- ### Historial de entrenamiento
207
+ ## Seguimiento de experimentos
222
208
 
223
- 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-run, la línea de tiempo de la fusión SLAO. Para ver las ejecuciones recientes:
209
+ 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.
224
210
 
225
211
  ```bash
226
- backprop list-runs # most recent 20 runs, all statuses
227
- backprop list-runs --status failed # filter
228
- backprop list-runs --json --limit 100 # machine-readable
229
- backprop show-run abcd1234 # detail view (partial run_id ok)
212
+ pip install backpropagate[monitoring] # installs wandb + psutil
213
+ wandb login # one-time setup
214
+ backprop train --data my_data.jsonl
230
215
  ```
231
216
 
232
- El historial de ejecuciones persiste entre procesos; la pestaña "Runs" en la interfaz web es una vista en memoria; el historial en disco es la fuente de verdad para `list-runs` / `show-run` / `resume`.
217
+ Puede anular este comportamiento con `Trainer(report_to=["wandb"])`, `Trainer(report_to=["tensorboard"])` o `Trainer(report_to="none")` para desactivarlo.
233
218
 
234
- ### Interfaz web
219
+ ## Interfaz web
235
220
 
236
- Inicie la interfaz de Reflex localmente:
221
+ La interfaz web de Reflex es opcional; instálela con `pipx install "backpropagate[ui]"` y ejecútela:
237
222
 
238
223
  ```bash
239
224
  backprop ui --port 7862
240
225
  ```
241
226
 
242
- Para exponer una URL accesible desde Internet, debe combinar `--share` con `--auth`:
227
+ 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`:
243
228
 
244
229
  ```bash
245
230
  backprop ui --share --auth alice:hunter2
246
231
  ```
247
232
 
248
- El comando `backprop ui --share` sin la opción `--auth` finaliza con el código `1` y el siguiente mensaje de error estructurado: `[RUNTIME_UI_AUTH_NOT_ENFORCED]`. La razón es que la opción `--share` publica una URL pública a la que cualquier persona en internet puede acceder, y sin autenticación, esto significa que cualquiera puede controlar su proceso de entrenamiento. No existe una opción para desactivar esta característica; si no desea establecer credenciales, utilice el reenvío de puertos SSH en su lugar: `ssh -L 7860:localhost:7860 <host>`, y luego abra `http://localhost:7860` localmente. Consulte el documento [handbook/security.md](site/src/content/docs/handbook/security.md) para obtener información completa sobre el modelo de amenazas.
233
+ `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:
234
+
235
+ ```bash
236
+ # On the client:
237
+ ssh -L 7860:localhost:7860 <your-training-host>
238
+ # On the server:
239
+ backprop ui # no --share
240
+ # Then open http://localhost:7860 in your local browser
241
+ ```
242
+
243
+ Consulte [handbook/security.md](https://mcp-tool-shop-org.github.io/backpropagate/handbook/security/) para obtener información detallada sobre el modelo de amenazas.
249
244
 
250
245
  Las escrituras en el sistema de archivos desde la interfaz de usuario están restringidas a un solo directorio:
251
246
 
252
247
  - Predeterminado: `~/.backpropagate/ui-outputs`
253
- - Para sobrescribir: `BACKPROPAGATE_UI__OUTPUT_DIR=/path/you/own`
254
- - 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]`.
248
+ - Para sobrescribir: establezca `BACKPROPAGATE_UI__OUTPUT_DIR=/ruta/propia`
249
+ - 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.).
255
250
 
256
- ## Soporte para Windows
251
+ ## Notas sobre la plataforma
257
252
 
258
- Backpropagate está diseñado para funcionar en Windows de forma predeterminada:
253
+ **Requisitos:** Python 3.10+ · GPU con CUDA (8GB+ de VRAM) · PyTorch 2.0+
259
254
 
260
- - Pre-tokenización para evitar fallos en el procesamiento paralelo
261
- - Desactivación automática de xformers para series RTX 40/50
262
- - Configuración segura del cargador de datos
263
- - Probado en RTX 5080 (16GB de VRAM)
255
+ 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.
264
256
 
265
- ## Preajustes de modelos
257
+ 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:
266
258
 
267
- | Preajuste | VRAM | Velocidad | Calidad |
268
- |--------|------|-------|---------|
269
- | Qwen 2.5 7B | ~12GB | Media | Óptima |
270
- | Qwen 2.5 3B | ~8GB | Rápida | Buena |
271
- | Llama 3.2 3B | ~8GB | Rápida | Buena |
272
- | Llama 3.2 1B | ~6GB | La más rápida | Básica |
273
- | Mistral 7B | ~12GB | Media | Buena |
259
+ - **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.
260
+ - **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.
274
261
 
275
- ## Arquitectura
262
+ **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.
276
263
 
264
+ 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.
265
+
266
+ ## Interfaz de línea de comandos
267
+
268
+ Cada API de Python tiene un equivalente de línea de comandos (CLI):
269
+
270
+ ```bash
271
+ backprop train --data my_data.jsonl --model Qwen/Qwen2.5-7B-Instruct --steps 100
272
+ backprop multi-run --data my_data.jsonl --runs 5 --steps 100
273
+ backprop export ./output/lora --format gguf --quantization q4_k_m --ollama --ollama-name my-model
274
+ backprop ui --port 7862
275
+ backprop info # environment + version snapshot
276
+ backprop list-runs # past training runs
277
+ backprop show-run <run-id> # detail view
278
+ backprop resume <run-id> # resume a crashed run
279
+ backprop push ./output/lora --repo me/my-model # push adapter to HuggingFace Hub
280
+ backprop diff-runs <run-a> <run-b> # diff two runs side by side
281
+ backprop replay <run-id> # re-run with same config / dataset
282
+ backprop export-runs --format jsonl # bulk export run history
277
283
  ```
278
- backpropagate/
279
- ├── trainer.py # Core Trainer class
280
- ├── multi_run.py # Multi-run SLAO training
281
- ├── slao.py # SLAO LoRA merging algorithm
282
- ├── datasets.py # Dataset loading, filtering & curriculum
283
- ├── export.py # GGUF/Ollama export
284
- ├── config.py # Pydantic settings + training presets
285
- ├── gpu_safety.py # GPU monitoring & safety
286
- ├── cli.py # CLI entry point (backprop command)
287
- ├── checkpoints.py # Checkpoint management
288
- ├── exceptions.py # Structured error hierarchy
289
- ├── feature_flags.py # Optional feature detection
290
- ├── security.py # Path traversal & torch security
291
- ├── logging_config.py # Structured logging setup
292
- ├── ui_theme.py # Radix theme tokens + CSS (Reflex era)
293
- ├── ui_state.py # rx.State subclasses
294
- ├── ui_app/ # Reflex web interface (Radix UI)
295
- │ ├── app.py # rx.App entry point
296
- │ ├── chrome.py # Header / LeftNav / SideRail / Footer
297
- │ ├── pages/ # Train / Multi-Run / Export / Dataset
298
- │ └── components/ # Bp* primitives (status pill, sparkline, event log…)
299
- └── ui_security.py # Rate limiting, CSRF, file validation (framework-agnostic)
300
- ```
301
284
 
302
- La implementación de Gradio de la versión 1.0 (`ui_gradio_legacy.py` + `theme_gradio_legacy.py`) se conservó hasta la versión 1.1.x como referencia y se eliminó en la versión 1.2.0.
285
+ 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`.
286
+
287
+ ## Configuración
288
+
289
+ Cada configuración se puede sobrescribir con una variable de entorno utilizando el prefijo `BACKPROPAGATE_`:
290
+
291
+ | Variable | Valor predeterminado | Notas |
292
+ |---|---|---|
293
+ | `BACKPROPAGATE_LOG_LEVEL` | `INFO` | `DEBUG` / `INFO` / `WARNING` / `ERROR` |
294
+ | `BACKPROPAGATE_LOG_JSON` | automático | Forzar registros JSON o de consola |
295
+ | `BACKPROPAGATE_MODEL__NAME` | `Qwen/Qwen2.5-7B-Instruct` | Modelo predeterminado |
296
+ | `BACKPROPAGATE_TRAINING__LEARNING_RATE` | `2e-4` | Tasa de aprendizaje |
297
+ | `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) |
298
+ | `BACKPROPAGATE_UI__OUTPUT_DIR` | `~/.backpropagate/ui-outputs` | Sistema de archivos de la interfaz de usuario (sandbox) |
299
+
300
+ 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/).
301
+
302
+ ## Preajustes de modelos
303
+
304
+ | Preajuste | VRAM | Licencia | Notas |
305
+ |---|---|---|---|
306
+ | Qwen-3.5-4B | ~8GB | Apache 2.0 | Valor predeterminado recomendado para modelos de menos de 5B. La mejor calidad para este tamaño. |
307
+ | Phi-4-mini-3.8B | ~8GB | MIT | Excelente para razonamiento, matemáticas y código. Licencia limpia. |
308
+ | SmolLM3-3B | ~6GB | Apache 2.0 | Receta completamente abierta. Contexto nativo de 64K. |
309
+ | Qwen 2.5 7B | ~12GB | Apache 2.0 | Valor predeterminado existente. La mejor calidad de los modelos heredados de 7B. |
310
+ | Qwen 2.5 3B | ~8GB | Qwen-Research | ⚠ licencia de investigación; consulte los términos de la licencia de Qwen antes de usarlo comercialmente. |
311
+ | Llama 3.2 3B | ~8GB | Llama Community | Una alternativa sólida a Qwen 3B con algunas restricciones. |
312
+ | Llama 3.2 1B | ~6GB | Llama Community | Ideal para experimentos rápidos en tarjetas pequeñas. |
313
+ | Mistral 7B | ~12GB | Apache 2.0 | Comparable a Qwen 7B, pero con una plantilla de chat diferente. |
314
+
315
+ 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.
303
316
 
304
317
  ## Resolución de problemas
305
318
 
306
- Un índice breve de los fallos más comunes al inicio. 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/); 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/).
319
+ 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/).
307
320
 
308
- | Síntoma | Código | Solución |
309
- |---------|------|-----|
310
- | La GPU se queda sin memoria durante el entrenamiento. | `RUNTIME_GPU_OOM` | La recuperación automática de errores de memoria (OOM) (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`. |
311
- | El centro de Hugging Face devuelve un error 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>. |
312
- | 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>. |
321
+ | Síntoma | Código de error | Solución |
322
+ |---|---|---|
323
+ | 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`. |
324
+ | 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>. |
313
325
  | `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. |
314
326
  | 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. |
315
- | 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. |
316
- | `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). |
317
- | "Superposición de validación" en múltiples ejecuciones. | `CONFIG_INVALID` (Etapa A, backend B-001). | Reduzca `--samples` por debajo del tamaño del grupo de entrenamiento, aumente el conjunto de datos o desactive la validación. |
327
+ | 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. |
328
+ | `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)). |
318
329
  | 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. |
319
330
 
320
331
  ## Informar de errores
321
332
 
322
- 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, el historial 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.
333
+ 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.
323
334
 
324
335
  Un buen informe de error incluye:
325
336
 
326
- 1. **`run_id`** el UUID impreso al inicio (también disponible como `TrainingRun.run_id` y `RunResult.run_id`).
327
- 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.
328
- 3. **La línea de comandos con información sensible eliminada.** La salida de error en modo no detallado se elimina 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 eliminar, vuelva a ejecutar con `--verbose`, pero revise antes de publicarlo.
329
- 4. **Versiones de Python / PyTorch, modelo de GPU, sistema operativo.** `backprop info` imprime todo esto de una vez.
337
+ 1. **El `run_id`**: El UUID que se muestra al inicio. Un UUID permite al responsable del sistema correlacionar cada línea de registro, cada punto de control y cada entrada de Weights & Biases para esa ejecución específica.
338
+ 2. **El código de error**: La línea `[NOMBRE_DEL_CÓDIGO]: mensaje` que aparece en stderr. Consulte [códigos de error](https://mcp-tool-shop-org.github.io/backpropagate/handbook/error-codes/) para ver el catálogo de códigos estables.
339
+ 3. **El rastreo de errores (traceback) con información sensible eliminada.** En el modo no detallado, stderr se elimina automáticamente (los tokens Bearer, `sk-*`, `hf_*`, las claves de AWS, y las parejas `password=` / `token=` / `api_key=` se eliminan) es seguro copiarlo. Para ver el rastreo de errores completo y sin información sensible eliminada, ejecute de nuevo con `BACKPROPAGATE_DEBUG=1` (o `--verbose`); revise antes de publicarlo.
340
+ 4. **La salida de `backprop info`**. Un comando imprime información sobre Python / PyTorch / CUDA / el modelo de la GPU / VRAM / el sistema operativo / los complementos instalados: todo lo que el responsable del sistema necesita para identificar la causa de una regresión específica de la plataforma.
341
+
342
+ La [plantilla para informes de errores](https://github.com/mcp-tool-shop-org/backpropagate/issues/new?template=bug_report.yml) solicita explícitamente cada uno de estos elementos, lo que permite una resolución rápida de los problemas. Las preguntas, ideas o discusiones sobre si un comportamiento 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 de [GitHub Security Advisory](https://github.com/mcp-tool-shop-org/backpropagate/security/advisories/new); consulte el archivo [SECURITY.md](SECURITY.md) para conocer la política y los plazos de respuesta.
330
343
 
331
344
  ## Privacidad
332
345
 
333
346
  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.
334
347
 
335
- ## Tabla de puntuación
348
+ ## Referencias
336
349
 
337
- | Categoría | Puntuación | Notas |
338
- |----------|-------|-------|
339
- | A. Seguridad | 6/8 | SECURITY.md, modelo de confianza, sin secretos/telemetría, safe_path(). Se omiten los elementos de MCP. |
340
- | 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. |
341
- | C. Documentación para operadores | 4/7 | README, CHANGELOG, LICENCIA, --help. Registro/MCP/elementos complejos omitidos. |
342
- | D. Higiene del proceso de entrega | 6/9 | verify.sh, versión=etiqueta, 5 analizadores en CI, dependabot, python_requires, compilación limpia. |
343
- | E. Identidad | 4/4 | Logotipo, traducciones, página de inicio, metadatos. |
344
- | **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). |
350
+ 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:
345
351
 
346
- 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.
352
+ - **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.
353
+ - **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.
354
+ - **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.
355
+ - **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).
356
+ - **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.
357
+ - **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.
358
+ - **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.
347
359
 
348
360
  ## Licencia
349
361
 
350
- MIT: Consulte [LICENSE](LICENSE) para obtener más detalles.
362
+ MIT consulte [LICENSE](LICENSE).
351
363
 
352
364
  ---
353
365