Guía paso a paso

Monta tu IA local: qué modelo aguanta tu PC y cómo instalarlo

Una IA tipo ChatGPT corriendo en tu propio ordenador: sin cuenta, sin internet, sin pagar y sin que tu código salga de tu casa. La parte difícil no es instalarla — es saber qué modelo aguanta tu máquina. Esto se resuelve en dos comandos.

Probado el 24/08/2026 en Linux · Intel i7-14700F · 16 GB RAM · RTX 4060 8 GB

01Qué modelo aguanta tu ordenador

La herramienta se llama llmfit. Detecta tu CPU, tu RAM y tu GPU, y puntúa miles de modelos diciéndote cuáles te entran, a qué velocidad estimada irían y cuánta memoria consumen. Es open source y no instala nada permanente si la lanzas con uvx.

# 1. Instala uv (si no lo tienes)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. Mira lo que tienes
uvx llmfit system

# 3. Modelos que encajan perfecto en tu equipo
uvx llmfit fit --perfect -n 10

# 4. Ficha completa de uno concreto
uvx llmfit info Qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-Int4

En mi máquina salieron 9.361 modelos compatibles; el mejor puntuado fue Qwen2.5-Coder 7B con 92/100, unos 39 tokens/s estimados y un 59% de uso de la VRAM. Fíjate siempre en tres columnas: Score, tok/s est. y Mem %. Si Mem% pasa del 85%, ese modelo te va a dar problemas en cuanto alargues la conversación.

Ojo: los tok/s de llmfit son una estimación teórica (±30%), no una medida real. Para medirlo de verdad en tu equipo existe llmfit bench, que necesita el modelo ya cargado.

02Instala Ollama y descarga el modelo

Ollama es el motor que ejecuta el modelo en tu máquina. Se instala en un comando y todo lo demás son tres más.

# Linux (también funciona en WSL2)
curl -fsSL https://ollama.com/install.sh | sh

# macOS
brew install ollama

# Windows: descarga el instalador en ollama.com/download

Los tres comandos que necesitas

ollama pull qwen2.5-coder:7b   # descarga (4,7 GB, una sola vez)
ollama list                    # qué tienes instalado
ollama run qwen2.5-coder:7b    # abre el chat

También puedes lanzarle una pregunta directa sin entrar al chat, que es como lo grabé en el vídeo:

ollama run qwen2.5-coder:7b "Escribe una función Python que detecte si un texto es spam"

03Qué modelo elegir según tu gráfica

Si no quieres pasar por llmfit, esta tabla es un atajo razonable. La regla de oro: un modelo cuantizado a 4 bits ocupa aproximadamente parámetros ÷ 2 en gigas (un 7B ≈ 4,5 GB), y necesitas hueco extra para el contexto.

VRAMModelo recomendadoNota
4 GBqwen2.5-coder:3b · llama3.2:3bRápido, para tareas simples y autocompletado.
6 GBqwen2.5-coder:7b (Q4)Entra justo. Baja el contexto si se queda sin memoria.
8 GBqwen2.5-coder:7b · llama3.1:8bEl punto dulce. Es lo que uso yo en una RTX 4060.
12 GBqwen2.5:14b · gemma2:9bRespuestas notablemente mejores, sigue siendo rápido.
16 GB o másqwen2.5:32b (Q4) · llama3.3:70b (Q3)Calidad cercana a los modelos de pago.
Sin GPUqwen2.5:3b en CPUFunciona, pero cuenta con 3-8 tokens/s. Paciencia.

04Úsalo desde tus propios programas

Ollama levanta una API local en el puerto 11434. Esto es lo que convierte el juguete en herramienta: cualquier script tuyo puede hablar con el modelo sin salir a internet.

curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5-coder:7b",
  "prompt": "Resume este texto en una frase: ...",
  "stream": false
}'

Y en Python, con la librería oficial (pip install ollama):

import ollama

r = ollama.chat(model="qwen2.5-coder:7b", messages=[
    {"role": "user", "content": "¿Qué hace este regex? ^\\d{3}-\\d{4}$"},
])
print(r["message"]["content"])

05Problemas típicos

Error: model requires more system memory than is available
El modelo no cabe. Baja de tamaño (de :7b a :3b), usa una cuantización menor, o reduce el contexto con OLLAMA_CONTEXT_LENGTH=4096.
Va lentísimo y la GPU está a 0%
Ollama está tirando de CPU. Comprueba los drivers de NVIDIA con nvidia-smi. En Linux, ollama ps te dice si el modelo está en GPU o en CPU.
No sé si el modelo se ha descargado del todo
ollama list te muestra lo que tienes en disco con su tamaño real. Si no aparece, el pull no terminó.
Quiero borrar un modelo para liberar disco
ollama rm nombre-del-modelo. Un 7B cuantizado ocupa unos 4,7 GB.

06Caso real: que te cuadre el IVA del trimestre

Aquí es donde una IA local deja de ser un juguete. Un autónomo o una pyme mete sus facturas en un CSV y el ordenador saca el resumen del modelo 303 — sin subir la facturación de sus clientes a la nube de nadie.

