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 فقط — وقد وقفت على مشكلتك. الكشف يقع مرة واحدة عند البادر، لا في كل طلب — بعد أي إصلاح، 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) |
NVIDIA: الإدرايفر، وليس CUDA
الجاني المألوف الإدرايفر، لا الـCUDA. Ollama تحمل ضمناً مكتبات وقت تشغيل CUDA بنفسها، فلا تحتاج حزمة 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 لكنه ما يزال بطيئاً — ربما يدون العناصر عبر ذاكرة النظام؛ قِس 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» في كل منتدَى — الـdriver لم يكن المشكلة إطلاقاً.
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يفرض عدّاء (runner) واحداً (cuda_v11,rocm، بلcpu) ويعتمّ على الكشف الآلي بصمت. إنه مفتاح تصحّح يبقى في ملفات الـprofile والخدمة طويلاً بعد نسيان السبب. ابحث عنه:systemctl show ollama --property=Environment | grep -i llm_libraryوenv | grep OLLAMA— ثم أزِله. - الـdriver تخلّف عن الـruntime. تحديثات Ollama ترفق إصداراً أحدث من الـCUDA؛ الـdriver لن يتحرك إن لم تحرّكه أنت. الإصلاح نفسه في فصل الـdriver.
- الخدمة حاوية، والأعلام ذهبت. حاوية Docker أُعيد إنشاؤها دون أعلام GPU هي حاوية CPU فقط — أعد إنشائها مع
--gpus=all(أو أعلام أجهزة AMD).
نهاية الأسباب الخمسة · لم يُجلب أي شيء · كل شيء محلي