Ollama usa la CPU en vez de la GPU: diagnóstico y recuperación por plataforma

Siguiendo la documentación oficial de Ollama, usa ollama ps, los registros del servicio, nvidia-smi, las comprobaciones de GPU en Docker y los permisos de dispositivos AMD para localizar la causa de la ejecución en CPU y verificar la solución.

Cuando se ejecutan modelos grandes localmente, el problema más confuso es: la máquina obviamente tiene una tarjeta gráfica, pero Ollama todavía consume principalmente CPU y la velocidad es ridículamente lenta.

Permítanme hablar primero de la conclusión. Este tipo de problema no suele tener una única causa. Las categorías más comunes son:

  • Ollama No se reconoce ninguna GPU disponible
  • El controlador y el entorno ROCm o CUDA no están instalados correctamente.
  • Ollama Las variables de entorno correctas no se heredan cuando se inicia el servicio.
  • El modelo es demasiado grande y en realidad se ha devuelto a carga mixta CPU o CPU/GPU.
  • Las plataformas AMD tienen problemas de compatibilidad adicionales, como una versión incorrecta de ROCm, un nombre en clave gfx o una configuración incorrecta de visibilidad del dispositivo.

A continuación se enumeran los pedidos que ahorran más tiempo. 1. Primero confirme si “la GPU realmente no se usa”

La forma más directa es mirar:

1
ollama ps

Fíjate en la columna PROCESSOR:

  • 100% GPU: todos los pesos están cargados en la GPU.
  • 100% CPU: los pesos están en la memoria del sistema.
  • Un valor como 48%/52% CPU/GPU: parte del modelo está offloaded a la GPU y el resto permanece en RAM.

Estos porcentajes describen dónde está cargado el modelo, no el uso instantáneo de la GPU. La utilización puede caer entre generaciones aunque los pesos sigan en la VRAM.

Si lo que ve es 100% CPU, debería concentrarse en verificar el entorno y la configuración del servicio más adelante.

Si ve una carga mixta, no es necesariamente que “la tarjeta gráfica no funciona”, es más probable que no haya suficiente VRAM. 2. Primero elimine el malentendido más común: el modelo no se puede cargar en la VRAM

Mucha gente piensa que siempre que haya una GPU instalada, Ollama podrá realizar una inferencia completa de la tarjeta gráfica. En realidad no.

Si el modelo es demasiado grande, el contexto es demasiado largo o hay otros modelos en la máquina que ocupan VRAM, es probable que Ollama recurra a:

  • Parte GPU + Parte CPU
  • Directo 100% CPU

En este momento, puedes hacer primero las dos verificaciones más simples:

  1. Cambie a un modelo más pequeño para realizar pruebas. Por ejemplo, utilice primero modelos pequeños como 4B y 7B, en lugar de ejecutar una mayor cantidad de parámetros desde el principio.
  2. Descargue otros modelos cargados y vuelva a intentarlo. Primero mire ollama ps para asegurarse de que no haya otros modelos que ocupen la VRAM.

Si un modelo pequeño puede funcionar con la GPU pero un modelo grande no, el problema a menudo no es el controlador sino la capacidad de la VRAM. 3. Compruebe si el controlador de la tarjeta gráfica y el entorno subyacente están disponibles

Si incluso los modelos pequeños solo pueden ejecutar CPU, el siguiente paso es observar el entorno subyacente. Dirección de NVIDIA

Primero asegúrese de que el controlador sea normal y que el sistema pueda ver la tarjeta gráfica. Los métodos de inspección comunes incluyen:

1
nvidia-smi

Si se informan errores aquí, Ollama es básicamente imposible usar la GPU normalmente. Dirección AMD / ROCm

Si es AMD GPU, especialmente en el entorno ROCm, los puntos clave son:

1
2
rocminfo
rocm-smi

Si estas herramientas no pueden enumerar el dispositivo normalmente, significa que el problema aún existe antes de Ollama. No continúe tirando la capa de aplicación.

Para AMD, la pregunta más común no es “¿Están instalados los controladores?” pero:

  • La versión ROCm no coincide con la versión del sistema.
  • El soporte actual de la arquitectura GPU está incompleto

- Aunque el dispositivo existe, el entorno operativo no está correctamente expuesto a Ollama 4. Reinicia el servicio de Ollama, no reinicies simplemente la terminal

