Cómo saber en 30 segundos si usa la GPU

Lanza una pregunta corta con la opción --verbose, que al final imprime la velocidad de generación («eval rate»), y, sin cerrar el modelo, mira ollama ps en otra ventana. La documentación de Ollama explica que la columna PROCESSOR indica en qué memoria se cargó el modelo y que «100% GPU» significa que está entero en la gráfica (FAQ de Ollama).

Después compara con nvidia-smi: si la memoria usada de la tarjeta no sube al cargar el modelo, no está en la GPU. En nuestra prueba solo con CPU, la VRAM del equipo no se movió (2.805 MiB de pico frente a unos 3.000 en reposo) y la API de Ollama informó 0 GB en GPU.

Tres comandos de diagnóstico (PowerShell)
  1. ollama run --verbose qwen3.5:4b "Resume en una frase qué es un acta"
  2. ollama ps
  3. nvidia-smi --query-gpu=name,driver_version,memory.used,memory.total --format=csv
  4. Lectura de PROCESSOR: «100% GPU» bien · «100% CPU» no usa la gráfica · «48%/52% CPU/GPU» (por ejemplo) no cabe entero

Comandos de Ollama 0.40.14 y del controlador NVIDIA usados en el laboratorio (04/11/2026). Los porcentajes del reparto son un ejemplo de formato.

Cuánto cambia: GPU frente a solo CPU, medido

Forzamos el modo solo CPU con num_gpu 0 en un PC con Intel Core Ultra 5 245K, 31,3 GB de RAM y RTX 5060 Ti de 16 GB, con el mismo prompt de 524 tokens. Si tus cifras se parecen a la columna de CPU, ya sabes qué pasa. Ojo: este procesador es de escritorio y reciente; un portátil irá más lento aún.

  • qwen3.5:4b: genera 92–95 t/s con GPU y 11,9 t/s solo con CPU (unas 8 veces menos); lee el prompt a 750 t/s frente a 121.
  • qwen3.5:9b: 56–58 t/s con GPU y 5,7 solo con CPU (unas 10 veces menos); lee a 1.760 t/s frente a 58.
  • VRAM que ocupó cada modelo con GPU: qwen3.5:4b 3,6–4,6 GB; qwen3.5:9b 6,4–7,5 GB; gemma4:12b 8,3–9,3 GB.
  • qwen3.6:35b (22 GB) no cabe en 16 GB: Ollama lo repartió en 12,4 GB de GPU y 8,3 GB de RAM, y acabó en error 500 (ver Ollama error 500 «unable to load model»).

Lee el registro: qué GPU detecta Ollama al arrancar

ollama ps te dice qué pasa; el registro te dice por qué. Con la aplicación, está en %LOCALAPPDATA%\Ollama\server.log (solución de problemas de Ollama). Al arrancar, Ollama escribe una línea «inference compute» por cada gráfica que detecta, con la librería (CUDA), el nombre, el controlador y la memoria libre. Si esa línea no nombra tu tarjeta, Ollama no la ve y nada de lo que toques en el modelo lo arreglará. Al cargar un modelo, la línea «offloaded» dice cuántas capas fueron a la GPU.

La línea «server config» lista las variables que Ollama leyó, entre ellas CUDA_VISIBLE_DEVICES. En nuestro arranque estaba vacía, que es lo correcto.

Buscar la detección y las capas en el registro
  1. Select-String -Path "$env:LOCALAPPDATA\Ollama\server.log" -Pattern "inference compute","offloaded","server config" | Select-Object -Last 6
  2. Lo que vimos: msg="inference compute" id=0 library=CUDA compute=12.0 description="NVIDIA GeForce RTX 5060 Ti" driver=13.5 type=discrete total="15.9 GiB" available="14.8 GiB"
  3. Y al cargar qwen3.5:4b: load_tensors: offloaded 33/33 layers to GPU

Líneas del registro de Ollama 0.40.14 en el laboratorio (04/11/2026), recortadas para que quepan.

El arreglo, causa por causa

