สำหรับผู้ที่ใช้งาน 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
สาเหตุส่วนใหญ่เกิดจาก
- เคยเผลอรันคำสั่งด้วยสิทธิ์
sudoทำให้ไฟล์บางไฟล์กลายเป็นของroot - การทำ 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 จะทำงานต่อเนื่องจนเสร็จสิ้นโดยไม่สะดุด
อ่านเพิ่มเติม