Todos los artículos

Ollama no usa la GPU y va al 100 % en CPU: solución en 4 pasos (salida probada, 2026)

Si la columna PROCESSOR de ollama ps dice 100% CPU, Ollama no usa la GPU. Cuatro pasos: confirmarlo, leer la línea inference compute, revisar CUDA_VISIBLE_DEVICES y similares y arreglar la causa. Probado en CPU; los arreglos de GPU vienen de la documentación oficial.

Ollama no usa la GPU: tarjeta gráfica de arcilla con dos ventiladores, una llama de arcilla y un cable suelto con signo de interrogación
También disponible en中文English

Respuesta corta: con el modelo cargado, ejecuta ollama ps y mira la columna PROCESSOR. Si dice 100% CPU, Ollama no encontró una GPU utilizable, o le dijiste que no la use. Después lee las primeras líneas del registro del servidor: la línea inference compute nombra el dispositivo que eligió Ollama. Las causas habituales son un controlador de GPU no compatible o demasiado viejo, un contenedor que no ve la GPU, un CUDA_VISIBLE_DEVICES=-1 olvidado o un modelo más grande que tu VRAM. Ejecuté Ollama 0.40.15 en un equipo Linux solo con CPU y muestro la salida real. No tenía GPU para probar, así que las soluciones de GPU vienen de la documentación oficial de Ollama y están marcadas como tales.

Paso 1: confirma que de verdad usa la CPU

Carga el modelo y ejecuta ollama ps en otra terminal. Las preguntas frecuentes oficiales explican la columna PROCESSOR:

  • 100% GPU: el modelo está entero en la memoria de la GPU.
  • 100% CPU: el modelo está entero en la memoria del sistema.
  • 48%/52% CPU/GPU (ejemplo de las FAQ): el modelo está repartido entre ambas.

Esto obtuve en el equipo solo con CPU y un modelo de prueba diminuto:

NAME           ID              SIZE      PROCESSOR    CONTEXT    RUNNER      UNTIL
tiny:latest    8cf91c7109e7    6.3 MB    100% CPU     2048       llamacpp    4 minutes from now

La API muestra lo mismo: curl localhost:11434/api/ps devolvió "size_vram":0 para ese modelo. Un modelo que está entero en una GPU debería devolver un size_vram distinto de cero; no pude confirmarlo aquí.

Paso 2: lee «inference compute» en el registro del servidor

Dónde está el registro depende de cómo ejecutes Ollama. La página de solución de problemas lo lista: ~/.ollama/logs/server.log en Mac, journalctl -u ollama --no-pager --follow --pager-end en Linux con systemd, docker logs <nombre-del-contenedor> en un contenedor, y la propia terminal si ejecutas ollama serve a mano.

En mi equipo solo con CPU, el inicio del registro decía esto:

msg="discovering available GPUs..."
msg="inference compute" id=cpu library=cpu compute="" name=cpu ... total="15.6 GiB" available="8.4 GiB"
msg="vram-based default context" total_vram="0 B" default_num_ctx=4096

library=cpu es la pista. En un equipo donde Ollama sí encuentra una GPU, esa línea debería nombrarla; no pude comprobarlo porque este equipo no tiene.

Para más detalle arranca el servidor con OLLAMA_DEBUG=1. En mi equipo, el registro de depuración mostró por qué se omitió CUDA:

load_backend: failed to load .../cuda_v12/libggml-cuda.so: libcuda.so.1: cannot open shared object file: No such file or directory

Significa que no se encontró la biblioteca del controlador NVIDIA. En una máquina con GPU real, una línea de este tipo apuntaría a un problema del controlador.

Paso 3: busca una variable que fuerce la CPU

La documentación dice que poner CUDA_VISIBLE_DEVICES (NVIDIA), ROCR_VISIBLE_DEVICES (AMD) o GGML_VK_VISIBLE_DEVICES (Vulkan) a un ID no válido, como -1, fuerza el uso de la CPU. Es fácil ponerla una vez para probar y olvidarla. Lo probé:

CUDA_VISIBLE_DEVICES=-1 OLLAMA_DEBUG=1 ollama serve
msg="user overrode visible devices" CUDA_VISIBLE_DEVICES=-1
msg="if GPUs are not correctly discovered, unset and try again"

Ollama incluso te dice que quites la variable. Ejecuta env | grep -i -E "visible_devices|OLLAMA" en la shell (o revisa la unidad de systemd o el comando de Docker) para ver qué recibió de verdad el servidor.

