ปี: 2006

วิธีอัปเดตโมเดล Ollama ทั้งหมดในคำสั่งเดียว (Ollama Update All Models) พร้อมวิธีแก้ปัญหา Permission Deniedวิธีอัปเดตโมเดล Ollama ทั้งหมดในคำสั่งเดียว (Ollama Update All Models) พร้อมวิธีแก้ปัญหา Permission Denied

สำหรับผู้ที่ใช้งาน Ollama รัน Large Language Model (LLM) ในเครื่อง ไม่ว่าจะเป็น Llama, Qwen หรือ Gemma คงจะคุ้นเคยกับคำสั่ง
ollama pull <model>
ดีเวลาที่ต้องการดาวน์โหลดหรืออัปเดตโมเดลเวอร์ชันใหม่ แต่ปัญหาคือ Ollama ไม่มีคำสั่งอัปเดตโมเดลทั้งหมดในคราวเดียว เช่น
ollama update all

หากติดตั้งโมเดลไว้หลายตัว การไล่พิมพ์
ollama pull
ทีละตัวคงเสียเวลา บทความนี้จะพาเขียนสคริปต์สั้น ๆ บรรทัดเดียว เพื่อสั่งอัปเดตโมเดลทุกตัวอัตโนมัติ พร้อมวิธีแก้ปัญหาคลาสสิกอย่าง permission denied กรณีที่มีการย้าย Path จัดเก็บโมเดล


คำสั่ง One-liner อัปเดตทุกโมเดล

หลักการทำงานคือการดึงรายชื่อโมเดลทั้งหมดจาก
ollama list
ตัดส่วนหัวตารางออก แล้วส่งต่อ (pipe) ให้คำสั่ง
ollama pull
ทำงานทีละโมเดล


สำหรับ macOS และ Linux (Bash / Zsh)

รันคำสั่งนี้บน Terminal

ollama list | tail -n +2 | awk '{print $1}' | xargs -I {} ollama pull {}

หรือถ้าต้องการเห็น log ชัดเจนทีละบรรทัด สามารถใช้ลูป while แทนได้

ollama list | tail -n +2 | while read -r name rest; do
    echo "=== Updating $name ==="
    ollama pull "$name"
done

สำหรับ Windows (PowerShell)

ollama list | Select-Object -Skip 1 | ForEach-Object {
    $model = ($_ -split '\s+')[0]
    if ($model) {
        Write-Host "Updating $model..." -ForegroundColor Cyan
        ollama pull $model
    }
}

สร้าง Custom Command ให้ใช้งานได้ตลอด (macOS / Linux)

หากไม่อยากพิมพ์คำสั่งยาวๆ ทุกครั้ง แนะนำให้สร้างฟังก์ชันเก็บไว้ใน shell config เช่น ~/.zshrc หรือ ~/.bashrc

# เปิดไฟล์ config (ตัวอย่างใช้ zsh)
nano ~/.zshrc

เพิ่มโค้ดด้านล่างไว้ท้ายไฟล์

ollama-update-all() {
    ollama list | tail -n +2 | awk '{print $1}' | while read -r model; do
        echo "Updating $model..."
        ollama pull "$model"
    done
}

บันทึกไฟล์แล้วโหลดคอนฟิกใหม่ด้วยคำสั่ง

source ~/.zshrc

หลังจากนี้เมื่อต้องการอัปเดตโมเดลทั้งหมด แค่พิมพ์

ollama-update-all

ปัญหาที่พบบ่อย: Error Permission Denied

บ่อยครั้งเวลาสั่ง ollama pull อาจเจอข้อผิดพลาดในลักษณะนี้

Error: open /Users/<username>/.ollama/models/manifests/...: permission denied

สาเหตุส่วนใหญ่เกิดจาก

  1. เคยเผลอรันคำสั่งด้วยสิทธิ์ sudo ทำให้ไฟล์บางไฟล์กลายเป็นของ root
  2. การทำ Symlink ย้ายตำแหน่งโฟลเดอร์โมเดล ไปไว้ที่ไดรฟ์อื่นหรือโฟลเดอร์แชร์ส่วนกลาง (เช่น /Users/common/...) แล้วโฟลเดอร์ปลายทางไม่ได้ให้สิทธิ์ User ปัจจุบันเขียนทับ

วิธีตรวจสอบและแก้ไข

1. เช็กก่อนว่าโฟลเดอร์เป็น Symlink หรือไม่

ls -ld ~/.ollama/models

หากผลลัพธ์แสดงเป็นลูกศรชี้ไปที่อื่น เช่น

lrwxr-xr-x  1 user  staff  27  /Users/phunsanit/.ollama/models -> /Users/common/Ollama/models

แสดงว่าสิทธิ์การเขียนที่แท้จริงต้องไปแก้ที่ ปลายทาง (/Users/common/Ollama/models)

2. เปลี่ยน Ownership ให้เป็น User ของเรา

  • หากปลายทางคือโฟลเดอร์ปกติในโฮม (~/.ollama)
    sudo chown -R $(whoami):staff ~/.ollama chmod -R u+rw ~/.ollama
  • หากเป็นโฟลเดอร์แชร์ส่วนกลางที่ทำ Symlink ไว้
    sudo chown -R $(whoami):staff /Users/common/Ollama/models sudo chmod -R u+rwX /Users/common/Ollama/models

(หมายเหตุ: กรณีเครื่องมีหลาย User ที่ต้องการใช้โมเดลร่วมกันในโฟลเดอร์ส่วนกลาง ควรตั้งสิทธิ์ group ให้เขียนได้ด้วย เช่น
sudo chmod -R 775 /Users/common/Ollama/models
)


การสร้าง Script สั้น ๆ ช่วยลดเวลาในการคอยดูแลโมเดล local LLM ให้อัปเดตเป็น build ล่าสุดอยู่เสมอ และหากจัดการ Permission ของโฟลเดอร์ manifest ไว้อย่างถูกต้อง กระบวนการ pull จะทำงานต่อเนื่องจนเสร็จสิ้นโดยไม่สะดุด



อ่านเพิ่มเติม