Skip to content

บางครั้ง Ollama อาจไม่ทำงานตามที่คาดไว้ หนึ่งในวิธีที่ดีที่สุดเพื่อทราบสาเหตุที่เกิดขึ้นคือการตรวจสอบบันทึกระบบ (logs) ค้นหาบันทึกระบบบน Mac โดยการรันคำสั่ง:

shell
cat ~/.ollama/logs/server.log

บนระบบ Linux ที่ใช้ systemd สามารถค้นหาบันทึกระบบด้วยคำสั่งนี้:

shell
journalctl -u ollama --no-pager --follow --pager-end

เมื่อคุณรัน Ollama ใน container บันทึกระบบจะถูกส่งไปยัง stdout/stderr ใน container:

shell
docker logs <container-name>

(ใช้คำสั่ง docker ps เพื่อค้นหาชื่อ container)

หากคุณรัน ollama serve ด้วยตนเองใน terminal บันทึกระบบจะแสดงใน terminal นั้นเอง

เมื่อคุณรัน Ollama บน Windows มีตำแหน่งเก็บบันทึกหลายแห่ง คุณสามารถดูได้ในหน้าต่าง explorer โดยกด <cmd>+R แล้วพิมพ์คำสั่งต่อไปนี้:

  • explorer %LOCALAPPDATA%\Ollama เพื่อดูบันทึกระบบ บันทึกเซิร์ฟเวอร์ล่าสุดจะอยู่ใน server.log และบันทึกที่เก่ากว่านี้จะอยู่ใน server-#.log
  • explorer %LOCALAPPDATA%\Programs\Ollama เพื่อเรียกดูไฟล์ไบนารี (ตัวติดตั้งจะเพิ่มเส้นทางนี้ไปยัง PATH ของผู้ใช้)
  • explorer %HOMEPATH%\.ollama เพื่อเรียกดูตำแหน่งที่เก็บโมเดลและการตั้งค่า
  • explorer %TEMP% ซึ่งเป็นตำแหน่งที่เก็บไฟล์เรียกใช้ชั่วคราวในหนึ่งหรือหลายไดเรกทอรี ollama*

เพื่อเปิดใช้งานบันทึกดีบักเพิ่มเติมเพื่อช่วยแก้ไขปัญหา ก่อนอื่น ออกจากแอปที่กำลังรันจากเมนู tray แล้วใน terminal powershell

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

เข้าร่วม Discord เพื่อขอความช่วยเหลือในการอ่านบันทึกระบบ

ไลบรารี LLM

Ollama มีไลบรารี LLM หลายตัวที่ถูกคอมไพล์สำหรับ GPU ต่างๆ และฟีเจอร์เวกเตอร์ CPU ต่างกัน Ollama จะพยายามเลือกไลบรารีที่ดีที่สุดตามความสามารถของระบบของคุณ หากการตรวจจับอัตโนมัตินี้มีปัญหา หรือคุณพบปัญหาอื่นๆ (เช่น การค้างของ GPU) คุณสามารถแก้ไขปัญหานี้ได้โดยบังคับใช้ไลบรารี LLM เฉพาะ cpu_avx2 จะให้ประสิทธิภาพดีที่สุด ตามด้วย cpu_avx และช้าที่สุดแต่เข้ากันได้กับระบบมากที่สุดคือ cpu การจำลอง Rosetta บน MacOS จะทำงานกับไลบรารี cpu

ในบันทึกเซิร์ฟเวอร์ คุณจะเห็นข้อความที่คล้ายกับนี้ (แตกต่างกันไปตามเวอร์ชันที่ปล่อย):

Dynamic LLM libraries [rocm_v6 cpu cpu_avx cpu_avx2 cuda_v11 rocm_v5]

การแทนที่ไลบรารี LLM ทดลองใช้

คุณสามารถตั้งค่า OLLAMA_LLM_LIBRARY เป็นไลบรารี LLM ใดๆ ที่มีให้ใช้เพื่อข้ามการตรวจจับอัตโนมัติ เช่น หากคุณมีการ์ด CUDA แต่ต้องการบังคับใช้ไลบรารี LLM CPU ที่รองรับเวกเตอร์ AVX2 ให้ใช้คำสั่ง:

shell
OLLAMA_LLM_LIBRARY="cpu_avx2" ollama serve

คุณสามารถตรวจสอบฟีเจอร์ที่มีใน CPU ของคุณด้วยคำสั่งต่อไปนี้:

