العودة إلى المدونة

Ollama لا يستخدم الـ GPU؟ الإصلاح على لينكس وويندوز وWSL

16 سبتمبر 2026

الخلاصة السريعة

شغّل ollama ps أثناء تحميل نموذج: عمود PROCESSOR يقول الحقيقة. 100% GPU يعني أن الـ GPU سليم ويمكنك التوقف عن القراءة. نسبة مثل 40%/60% CPU/GPU تعني أن النموذج لم يتسع في VRAM — استخدم ضغطًا أصغر. 100% CPU تعني أن Ollama لم تجد GPU صالحًا: غالبًا تعريف قديم، أو عدم عضوية في مجموعة (AMD على لينكس)، أو OLLAMA_LLM_LIBRARY مثبتة، أو حاوية أُطلقت بلا وصول إلى GPU. أصلح السبب الذي يسمّيه السجل؛ لا تتجاوز خمسة أسباب.

كيف أتحقق أن Ollama تستخدم الـ GPU فعلًا؟

أمران، بلا تخمين.

# في طرفية: حمّل نموذجًا
ollama run llama3.2 "hello"

# في طرفية أخرى: شاهد أين يعمل
ollama ps
NAME            ID          SIZE     PROCESSOR        UNTIL
llama3.2:latest a80c4de17cd9 3.3 GB   100% GPU         4 minutes from now

لعمود PROCESSOR ثلاث حالات:

  • 100% GPU — كل الطبقات حُوّلت. انتهى الأمر.
  • 48%/52% CPU/GPU — تحويل جزئي. الـ GPU يعمل، لكن النموذج مع السياق لم يتسعا في VRAM. انظر قسم VRAM أدناه.
  • 100% CPU — الاستدلال على المعالج. إما أن الـ GPU لم يُكتشف أو عُطّل عمدًا.

ثم اقرأ سجل الخادم الذي يسمّي العتاد الذي وجدته 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

لا سطر إطلاقًا، أو سطر ينتهي برسالة سقوط إلى المعالج فقط، وقد وجدت مشكلتك. بقية المقال هي الأسباب الخمسة، الأرجح أولًا.

لماذا تقول Ollama “no compatible GPU discovered”؟

على NVIDIA، الفاعل المعتاد هو التعريف لا CUDA. تشحن Ollama مكتباتها الخاصة بـ runtime CUDA، فلا تحتاج إلى تثبيت CUDA toolkit — لكن runtime المرفق يحتاج تعريفًا جديدًا بما يكفي ليتكلم معه. عمل nvidia-smi ليس برهانًا؛ يثبت وجود تعريف لا حداثته.

nvidia-smi --query-gpu=driver_version --format=csv,noheader

إذا كان الإصدار عمره سنوات، فحدّثه وأعد التشغيل:

# عائلة Debian/Ubuntu
sudo apt install nvidia-driver-570
# عائلة Arch
sudo pacman -S nvidia

بعد تحديث التعريف، أعد تشغيل خدمة Ollama ليعيد اكتشاف الأجهزة — الاكتشاف يحدث مرة عند الإقلاع لا مع كل طلب:

sudo systemctl restart ollama

إذا طبع السجل الآن GPU لديك مع library=CUDA فقد انتهيت. وإن استمرف رفضًا، فتحقق أن OLLAMA_LLM_LIBRARY غير مضبوطة في أي مكان — انظر قسم “بعد التحديث”.

لماذا تستخدم Ollama الـ GPU لجزء من النموذج فقط؟

التحويل الجزئي حساب لا خلل: أوزان النموذج مع KV cache لنافذة سياقك يجب أن تتسع في VRAM. نموذج 7B بضغط Q4 نحو 4–5 جيجابايت؛ وأعطه سياق 8K فيضاف للذاكرة. على بطاقة 8 جيجابايت يبقى شيء على المعالج حتمًا، وollama ps تعرض النسبة.

ثلاث طرق لإغلاق الفجوة، الأرخص أولًا:

  1. ضغط أصغر. الهبوط من Q8 إلى Q4 يقلص نصف حجم الأوزان بثمن متواضع من الجودة. والمقايضات مشروحة في شرح مستويات ضغط GGUF.
  2. سياق أقصر. num_ctx يحكم حجم الكاش. سياق 32K على بطاقة 8 جيجابايت يعني معظم الطبقات على المعالج.
  3. طبقات GPU أقل. خيار num_gpu يحدد عدد الطبقات المحوّلة. وضبطه دون عدد الطبقات الكلي يضمن الانقسام — إن ضبطه أحد في Modelfile أو استدعاء API فأزله.

ولاحظ الفخ المعاكس أيضًا: GPU يعرض 100% GPU لكنه يعمل أبطأ من المتوقع قد يتبادل عبر ذاكرة النظام. قارن عمود SIZE في ollama ps بـ VRAM الفعلية لديك.

لماذا لا تستخدم Ollama الـ GPU من AMD؟

AMD على لينكس يحتاج ثلاثة أشياء، وكلها قابلة للفحص:

1. دعم ROCm في البنية. سكربت التثبيت الرسمي على لينكس يرفق بنية ROCm. أكد ما اكتشفه الخادم:

journalctl -u ollama --no-pager | grep -iE "rocm|inference compute"

2. عضوية المجموعة. يحتاج runtime ROCm الوصول إلى /dev/kfd و/dev/dri، أي عضوية المجموعتين render وvideo:

sudo usermod -aG render,video $USER
# سجّل الخروج وعُد، ثم:
sudo systemctl restart ollama

المجموعة المفقودة وحدها هي أشهر مقالة “Ollama not using GPU on Ubuntu” على كل منتدى، وتنجو من إعادة تثبيت التعريف لأن التعريف لم يكن المشكلة أصلًا.

