Ollama не использует GPU — пять причин, и лог, который их называет
Пока модель загружена, ollama ps печатает колонку PROCESSOR — и эта колонка и есть весь диагноз. Лог сервера называет железо, которое реально нашлось; причин всего около пяти, таблица фиксов ниже.
100% GPU — GPU в порядке, дальше не читайте.
40%/60% CPU/GPU split — не влезла в VRAM, возьмите квант поменьше.
100% CPU — пригодный GPU не найден: устаревший драйвер, отсутствующая группа render/video (AMD), закреплённая OLLAMA_LLM_LIBRARY, или контейнер без GPU-флагов.
ДВЕ КОМАНДЫ
# in one terminal: load a model
ollama run llama3.2 "hello"
# in another: see where it runs
ollama ps
NAME ID SIZE PROCESSOR UNTIL
llama3.2:latest a80c4de17cd9 3.3 GB 100% GPU 4 minutes from now
Затем прочитайте лог сервера, который называет железо, которое Ollama нашла на самом деле при старте:
journalctl -u ollama --no-pager | grep -i "inference compute"
На здоровой машине NVIDIA хочется строку вида:
inference compute id=GPU-xxxx library=CUDA compute=8.9 driver=12.4 name=NVIDIA GeForce RTX 4070
Строки нет вовсе, или она заканчивается сообщением о CPU-only откате — и вы нашли свою проблему. Детекция происходит один раз при старте, не на каждый запрос — после любого фикса sudo systemctl restart ollama перед повторной проверкой.
ТАБЛИЦА ФИКСОВ
Работайте причины по порядку — в девяти случаях из десяти строка лога уже сказала, в какой вы строке таблицы:
| Симптом | Вероятная причина | Фикс |
|---|---|---|
100% CPU, карта NVIDIA есть | Драйвер слишком стар для встроенной CUDA | Обновите драйвер, перезагрузитесь, перезапустите сервис |
100% CPU, AMD на Linux | Группа render/video отсутствует | usermod -aG render,video, перезайдите |
100% CPU, карта AMD не поддерживается | ROCm отвергает цель gfx | HSA_OVERRIDE_GFX_VERSION=10.3.0 |
40%/60% CPU/GPU split | Модель + контекст не помещаются в VRAM | Квант поменьше или num_ctx |
| Вчера работал GPU, сегодня CPU | Закреплена OLLAMA_LLM_LIBRARY или отставший драйвер | Найдите и уберите переменную окружения; обновите драйвер |
| GPU нативно, CPU в Docker | Контейнер запущен без GPU-флагов | Воссоздайте с --gpus=all (или AMD devices) |
NVIDIA: ДРАЙВЕР, А НЕ CUDA
Обычный виновник — драйвер, а не CUDA. Ollama везёт собственные библиотеки CUDA-рантайма, toolkit CUDA вам не нужен — но встроенному рантайму нужен достаточно свежий драйвер, чтобы с ним разговаривать. Работающий nvidia-smi — это не доказательство: он доказывает лишь существование драйвера, не его свежесть.
nvidia-smi --query-gpu=driver_version --format=csv,noheader
# Debian/Ubuntu family
sudo apt install nvidia-driver-570
# Arch family
sudo pacman -S nvidia
# then re-detect:
sudo systemctl restart ollama
verify: journalctl -u ollama --no-pager | grep -i "inference compute" → library=CUDA
SPLIT: ЧАСТИЧНЫЙ ОФФЛОД — ЭТО АРИФМЕТИКА, А НЕ БАГ
Веса модели плюс кеш KV должны уместиться в VRAM. Та же модель, контекст больше — кеш перерастает карту, и остаток выливается на CPU:
Три способа закрыть разрыв, самый дешёвый первым: квант поменьше (Q8 → Q4 делит веса пополам за скромную плату качеством); контекст короче (num_ctx доминирует в размере кеша — 32K на карте 8 GB означает, что большинство слоёв остаются на CPU); и меньше GPU-слоёв — опция num_gpu ограничивает оффлоад сверху, а значение ниже числа слоёв гарантирует split. Если кто-то выставил её в Modelfile или вызове API, снимите. Ещё одна ловушка: 100% GPU, но всё равно медленно — возможно, модель свопается через системную RAM; сравните ollama ps SIZE с вашей реальной VRAM.
AMD НА LINUX: ТРИ ПРОВЕРЯЕМЫЕ ВЕЩИ
1. ROCm в двоичнике — официальный установочный скрипт кладёт его внутрь. Подтвердите, что нашёл сервер: journalctl -u ollama --no-pager | grep -iE "rocm|inference compute".
2. Членство в группе — рантайму нужна /dev/kfd + /dev/dri, то есть группы render/video:
sudo usermod -aG render,video $USER
# log out and back in, then:
sudo systemctl restart ollama
Отсутствующая группа — самый частый пост «Ollama не использует GPU на Ubuntu» на всех форумах — драйвер никогда не был проблемой.
3. Поддерживаемый GPU — или обходной путь. Неподдерживаемые потребительские карты RDNA2 (gfx1031, gfx1032) не проходит детекцию даже с рабочей ROCm-стекой. Стандартный обход — притвориться поддерживаемой картой: sudo systemctl edit ollama, затем:
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"
После перезапустите. Неподдерживаемый, но широко используемый — если поведение плохое, снимите. На Windows поддержка AMD уже; сверяйтесь со списком поддерживаемых GPU у Ollama, прежде чем хоронить установку.
verify: journalctl -u ollama --no-pager | grep -iE "rocm|inference compute" → ваша цель gfx перечислена
«ВЧЕРА РАБОТАЛО»
Обновления меняют одну из трёх вещей, по убыванию вероятности:
- Закреплённая библиотека бекенда.
OLLAMA_LLM_LIBRARYнавязывает один рантнер (cuda_v11,rocm, дажеcpu) и молча перебивает автодетекцию. Это отладочный выключатель, живущий в шелл-профилях и юнит-файлах долго после того, как забыли зачем. Найдите:systemctl show ollama --property=Environment | grep -i llm_libraryиenv | grep OLLAMA— и уберите. - Драйвер отстал от рантайма. Апгрейды Ollama везут более новый CUDA-рантайм; ваш драйвер не сдвинется, пока не сдвинете сами. Тот же фикс, что в разделе драйвера.
- Сервис — контейнер, а флаги потерялись. Воссозданный Docker-контейнер без GPU-флагов — контейнер CPU-only — воссоздайте с
--gpus=all(или AMD devices).
конец пяти причин · ничего не скачано · всё локально