shell
cat /proc/cpuinfo| grep flags | head -1

การติดตั้งเวอร์ชันเก่าหรือเวอร์ชันพรีรีลีสบน Linux

หากคุณพบปัญหาบน Linux และต้องการติดตั้งเวอร์ชันเก่า หรือต้องการลองใช้เวอร์ชันพรีรีลีสก่อนที่มันจะถูกปล่อยอย่างเป็นทางการ คุณสามารถบอกสคริปต์ติดตั้งว่าต้องการติดตั้งเวอร์ชันใด

shell
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh

ตัวแปร noexec ของ tmp บน Linux

หากระบบของคุณถูกตั้งค่าด้วยฟлаг "noexec" ที่ Ollama เก็บไฟล์เรียกใช้ชั่วคราว คุณสามารถระบุตำแหน่งอื่นได้โดยตั้งค่า OLLAMA_TMPDIR เป็นตำแหน่งที่ผู้ใช้ที่รัน ollama สามารถเขียนข้อมูลได้ เช่น OLLAMA_TMPDIR=/usr/share/ollama/

Docker บน Linux

หาก Ollama ทำงานบน GPU ใน container docker ตั้งแต่แรก แต่เปลี่ยนไปรันบน CPU หลังจากผ่านช่วงเวลาหนึ่งพร้อมกับข้อผิดพลาดในบันทึกเซิร์ฟเวอร์ที่รายงานการค้นหา GPU ล้มเหลว ปัญหานี้สามารถแก้ไขได้โดยปิดการจัดการ cgroup ของ systemd ใน Docker แก้ไขไฟล์ /etc/docker/daemon.json บนโฮสต์และเพิ่ม "exec-opts": ["native.cgroupdriver=cgroupfs"] ไปยังการตั้งค่า docker

การค้นหา GPU NVIDIA

เมื่อ Ollama เริ่มทำงาน มันจะตรวจสอบ GPU ที่มีอยู่ในระบบเพื่อระบุความเข้ากันได้และปริมาณ VRAM ที่มีอยู่ บางครั้งการค้นหานี้อาจล้มเหลวในการพบ GPU ของคุณ โดยทั่วไปการรันไดรฟเวอร์ล่าสุดจะให้ผลลัพธ์ที่ดีที่สุด

การแก้ไขปัญหา NVIDIA บน Linux

หากคุณใช้ container เพื่อรัน Ollama ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า container runtime ไว้ล่วงหน้าตามที่ระบุใน docker

บางครั้ง Ollama อาจมีปัญหาในการเริ่มต้น GPU เมื่อคุณตรวจสอบบันทึกเซิร์ฟเวอร์ ปัญหานี้อาจแสดงเป็นรหัสข้อผิดพลาดต่างๆ เช่น "3" (ยังไม่เริ่มต้น), "46" (อุปกรณ์ไม่พร้อมใช้งาน), "100" (ไม่มีอุปกรณ์), "999" (ไม่ทราบสาเหตุ) หรืออื่นๆ วิธีแก้ไขปัญหาต่อไปนี้อาจช่วยให้คุณแก้ไขปัญหาได้

  • หากคุณใช้ container container runtime ทำงานอยู่หรือไม่? ลองรัน docker run --gpus all ubuntu nvidia-smi - หากคำสั่งนี้ไม่ทำงาน Ollama จะไม่สามารถเห็น GPU NVIDIA ของคุณได้
  • ไดรฟเวอร์ uvm ถูกโหลดอยู่หรือไม่? sudo nvidia-modprobe -u
  • ลองโหลดไดรฟเวอร์ nvidia_uvm ใหม่ - รัน sudo rmmod nvidia_uvm ตามด้วย sudo modprobe nvidia_uvm
  • ลองรีบูตระบบ
  • ตรวจสอบให้แน่ใจว่าคุณกำลังใช้ไดรฟเวอร์ nvidia รุ่นล่าสุด

หากวิธีใดๆ ด้านบนไม่สามารถแก้ไขปัญหาได้ ให้รวบรวมข้อมูลเพิ่มเติมและแจ้งปัญหา:

  • ตั้งค่า CUDA_ERROR_LEVEL=50 แล้วลองอีกครั้งเพื่อรับบันทึกวินิจฉัยเพิ่มเติม
  • ตรวจสอบ dmesg เพื่อหาข้อผิดพลาดใดๆ รัน sudo dmesg | grep -i nvrm และ sudo dmesg | grep -i nvidia

การค้นหา GPU AMD

