TL;DR
Chạy ollama ps khi một model đang được nạp: cột PROCESSOR sẽ nói sự thật. 100% GPU nghĩa là GPU ổn và bạn có thể dừng đọc ở đây. Tỉ lệ như 40%/60% CPU/GPU nghĩa là model không vừa VRAM — hãy dùng quant nhỏ hơn. 100% CPU nghĩa là Ollama không tìm thấy GPU dùng được: thường là driver cũ, thiếu thành viên nhóm (AMD trên Linux), OLLAMA_LLM_LIBRARY bị ghim, hoặc container khởi động không có quyền truy cập GPU. Sửa đúng nguyên nhân mà log nêu ra; chỉ có khoảng năm nguyên nhân thôi.
Làm sao kiểm tra Ollama có thật sự dùng GPU không?
Hai lệnh, không phỏng đoán.
# Ở một terminal: nạp một model
ollama run llama3.2 "hello"
# Ở terminal khác: xem nó chạy ở đâu
ollama ps NAME ID SIZE PROCESSOR UNTIL
llama3.2:latest a80c4de17cd9 3.3 GB 100% GPU 4 minutes from now Cột PROCESSOR có ba trạng thái:
100% GPU— mọi layer đã được offload. Xong.48%/52% CPU/GPU— offload một phần. GPU vẫn hoạt động, nhưng model cộng context không vừa VRAM. Xem phần VRAM bên dưới.100% CPU— inference chạy trên CPU. GPU hoặc không được nhận diện, hoặc bị tắt chủ đích.
Sau đó đọc log của server — nó ghi rõ phần cứng mà Ollama tìm thấy lúc khởi động:
journalctl -u ollama --no-pager | grep -i "inference compute" Trên một máy NVIDIA khỏe, bạn muốn thấy dòng kiểu:
inference compute id=GPU-xxxx library=CUDA compute=8.9 driver=12.4 name=NVIDIA GeForce RTX 4070 Không có dòng nào cả, hoặc dòng đó kết thúc bằng thông báo fallback chỉ-CPU, là bạn đã tìm ra vấn đề. Phần còn lại của bài là năm nguyên nhân, xếp theo khả năng cao nhất.
Vì sao Ollama báo “no compatible GPU discovered”?
Với NVIDIA, thủ phạm thường lệ là driver chứ không phải CUDA. Ollama tự kèm theo các thư viện runtime CUDA, nên bạn không cần cài CUDA toolkit — nhưng runtime đóng gói ấy cần driver đủ mới để “nói chuyện” với nó. nvidia-smi chạy được chưa phải bằng chứng; nó chỉ chứng minh có driver, không chứng minh driver đủ mới.
nvidia-smi --query-gpu=driver_version --format=csv,noheader Nếu phiên bản đã cũ vài năm, hãy cập nhật rồi khởi động lại:
# Nhánh Debian/Ubuntu
sudo apt install nvidia-driver-570
# Nhánh Arch
sudo pacman -S nvidia Sau khi cập nhật driver, khởi động lại service Ollama để nó quét lại thiết bị — việc nhận diện chỉ xảy ra một lần lúc khởi động, không phải theo từng request:
sudo systemctl restart ollama Nếu log giờ in ra GPU của bạn với library=CUDA, bạn đã xong. Nếu vẫn chê, kiểm tra xem OLLAMA_LLM_LIBRARY có bị đặt ở đâu đó không — xem phần “sau khi cập nhật”.
Vì sao Ollama chỉ dùng GPU cho một phần model?
Offload một phần là phép arithmetic, không phải bug: trọng số model cộng KV cache cho cửa sổ context của bạn phải vừa VRAM. Model 7B ở Q4 cỡ 4–5 GB; cho context 8K thì cache lại chiếm thêm. Trên card 8 GB thì bắt buộc một phần phải ở lại CPU, và ollama ps hiển thị tỉ lệ đó.
Ba cách thu hẹp khoảng cách, rẻ nhất trước:
- Quant nhỏ hơn. Hạ từ Q8 xuống Q4 giảm một nửa kích thước trọng số với mức hao chất lượng khiêm tốn. Các đánh đổi được bàn trong GGUF quantization levels explained.
- Context ngắn hơn.
num_ctxchi phối kích thước cache. Context 32K trên card 8 GB đồng nghĩa phần lớn layer ở lại CPU. - Ít GPU layer hơn. Tùy chọn
num_gpugiới hạn số layer được offload. Đặt nó dưới tổng số layer là chắc chắn phân mảnh — nếu ai đó đã đặt trong Modelfile hoặc lời gọi API, hãy gỡ ra.
Cũng nhớ cái bẫy ngược lại: GPU hiện 100% GPU nhưng chạy chậm hơn mong đợi có thể đang swap qua RAM hệ thống. So cột SIZE của ollama ps với VRAM thật của bạn.
Vì sao Ollama không dùng GPU AMD của tôi?
AMD trên Linux cần ba thứ, và cả ba đều kiểm tra được:
1. Bản build hỗ trợ ROCm. Script cài chính thức trên Linux kèm bản build ROCm. Xác nhận server đã nhận diện được gì:
journalctl -u ollama --no-pager | grep -iE "rocm|inference compute" 2. Thành viên nhóm. Runtime ROCm cần truy cập /dev/kfd và /dev/dri, tức là bạn phải thuộc nhóm render và video:
sudo usermod -aG render,video $USER
# đăng xuất rồi đăng nhập lại, sau đó:
sudo systemctl restart ollama Cãi nhóm bị thiếu này chính là bài “Ollama not using GPU on Ubuntu” phổ biến nhất trên mọi diễn đàn, và nó sống sót qua mọi lần cài lại driver vì driver chưa bao giờ là vấn đề.
3. GPU được hỗ trợ — hoặc một override. Các card consumer RDNA2 không được hỗ trợ (gfx1031, gfx1032) sẽ trượt bước nhận diện dù stack ROCm hoạt động. Cách xử lý chuẩn là khai báo một target tương thích:
sudo systemctl edit ollama [Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0" Rồi sudo systemctl restart ollama. Đây là override không chính thức nhưng được dùng rất rộng; nếu nó gây rối, gỡ ra là bạn trở lại vùng hỗ trợ chính thức. Nếu bạn muốn toàn quyền quyết backend thay vì đấu với autodetect, đó chính là khác biệt cốt lõi được bàn trong llama.cpp vs Ollama.
Trên Windows, hỗ trợ AMD hẹp hơn — kiểm tra danh sách GPU được hỗ trợ của Ollama cho card của bạn trước khi kết luận bản cài bị hỏng.
Vì sao Ollama ngừng dùng GPU sau khi cập nhật?
Cập nhật làm thay đổi một trong ba thứ, theo thứ tự khả năng:
- Một backend library bị ghim.
OLLAMA_LLM_LIBRARYép dùng một runner cụ thể (cuda_v11,rocm, hoặc thậm chícpu). Nó sinh ra để debug, nó đè kín autodetect mà không báo gì, và nó tồn tại trong shell profile lẫn service file lâu sau khi lý do đã bị lãng quên. Tìm và gỡ nó:
systemctl show ollama --property=Environment | grep -i llm_library
env | grep OLLAMA - Driver tụt lại sau runtime. Bản nâng cấp Ollama kèm runtime CUDA mới hơn; driver của bạn không tự nhích cho tới khi bạn nhích nó. Cách sửa giống phần driver ở trên.
- Service là container và cờ đã mất. Một container được tạo lại mà thiếu cờ GPU là một container chỉ-CPU. Lệnh NVIDIA là:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 ollama/ollama Với container AMD, tương đương là passthrough thiết bị cộng thêm nhóm:
docker run -d --device=/dev/kfd --device=/dev/dri
--group-add video --group-add render
-v ollama:/root/.ollama -p 11434:11434 ollama/ollama Không --gpus=all, không GPU — Docker không có lý do nào để rộng lượng.
Ollama có chạy trong WSL2 không?
Có, với đúng driver ở đúng chỗ: cài driver NVIDIA cho Windows, đừng bao giờ cài driver Linux bên trong distro — driver trong WSL làm gãy CUDA passthrough chứ không sửa gì. Sau đó cập nhật WSL và xác nhận thiết bị passthrough tồn tại:
wsl --update # chạy từ PowerShell
ls /dev/dxg # bên trong WSL — phải tồn tại thì mới dùng được GPU Khi /dev/dxg có mặt và driver Windows là bản mới, Ollama trong WSL2 offload lên GPU y như bản cài native. Nếu muốn bỏ hẳn lớp trung gian, bản Ollama cho Windows chạy native và thấy GPU không cần WSL.
Ollama có cần GPU không?
Không — chạy chỉ-CPU cho kết quả giống hệt về mặt chức năng, chỉ chậm hơn, và với model nhỏ trên CPU nhanh thì hoàn toàn dùng được. Trên Apple Silicon câu hỏi tan biến: Metal dùng unified memory tự động, và giới hạn duy nhất là bạn sẵn sàng chia bao nhiêu RAM cho model.
Checklist năm phút
| Triệu chứng | Nguyên nhân khả dĩ | Cách sửa |
|---|---|---|
100% CPU trong ollama ps, có card NVIDIA | Driver cũ hơn CUDA đi kèm | Cập nhật driver, reboot, restart service |
100% CPU, AMD trên Linux | Thiếu nhóm render/video | usermod -aG render,video, đăng nhập lại |
100% CPU, card AMD không được hỗ trợ | ROCm từ chối target gfx | HSA_OVERRIDE_GFX_VERSION=10.3.0 |
Tỉ lệ 40%/60% CPU/GPU | Model + context vượt VRAM | Quant nhỏ hơn hoặc num_ctx ngắn hơn |
| Hôm qua chạy GPU, hôm nay CPU | OLLAMA_LLM_LIBRARY bị ghim hoặc driver lỗi thời | Tìm và gỡ biến môi trường; cập nhật driver |
| GPU khi chạy native, CPU trong Docker | Container khởi động thiếu cờ GPU | Tạo lại với --gpus=all (hoặc thiết bị AMD) |
Kiểm tra theo thứ tự này: ollama ps để biết trạng thái, log server để xem danh sách nhận diện, rồi đến bảng. Chín trên mười lần, dòng log đã chỉ sẵn bạn đang ở hàng nào.
— mrsaynothing
— mrsaynothing
Ghi chú thực địa về AI, Linux và self-hosting.
Thảo luận bài này trên dev.to dev.to ↗
Nhận how-to tiếp theo qua email
Một email mỗi bài viết. Sửa xong rồi đi tiếp.
cái này là gì?Git Revert vs Reset: Cách Nào Cứu Lịch Sử?
Thích kiểu viết này? Tôi build như vậy để kiếm sống. thuê tôi