Regla importante: los números los suma Python, no el modelo. Un LLM no debe calcular tu dinero: alucina decimales. La IA hace lo que sí sabe hacer — leer el resultado, detectar riesgos y redactarlo. Ese reparto de tareas es lo que separa un script útil de un desastre contable.

El fichero de facturas

fecha,tipo,concepto,cliente_proveedor,base,iva_pct
2026-07-03,emitida,Desarrollo web tienda online,Panaderia La Espiga SL,1850.00,21
2026-07-08,recibida,Hosting y dominio anual,Hostinger,142.00,21
2026-07-12,emitida,Mantenimiento mensual julio,Clinica Dental Sonrisa,450.00,21
2026-07-15,recibida,Portatil de trabajo,PCComponentes,1290.00,21
...

El script completo

Guárdalo como iva_local.py junto al CSV y lánzalo con python3 iva_local.py facturas.csv. Necesita Ollama corriendo y el modelo ya descargado (paso 02).

#!/usr/bin/env python3
"""Cuadra el IVA del trimestre con una IA que corre en tu propio ordenador.

Los numeros los calcula Python (exactos, deterministas).
El modelo local solo redacta el informe y avisa de lo que chirria.
Ninguna factura sale de esta maquina.
"""
import csv, sys, json, urllib.request
from collections import defaultdict

CSV = sys.argv[1] if len(sys.argv) > 1 else "facturas.csv"
MODELO = "qwen2.5-coder:7b"

emitidas, recibidas = [], []
with open(CSV, encoding="utf-8") as f:
    for r in csv.DictReader(f):
        r["base"] = float(r["base"])
        r["cuota"] = round(r["base"] * float(r["iva_pct"]) / 100, 2)
        (emitidas if r["tipo"] == "emitida" else recibidas).append(r)

base_rep = round(sum(r["base"] for r in emitidas), 2)
iva_rep  = round(sum(r["cuota"] for r in emitidas), 2)
base_sop = round(sum(r["base"] for r in recibidas), 2)
iva_sop  = round(sum(r["cuota"] for r in recibidas), 2)
resultado = round(iva_rep - iva_sop, 2)

por_cliente = defaultdict(float)
for r in emitidas:
    por_cliente[r["cliente_proveedor"]] += r["base"]

print("=" * 62)
print("  MODELO 303 - 3er TRIMESTRE 2026        (calculado en local)")
print("=" * 62)
print(f"  Facturas emitidas .......... {len(emitidas):>3}   base {base_rep:>9,.2f} EUR")
print(f"  IVA repercutido (21%) ...............   iva {iva_rep:>9,.2f} EUR")
print(f"  Facturas recibidas ......... {len(recibidas):>3}   base {base_sop:>9,.2f} EUR")
print(f"  IVA soportado (21%) .................   iva {iva_sop:>9,.2f} EUR")
print("-" * 62)
print(f"  A INGRESAR (casilla 71) .............       {resultado:>9,.2f} EUR")
print("=" * 62)
print()

top_cliente, top_base = max(por_cliente.items(), key=lambda x: x[1])
top_pct = round(top_base / base_rep * 100, 1)

resumen = {
    "trimestre": "3T 2026",
    "a_ingresar_eur": resultado,
    "iva_repercutido_eur": iva_rep,
    "iva_soportado_eur": iva_sop,
    "cliente_principal": top_cliente,
    "peso_cliente_principal_pct": top_pct,
    "num_facturas_emitidas": len(emitidas),
}

prompt = (
    "Eres el asesor fiscal de un autonomo espanol. Escribe EXACTAMENTE 3 lineas, "
    "cada una empezando por '- '. Linea 1: cuanto hay que ingresar en el modelo 303. "
    "Linea 2: el riesgo de depender de su cliente principal, citando el porcentaje. "
    "Linea 3: un consejo practico para el proximo trimestre. "
    "USA SOLO las cifras que te doy, NO calcules ni inventes ningun numero nuevo. "
    "Sin saludos, sin despedidas, sin titulos.\n\n" + json.dumps(resumen, ensure_ascii=False)
)

req = urllib.request.Request(
    "http://localhost:11434/api/generate",
    data=json.dumps({"model": MODELO, "prompt": prompt, "stream": False}).encode(),
    headers={"Content-Type": "application/json"},
)
print("  > preguntando al modelo local (" + MODELO + ")...\n")
with urllib.request.urlopen(req, timeout=300) as resp:
    texto = json.loads(resp.read())["response"].strip()
print(texto)
print()
print("  Ninguna factura ha salido de este ordenador.")

Salida real en mi equipo con 16 facturas de ejemplo: 1.315,84 € a ingresar en la casilla 71, y el modelo avisando de que el 48,3% de la facturación depende de un solo cliente. Todo en local, en unos segundos.

Esto no sustituye a tu gestoría. Es una herramienta para llegar a la cita con los números ya ordenados y entender tu propio negocio. La declaración la presenta quien sabe de fiscalidad.

Siguiente paso: que trabaje sola

Tener el modelo instalado está bien. Lo interesante viene cuando lo conectas a un automatizador y deja de necesitarte para funcionar. Eso es lo próximo que voy a publicar.

Ver los vídeos

Herramientas mencionadas: llmfit · Ollama · uv