3. GPU مدعوم — أو تجاوز. بطاقات RDNA2 الاستهلاكية غير المدعومة (gfx1031, gfx1032) ترفض الاكتشاف حتى مع منصة ROCm عاملة. والحل القياسي ادعاء هدف متوافق:

sudo systemctl edit ollama
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"

ثم sudo systemctl restart ollama. هذا تجاوز غير مدعوم لكنه واسع الاستخدام؛ وإن أساء التصرف فأزله وتعود إلى أرض الدعم الرسمي. وإن كنت تفضل سلطة كاملة على الخلفيات بدل مصارعة الاكتشاف التلقائي، فذلك الفرق الجوهري المشروح في llama.cpp مقابل Ollama.

وعلى ويندوز، دعم AMD أضيق — افحص قائمة GPUs المدعومة لدى Ollama لبطاقتك قبل أن تحكم على التثبيت بأنه معطوب.

لماذا توقفت Ollama عن استخدام الـ GPU بعد تحديث؟

تغيّر التحديثات أحد ثلاثة أشياء، بهذا الترتيب من الاحتمال:

  1. خلفية مثبتة. OLLAMA_LLM_LIBRARY تفرض runner معينًا (cuda_v11 أو rocm أو حتى cpu). وُلدت للتصحيح، تتخطى الاكتشاف التلقائي بصمت، وتتعمر في ملفات shell وخدمات طويلًا بعد نسيان السبب. اعثر عليها وأزلها:
systemctl show ollama --property=Environment | grep -i llm_library
env | grep OLLAMA
  1. تخلف التعريف عن الـ runtime. ترقيات Ollama ترفق runtime CUDA أحدث؛ وتعريفك لا يتحرك حتى تحركه أنت. الإصلاح نفسه في قسم التعريف أعلاه.
  2. الخدمة حاوية والأعلام ضاعت. حاوية أُعيد إنشاؤها بلا أعلام GPU هي حاوية معالج فقط. استدعاء NVIDIA هو:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 ollama/ollama

وللحاويات AMD، المقابل تمرير الأجهزة مع إضافة المجموعات:

docker run -d --device=/dev/kfd --device=/dev/dri 
  --group-add video --group-add render 
  -v ollama:/root/.ollama -p 11434:11434 ollama/ollama

بلا --gpus=all بلا GPU — لا سبب عند Docker لأن يكون كريمًا.

هل تعمل Ollama في WSL2؟

نعم، بالتعريف الصحيح في المكان الصحيح: ثبّت تعريف NVIDIA لـ ويندوز، لا تعريف لينكس داخل التوزيعة أبدًا — التعريف داخل WSL يكسر CUDA passthrough ولا يصلحه. ثم حدّث WSL نفسه وأكد أن جهاز الـ passthrough موجود:

wsl --update   # من PowerShell
ls /dev/dxg    # داخل WSL — يجب أن يوجد لاستخدام الـ GPU

بوجود /dev/dxg وتعريف ويندوز حديث، تحوّل Ollama في WSL2 إلى الـ GPU مثل تثبيت أصلي. وإن كنت تفضّل إسقاط الوساطة كلها، فبنية Ollama لويندوز تعمل أصلًا وترى الـ GPU بلا WSL.

هل تحتاج Ollama إلى GPU أصلًا؟

لا — الجولة على المعالج وحده متطابقة وظيفيًا، أبطأ فقط، ومع النماذج الصغيرة على معالج سريع قد تكون صالحة تمامًا للاستخدام. وعلى Apple Silicon يتلاشى السؤال: Metal يستخدم الذاكرة الموحدة تلقائيًا، والحد الوحيد هو كم من RAM مستعد لمشاركته مع النموذج.

قائمة الفحص في خمس دقائق

العرَضالسبب المرجحالإصلاح
100% CPU في ollama ps مع وجود بطاقة NVIDIAتعريف أقدم من CUDA المرفقحدّث التعريف، أعد التشغيل، أعد تشغيل الخدمة
100% CPU، AMD على لينكسغياب مجموعة render/videousermod -aG render,video ثم تسجيل دخول جديد
100% CPU، بطاقة AMD غير مدعومةROCm يرفض هدف gfxHSA_OVERRIDE_GFX_VERSION=10.3.0
نسبة 40%/60% CPU/GPUالنموذج + السياق يتجاوزان VRAMضغط أصغر أو num_ctx أقصر
الـ GPU عمل أمس والمعالج اليومOLLAMA_LLM_LIBRARY مثبتة أو تعريف قديماعثر على المتغير وأزله؛ حدّث التعريف
GPU في التشغيل الأصلي وCPU في Dockerالحاوية أُطلقت بلا أعلام GPUأعد إنشائها بـ --gpus=all (أو أجهزة AMD)

افحص بهذا الترتيب: ollama ps للحالة، سجلات الخادم لقائمة الاكتشاف، ثم الجدول. في تسع من عشر حالات، سطر السجل كان قد أخبرك بالصف الذي تنتمي إليه.

— mrsaynothing

— mrsaynothing

ملاحظات ميدانية في الذكاء الاصطناعي وLinux والاستضافة الذاتية.

ناقش هذا المقال على dev.to dev.to ↗

احصل على الشرح التطبيقي التالي بالبريد

رسالة واحدة لكل مقال. أصلح المشكلة وامضِ.

self-hosted · بلا أطراف ثالثة · إلغاء الاشتراك بنقرة واحدة

ما هذا؟

git revert مقابل git reset: أيهما ينقذ تاريخك؟

أعجبتك هذه الكتابات؟ بناء مثل هذا هو عملي. وظّفني