JARVIS: asistente de voz local para Linux
Nucleo propio: oye con whisper.cpp, piensa con un modelo de Ollama, habla con Piper, y hace RAG sobre los apuntes del usuario. 100% local, sin cuentas ni claves. Escrito bajo una restriccion dura, 4 GB de VRAM: el cerebro y whisper comparten tarjeta y solo caben porque estan dimensionados para ello. El RAG usa embeddings estaticos con busqueda hibrida; la voz clonada se sirve de una cache de frases. Incluye instalador (install.sh), requisitos, y documentacion del stack, del manejo de root y de las acciones. Los apuntes indexados y el diario NO se incluyen: son privados y el .gitignore los bloquea.
This commit is contained in:
commit
8e4bc8ad94
125 changed files with 25033 additions and 0 deletions
61
entrena/README.md
Normal file
61
entrena/README.md
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# Entrenamiento de JARVIS
|
||||
|
||||
El fine-tuning NO sustituye al RAG (nucleo/saber/), lo complementa. El RAG ya
|
||||
funciona y da el conocimiento fresco; esto hornea el estilo y los flujos en los
|
||||
pesos. Por eso fue: primero RAG, esto despues.
|
||||
|
||||
## Los tres pasos
|
||||
|
||||
1. dataset.py convierte los apuntes de COFRE en pares pregunta-respuesta
|
||||
(usa el indice de nucleo/saber/, ~10 h con el 4B local)
|
||||
2. afina.py QLoRA sobre el dataset. --revisa dice si la maquina puede
|
||||
3. exportar el adaptador a GGUF + Modelfile con ADAPTER, para ollama
|
||||
|
||||
## Por que falla hoy: qwen3.5 es MULTIMODAL (16 ago)
|
||||
|
||||
Las pruebas de `afina.py` cargan el modelo bien y se caen justo despues, al
|
||||
enganchar los adaptadores, con un mensaje que no viene a cuento:
|
||||
|
||||
Incorrect image source. Must be a valid URL starting with `http://`
|
||||
|
||||
No es un fallo de red ni de rutas. **`Qwen/Qwen3.5-2B` es `image-text-to-text`**
|
||||
—comprobado en la API de HuggingFace, y el propio GGUF lo delata: el
|
||||
`model_info` de ollama trae `qwen35.vision.block_count = 24`—. O sea que el
|
||||
modelo lleva torre de vision, y `FastLanguageModel` lo mete por el camino de
|
||||
solo texto mientras transformers intenta procesar una imagen que no existe.
|
||||
|
||||
La pista estaba en el log y se leyo como ruido:
|
||||
|
||||
Unsloth: Explicit target_modules are constrained by the
|
||||
finetune_(vision|language|attention|mlp) filters
|
||||
|
||||
Ese aviso solo lo emite el camino multimodal.
|
||||
|
||||
Por donde va el arreglo: `FastVisionModel` con `finetune_vision_layers=False`,
|
||||
que es la via de unsloth para afinar solo la parte de lenguaje de un modelo con
|
||||
vision. **Sin probar todavia.**
|
||||
|
||||
De paso, los nombres que no existen en HuggingFace y que las pruebas fueron
|
||||
descartando: `Qwen3.5-3B`, `Qwen3.5-3B-Instruct`, `Qwen3.5-1.7B`,
|
||||
`Qwen3.5-1.7B-Instruct`, `Qwen3.5-1.5B`. El unico que carga es `Qwen3.5-2B`
|
||||
(1,95 GB).
|
||||
|
||||
## Donde entrenar
|
||||
|
||||
T1200 (4 GB) al limite. Turing, sin bf16. Posible pero fragil.
|
||||
3060 (12 GB) holgado. El sitio natural. El dataset viaja como fichero.
|
||||
|
||||
## Para entrenar
|
||||
|
||||
pip install unsloth # trae peft, trl, bitsandbytes
|
||||
./afina.py --revisa # comprueba
|
||||
./afina.py # entrena
|
||||
|
||||
## Exportar a ollama (tras entrenar)
|
||||
|
||||
# con llama.cpp:
|
||||
python convert_lora_to_gguf.py jarvis-lora --outfile jarvis-lora.gguf
|
||||
# Modelfile:
|
||||
# FROM qwen3.5:4b
|
||||
# ADAPTER ./jarvis-lora.gguf
|
||||
ollama create qwen3.5:4b-jarvis-cofre -f Modelfile
|
||||
Loading…
Add table
Add a link
Reference in a new issue