Este es un pozo de muy alta frecuencia.

Después de que muchas personas instalan el controlador, cambian las variables de entorno y completan ROCm, simplemente vuelven a abrir una terminal y continúan directamente con ollama run. Pero si Ollama se ejecuta como servicio en segundo plano, es probable que todavía esté utilizando el entorno anterior.

Entonces, un enfoque más estable es:

  • Reinicie completamente el servicio Ollama
  • Reinicie el sistema directamente si es necesario.

Si está ejecutando como un servicio en Linux, normalmente deberá confirmar que el proceso del servicio se haya reiniciado en lugar de utilizar el proceso anterior. 5. Compruebe si las variables de entorno del servicio realmente se pasan

Este paso es especialmente importante en el entorno AMD ROCm.

Algunas máquinas no tienen problemas para ejecutar comandos manualmente en la terminal, pero el servicio Ollama todavía solo ejecuta CPU. La razón es que el proceso de servicio no obtiene las variables que usted establece en el shell.

Las variables comunes a observar incluyen:

1
2
ROCR_VISIBLE_DEVICES
HSA_OVERRIDE_GFX_VERSION

Entre ellos:

  • ROCR_VISIBLE_DEVICES se utiliza para limitar o especificar qué GPU puede ver ROCm.
  • HSA_OVERRIDE_GFX_VERSION Común en algunos problemas de compatibilidad de plataformas AMD

Si solo utiliza temporalmente las variables export en el terminal actual, pero Systemd, el servicio de escritorio en segundo plano u otro proceso demonio inicia Ollama, es posible que estas variables no surtan efecto.

En otras palabras, sólo porque “parece haber sido configurado” en el terminal no significa que realmente se haya obtenido Ollama. 6. La plataforma AMD se centra en la compatibilidad con ROCm

A juzgar por la información de la página pública, el tema del vídeo correspondiente a este problema se encuentra en las líneas AMD Max+ 395, strix halo y AMD ROCm. En este tipo de entorno, Ollama no utiliza la GPU y, a menudo, depende más de la coincidencia de versiones que la plataforma NVIDIA.

Puede priorizar los siguientes elementos:

  1. ¿La versión ROCm es adecuada para el sistema y la tarjeta gráfica actuales?
  2. Si la GPU actual pertenece al rango de arquitectura que ROCm admite mejor
  3. ¿Necesita complementar HSA_OVERRIDE_GFX_VERSION?
  4. ¿Es la versión anterior de Ollama o la versión anterior de la biblioteca de razonamiento subyacente la que causa problemas de compatibilidad?

Si ha confirmado que rocminfo es normal y el sistema puede reconocer la GPU, pero Ollama aún solo ejecuta CPU, entonces existe una alta probabilidad de que necesite volver a la combinación de versiones y volver a verificar en lugar de continuar ajustando ciegamente los parámetros del modelo. 7. Docker, WSL o entornos remotos deben verificar adicionalmente el mapeo de dispositivos

Si no está ejecutando directamente en bare metal, sino en los siguientes entornos:

-Adosador -WSL

  • Contenedor remoto -Entorno virtualizado

Luego debemos observar una capa más: si el dispositivo GPU está realmente expuesto.

Los fenómenos típicos son:

  • El anfitrión puede ver la GPU.
  • Ollama en el contenedor solo puede ejecutar CPU

En este momento, primero debe confirmar que el problema no es el propio Ollama, sino que el contenedor o subsistema no tiene acceso a la GPU en absoluto. 8. Lea el registro al final en lugar de adivinar al principio.

Si ha verificado todo antes, la forma más efectiva no es continuar reinstalando repetidamente, sino mirar directamente el registro de inicio Ollama y el registro de ejecución.

Centrarse en dos tipos de información:

  • ¿Se reconoce la GPU?
  • ¿Hay algún error como controlador, carga de biblioteca, falla de inicialización del dispositivo, etc.?

Siempre que aparezca claramente en el registro algo como “GPU compatible no encontrada” o “Error en la inicialización de ROCm/CUDA”, la dirección de solución de problemas será mucho más clara de inmediato. Leer registros reales por plataforma

ventanas

Salga completamente de Ollama de la bandeja antes de iniciarlo en modo de depuración:

El registro de la versión de instalación

1
2
$env:OLLAMA_DEBUG="1"
& "ollama app.exe"