บน Linux การเข้าถึง GPU AMD โดยปกติต้องการการเป็นสมาชิกของกลุ่ม video และ/หรือ render เพื่อเข้าถึงอุปกรณ์ /dev/kfd หากการตั้งค่าสิทธิ์ไม่ถูกต้อง Ollama จะตรวจพบปัญหานี้และรายงานข้อผิดพลาดในบันทึกเซิร์ฟเวอร์

เมื่อรันใน container บนบางการกระจาย Linux และ container runtime โปรเซส ollama อาจไม่สามารถเข้าถึง GPU ได้ ใช้คำสั่ง ls -lnd /dev/kfd /dev/dri /dev/dri/* บนระบบโฮสต์เพื่อระบุ ID กลุ่มที่เป็น ตัวเลข ของระบบของคุณ และส่งอาร์กิวเมนต์ --group-add ... เพิ่มเติมไปยัง container เพื่อให้สามารถเข้าถึงอุปกรณ์ที่ต้องการ เช่น ในเอาต์พุตต่อไปนี้ crw-rw---- 1 0 44 226, 0 Sep 16 16:55 /dev/dri/card0 คอลัมน์ group ID คือ 44

หากคุณพบปัญหาในการให้ Ollama ค้นหา GPU ได้อย่างถูกต้องหรือใช้ GPU สำหรับการอนุมาน วิธีต่อไปนี้อาจช่วยระบุสาเหตุของปัญหาได้

  • AMD_LOG_LEVEL=3 เปิดใช้งานระดับบันทึกข้อมูลในไลบรารี AMD HIP/ROCm สิ่งนี้ช่วยแสดงรหัสข้อผิดพลาดที่ละเอียดขึ้นเพื่อช่วยแก้ไขปัญหา
  • OLLAMA_DEBUG=1 ขณะค้นหา GPU ข้อมูลเพิ่มเติมจะถูกรายงาน
  • ตรวจสอบ dmesg เพื่อหาข้อผิดพลาดใดๆ จากไดรฟเวอร์ amdgpu หรือ kfd รัน sudo dmesg | grep -i amdgpu และ sudo dmesg | grep -i kfd

ความไม่ตรงกันของเวอร์ชันไดรฟเวอร์ AMD

หาก GPU AMD ของคุณไม่ถูกตรวจพบบน Linux และบันทึกเซิร์ฟเวอร์มีข้อความคล้ายกับนี้:

msg="failure during GPU discovery" ... error="failed to finish discovery before timeout"
msg="bootstrap discovery took" duration=30s ...

สิ่งนี้โดยปกติหมายความว่าไดรฟเวอร์ GPU AMD ของระบบเก่ามากเกินไป Ollama รวมไลบรารี ROCm 7 สำหรับ Linux ซึ่งต้องการไดรฟเวอร์เคอร์เนล ROCm 7 ที่เข้ากันได้ หากระบบกำลังรันไดรฟเวอร์รุ่นเก่า (ROCm 6.x หรือรุ่นก่อนหน้า) การเริ่มต้น GPU จะค้างระหว่างการค้นหาอุปกรณ์และหมดเวลาต่อมา ทำให้ Ollama กลับไปใช้ CPU

เพื่อแก้ไขปัญหานี้ อัปเกรดเป็นไดรฟเวอร์ ROCm v7 โดยใช้เครื่องมือ amdgpu-install จาก เอกสาร ROCm ของ AMD หลังจากอัปเกรดแล้ว รีบูตระบบและเริ่มรัน Ollama ใหม่

GPU AMD หลายตัว

หากคุณได้รับข้อความตอบกลับที่อ่านไม่รู้เรื่องเมื่อโหลดโมเดลข้าม GPU AMD หลายตัวบน Linux ดูคำแนะนำต่อไปนี้

ข้อผิดพลาดของ Terminal บน Windows

เวอร์ชันเก่าของ Windows 10 (เช่น 21H1) มีบั๊กที่ทราบกันอยู่ซึ่งโปรแกรม terminal มาตรฐานไม่แสดงอักขระควบคุมอย่างถูกต้อง สิ่งนี้อาจทำให้เกิดสตริงอักขระยาวๆ เช่น ←[?25h←[?25l แสดงขึ้น บางครั้งเกิดข้อผิดพลาดว่า The parameter is incorrect เพื่อแก้ไขปัญหานี้ กรุณาอัปเดตเป็น Win 10 22H1 หรือรุ่นใหม่กว่า