Ve en este orden: de lo que impide ver la tarjeta a lo que solo impide que el modelo quepa. Después de cada cambio, cierra Ollama del todo (Get-Process ollama* | Stop-Process -Force) y vuelve a abrirlo, porque las variables solo se leen al arrancar.

  • Controlador: Ollama admite tarjetas NVIDIA con compute capability 5.0 o superior y controlador 550 o posterior; las de 5.0 a 6.2 piden el 570 (GPU en la documentación de Ollama). Mira la versión con nvidia-smi y actualiza desde NVIDIA si hace falta.
  • Variables que ocultan la GPU: Get-ChildItem Env: | Where-Object Name -match "CUDA|HIP|GGML|OLLAMA". Según la documentación, CUDA_VISIBLE_DEVICES con un identificador inválido como -1 obliga a usar la CPU, y OLLAMA_LLM_LIBRARY puede forzar una librería de CPU. Para borrarlas de tu usuario: [Environment]::SetEnvironmentVariable("CUDA_VISIBLE_DEVICES", $null, "User").
  • num_gpu a 0 en el modelo: ollama show <modelo> --parameters. Si aparece num_gpu 0 (es justo lo que usamos para simular un PC sin gráfica), crea el modelo sin esa línea o pásale otro valor en la petición.
  • No cabe: si PROCESSOR muestra un reparto, el modelo y su contexto superan la VRAM libre. Prueba uno más pequeño o baja num_ctx. Con 16 GB, los modelos de 4–12B cupieron enteros; el de 35B, no.
  • Otra aplicación ocupa la VRAM: con tres modelos cargados y un juego abierto, la VRAM llegó a 15,6 de 16 GB y gemma4:12b cayó de 111 a unos 3,8 t/s. Descarga lo que no uses con ollama stop <modelo>; por defecto Ollama mantiene cada modelo 5 minutos en memoria.

Cómo comprobar que ha quedado arreglado

Repite la prueba de los 30 segundos: PROCESSOR en «100% GPU», una velocidad del orden de la columna de GPU y la VRAM de nvidia-smi subiendo al cargar el modelo. No uses una sola de las tres. En nuestras pruebas, para gemma4:12b la API de Ollama (/api/ps, la misma que consulta ollama ps) informó de un tamaño de 1,15–1,5 GB, mientras el registro decía 7,0 GB en GPU y nvidia-smi mostraba 8,3–9,3 GB más. El porcentaje en GPU sí era correcto; el tamaño, no. Todos los datos están en el experimento velocidad y VRAM en una RTX 5060 Ti.

Otra trampa al medir: si repites exactamente el mismo prompt, la lectura se dispara a 8.000–13.000 t/s porque Ollama reutiliza lo ya procesado. Cambia el texto o mira la primera ejecución.

Casos raros

  • Gráficas AMD: en Windows, Ollama pide la pila de controladores ROCm v7 y la documentación solo lista las Radeon RX 7600 a 7900 y las PRO W7500 a W7900; para el resto hay soporte Vulkan si su backend está instalado. No lo hemos probado.
  • Portátil con gráfica integrada y dedicada: comprueba que la línea «inference compute» nombra la dedicada. No lo hemos medido en un portátil.
  • La VRAM está llena aunque no hay nada abierto: el escritorio de Windows y otras aplicaciones ya ocupaban unos 2,9–3,0 GB en reposo en nuestro equipo. Cuenta con ellos al elegir modelo.
  • LM Studio tampoco usa la GPU: el control equivalente es el número de capas descargadas a la GPU (GPU offload) al cargar el modelo. LM Studio no entró en nuestras pruebas; comparamos las dos herramientas en Ollama o LM Studio para documentos.

Preguntas frecuentes

¿Qué significa «GPU offloading» en Ollama? Cuántas capas del modelo se cargan en la gráfica. Si caben todas, «100% GPU»; si no, el resto va a la RAM y se ejecuta en la CPU, mucho más despacio. El registro lo dice en la línea «offloaded N/N layers to GPU».

¿Para qué sirve OLLAMA_GPU_OVERHEAD? La ayuda de ollama serve la describe como una reserva de VRAM por GPU, en bytes, que Ollama deja sin usar; por defecto vale 0 (así aparece en la línea «server config» de nuestro registro). Puede ayudar si compartes la tarjeta con otra aplicación; no la hemos medido.

¿Por qué ollama ps dice «100% CPU» si tengo una NVIDIA? Porque Ollama no detecta la tarjeta (mira «inference compute» en el registro y el controlador), porque una variable la oculta o porque el modelo tiene num_gpu 0.

¿LM Studio tiene el mismo problema? El síntoma es el mismo y la causa suele ser el número de capas en GPU o la VRAM libre, pero no lo hemos medido en LM Studio.