generalmente se encuentra en:

1
%LOCALAPPDATA%\Ollama\server.log

puede abrir el directorio directamente:

1
explorer $env:LOCALAPPDATA\Ollama

Sistema Linux

1
2
sudo systemctl restart ollama
sudo journalctl -u ollama --since "10 minutes ago" --no-pager

Cuando falla el descubrimiento de dispositivos NVIDIA, verifique nuevamente:

Los errores típicos de CUDA enumerados en el documento oficial de solución de problemas

1
2
3
nvidia-smi
lsmod | grep nvidia_uvm
sudo dmesg | grep -iE 'nvrm|nvidia'

incluyen errores no inicializados, dispositivo no disponible, ningún dispositivo y errores desconocidos. Cuando estos mensajes aparecen en el registro, la dirección es el controlador, el módulo UVM o el tiempo de ejecución del contenedor, no la palabra del mensaje del modelo. acoplador

Primero demuestre que la GPU se puede ver cuando el contenedor se está ejecutando:

1
docker run --rm --gpus all ubuntu nvidia-smi

Cuando este comando falla, el contenedor Ollama no puede usar la GPU NVIDIA. Repare la configuración de NVIDIA Container Toolkit o Docker antes de reiniciar el contenedor Ollama. LinuxAMD

Verifique si los usuarios del servicio Ollama pueden acceder a /dev/kfd y /dev/dri:

1
2
ls -lnd /dev/kfd /dev/dri /dev/dri/*
id ollama

Cuando necesite depurar el proceso de descubrimiento de ROCm:

1
AMD_LOG_LEVEL=3 OLLAMA_DEBUG=1 ollama serve

Si el registro muestra un tiempo de espera de descubrimiento de GPU y el sistema todavía usa el controlador ROCm 6.x o anterior, debe actualizar a un controlador ROCm 7 compatible y reiniciar de acuerdo con la documentación de hardware actual de Ollama. No utilice HSA_OVERRIDE_GFX_VERSION para enmascarar un error claro de versión del controlador. Aceptación después de la reparación.

Complete al menos una verificación de arranque en frío después de la reparación:

1
2
3
ollama stop <模型名>
ollama run <模型名> "只回复 READY"
ollama ps

Observe simultáneamente nvidia-smi, rocm-smi o el monitor GPU del sistema. La conclusión de aceptación se registra según la columna PROCESSOR de ollama ps:

  • 100% GPU: El modelo está completamente cargado en la GPU;
  • 100% CPU: Todavía usando completamente la memoria del sistema;
  • CPU/GPU: Carga mixta, por lo general es necesario continuar juzgando si se debe a una capacidad de VRAM insuficiente.

Finalmente, verifique el registro de servicio nuevamente para confirmar que no falló ningún descubrimiento de nuevo dispositivo. Ver un aumento momentáneo en la utilización de la GPU no es suficiente para demostrar que el modelo siempre está en la GPU. Recuperación y reversión

Si Ollama no puede comenzar después de modificar las variables de entorno, primero deshaga las variables agregadas en esta ronda y reinicie el servicio. No modifique el controlador, el mapeo del contenedor, la versión de ROCm y la configuración de Ollama al mismo tiempo; de lo contrario, será imposible determinar qué cambio tendrá efecto.

Se recomienda realizar solo un cambio en cada ronda y guardar tres pruebas: registro previo a la modificación, comando de modificación y ollama ps modificado. Antes de actualizar el controlador, cree un punto de restauración del sistema o conserve el paquete de instalación del controlador enrollable. Comprobando orden

Si sólo quieres recordar el camino más corto, puedes hacerlo en este orden:

  1. ollama ps Compruebe si se trata de GPU, CPU o una carga mixta.
  2. Cambie a un modelo más pequeño para descartar VRAM insuficiente.
  3. Utilice nvidia-smi, rocminfo, rocm-smi para confirmar primero que el entorno subyacente es normal.
  4. Reinicie completamente el servicio Ollama.
  5. Verifique las variables de entorno del servicio, especialmente ROCR_VISIBLE_DEVICES y HSA_OVERRIDE_GFX_VERSION de AMD.
  6. Si es Docker/WSL, verifique nuevamente la asignación del dispositivo.

7. Finalmente, mire los registros para localizar el informe de error específico. Información oficial