Paso 4: arregla la causa (según la documentación oficial)

No pude probar esto en una GPU. Viene de la página de hardware compatible y de la página de solución de problemas.

NVIDIA

  • La tarjeta necesita capacidad de cómputo 5.0 o superior y controlador versión 550 o más reciente. Las tarjetas con capacidad 5.0 a 6.2 necesitan controlador 570 o más reciente.
  • Tras suspender y reanudar en Linux, Ollama puede perder la GPU y volver a la CPU. La documentación sugiere recargar el controlador UVM: sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm.
  • Si el registro muestra códigos de error como 3, 46, 100 o 999, la documentación sugiere: revisar el runtime del contenedor, ejecutar sudo nvidia-modprobe -u, recargar nvidia_uvm, reiniciar y actualizar el controlador. Para más detalle, usa CUDA_ERROR_LEVEL=50.

AMD

  • En Linux, Ollama necesita el controlador AMD ROCm v7. Un controlador ROCm 6 antiguo puede hacer que la detección se cuelgue hasta agotar el tiempo y volver a la CPU. El registro muestra entonces failure during GPU discovery.
  • Tu usuario puede necesitar estar en el grupo video o render para abrir /dev/kfd.
  • Para algunas tarjetas no compatibles, la documentación describe HSA_OVERRIDE_GFX_VERSION, por ejemplo 10.3.0 para una RX 5400. Es un experimento, no una garantía.

Docker

  • Comprueba primero que el runtime del contenedor funciona: docker run --gpus all ubuntu nvidia-smi. Si eso falla, Ollama tampoco verá la GPU.
  • Si Ollama arranca en la GPU y luego cae a la CPU, la documentación indica poner "exec-opts": ["native.cgroupdriver=cgroupfs"] en /etc/docker/daemon.json.

El modelo no cabe en la VRAM

Un modelo más grande que tu VRAM se reparte, y ollama ps muestra una mezcla como 48%/52% CPU/GPU. Es comportamiento normal, no un fallo. Usa un modelo más pequeño o una ventana de contexto menor. Mira la longitud de contexto en Ollama y la calculadora de VRAM.

Elegir qué GPU usa Ollama

Con varias GPU, la documentación da una variable por fabricante: CUDA_VISIBLE_DEVICES (usa los UUID de nvidia-smi -L, porque la numeración puede cambiar), ROCR_VISIBLE_DEVICES (mira rocminfo) y GGML_VK_VISIBLE_DEVICES para Vulkan. Para apagar Vulkan, usa OLLAMA_VULKAN=0. Ponlas en el proceso del servidor, no en la shell donde ejecutas el cliente. Antes de comprar, compara tu tarjeta con las GPU con mejor relación calidad-precio para LLM y lo que puede ejecutar una RTX 4090.

Errores relacionados

Más mensajes de Ollama y llama.cpp están en la lista de errores. Si el registro dice «model requires more system memory», lee ese artículo.

Preguntas frecuentes

¿Ollama usa la GPU automáticamente?

Sí, cuando encuentra una compatible. La documentación describe la detección automática al arrancar. En Mac usa Metal para las GPU de Apple.

¿Por qué un modelo pequeño va bien en CPU y uno grande se arrastra?

Una CPU tiene mucho menos ancho de banda de memoria que una GPU, así que la velocidad cae rápido al crecer el modelo. No hice mediciones en el equipo de prueba, porque el modelo de prueba pesa solo 6 MB.

¿Puedo forzar la CPU a propósito?

Sí. Un ID no válido como CUDA_VISIBLE_DEVICES=-1 lo hace, como se probó arriba.

Fuentes y notas de prueba

  • Documentación de Ollama: hardware compatible (docs.ollama.com/gpu), solución de problemas (docs.ollama.com/troubleshooting), FAQ (docs.ollama.com/faq).
  • Probado por mí: Ollama 0.40.15 en Linux solo con CPU, ollama ps, /api/ps, el registro de arranque, OLLAMA_DEBUG=1, CUDA_VISIBLE_DEVICES=-1.
  • No probado: ninguna GPU real de NVIDIA, AMD o Apple, paso de GPU en Docker, arreglos de controladores, HSA_OVERRIDE_GFX_VERSION.

Deja una idea

Tu dirección de correo no se publicará.