5 Docker Containers เปลี่ยนคอมพิวเตอร์ให้เป็น Home AI Lab

สัปดาห์แรกของการลองเล่น AI ในเครื่องอาจผ่านไปด้วยดีจากการรันโมเดลและแชทตอบโต้ แต่พอเข้าสู่สัปดาห์ที่สาม Home AI Labs หลายแห่งมักล้มเหลว เพราะปัญหาการจัดการคอนเทนเนอร์ที่วุ่นวาย โฟลเดอร์เอกสารไม่ได้ทำดัชนี (index) หรือการอัปเดตที่ทำให้โมเดลหายไปเนื่องจากเก็บไว้ผิดที่ ความล้มเหลวเหล่านี้ไม่ใช่ความผิดของ AI แต่คือปัญหาด้านการจัดการแล็บ
Home Lab ที่ดีควรประกอบด้วยชุดคอนเทนเนอร์ขนาดเล็กที่มีหน้าที่ชัดเจน แทนที่จะเป็นระบบใหญ่เพียงตัวเดียว แนวคิดแบบแบ่งเลเยอร์ตามบทความ local AI stack ของ KDnuggets แนะนำให้แยกส่วนการทำงานของโมเดล (Model serving), อินเทอร์เฟซ, หน่วยความจำ, ระบบอัตโนมัติ และการจัดการออกจากกัน เพื่อให้คุณสามารถปรับเปลี่ยนแต่ละเลเยอร์ได้โดยไม่กระทบส่วนอื่น
| Container | หน้าที่ใน stack | ข้อควรระวังแรก |
|---|---|---|
| Ollama | Serve: รัน local models, เปิดพอร์ต 11434 | Models ที่เก็บในคอนเทนเนอร์จะหายไปเมื่อสร้างใหม่; ให้ใช้ named volume |
| Open WebUI | Talk: แชทผ่านเบราว์เซอร์, ผู้ใช้, ไฟล์, ลิงก์ผู้ให้บริการ | การสร้าง WEBUI_SECRET_KEY ใหม่จะทำให้ทุกคนถูกล็อกเอาต์; ตั้งค่าไว้ครั้งเดียว |
| Qdrant | Remember: ค้นหาแบบ vector บนเอกสารของคุณเอง | ไม่จำเป็นสำหรับการแชททั่วไป; เพิ่มเข้ามาเมื่อต้องการทำ retrieval |
| n8n | Automate: การนำเข้าข้อมูลตามกำหนดการ, webhooks, งานเชื่อมต่อต่างๆ | เก็บข้อมูลยืนยันตัวตน; ให้สำรองข้อมูล volume และเก็บพอร์ตไว้เป็นส่วนตัว |
| Portainer CE | Manage: การรีสตาร์ท, logs, volumes, อัปเดต, ล้างข้อมูล | การเข้าถึง Docker socket สามารถควบคุมโฮสต์ได้; ใช้ในเครือข่ายที่เชื่อถือได้เท่านั้น |
ตารางที่ 1. คอนเทนเนอร์ทั้ง 5 ตัว หน้าที่ และจุดที่มักเกิดข้อผิดพลาด แหล่งที่มา: Ollama Docker Hub, Open WebUI quick start, Qdrant quick start, n8n Docker Compose docs, Portainer CE install docs.
1. Ollama: ตัวรัน Model (The Model Runtime)
Ollama เปรียบเสมือนห้องเครื่องที่ทำหน้าที่ดึงและรัน local models ผ่าน HTTP endpoint บนพอร์ต 11434 คอนเทนเนอร์อื่นในแล็บจะสื่อสารผ่านพอร์ตนี้ ทำให้ส่วนประกอบอื่นไม่จำเป็นต้องรู้วิธีการโหลดโมเดล โดย Docker Hub image อย่างเป็นทางการรองรับทั้ง CPU และ GPU (ผ่าน NVIDIA Container Toolkit หรือ ROCm สำหรับ AMD)
รายละเอียดการติดตั้งที่สำคัญที่สุดคือการตั้งค่า volume เนื่องจากโมเดลมีขนาดใหญ่ หากไม่ใช้ named volume คุณจะต้องดาวน์โหลดโมเดลใหม่ทุกครั้งที่สร้างคอนเทนเนอร์ คำสั่งรันที่แนะนำคือ:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollamaสำหรับสาย CPU ให้ตัด --gpus=all ออก ทั้งนี้การทำ GPU pass-through ขึ้นอยู่กับระบบปฏิบัติการโฮสต์ โดย Windows (ผ่าน WSL2) และ Linux รองรับฟีเจอร์นี้ ส่วน Docker Desktop บน macOS จะต้องรัน Ollama แบบ native เพื่อให้ได้ความเร็วสูงสุด
2. Open WebUI: เลเยอร์อินเทอร์เฟซ
การใช้งานผ่านเทอร์มินัลอาจเหมาะสำหรับการทดสอบ แต่ Open WebUI จะช่วยให้คุณใช้งานได้จริงผ่านเบราว์เซอร์ รองรับทั้งการแชท อัปโหลดไฟล์ และจัดการผู้ใช้ โดย Docker เป็นวิธีติดตั้งที่แนะนำ ด้วยคำสั่งเดียว:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data -e WEBUI_SECRET_KEY=your-secret-key --name open-webui --restart always ghcr.io/open-webui/open-webui:mainสิ่งสำคัญคือการตั้งค่า volume ที่ /app/backend/data เพื่อเก็บข้อมูลแชทและไฟล์ และการตั้งค่า WEBUI_SECRET_KEY เพียงครั้งเดียวเพื่อป้องกันไม่ให้ผู้ใช้ถูกล็อกเอาต์เมื่อมีการสร้างคอนเทนเนอร์ใหม่ แนะนำให้แยกคอนเทนเนอร์ Ollama ไว้ต่างหากเพื่อให้ง่ายต่อการอัปเกรดในอนาคต
3. Qdrant: หน่วยความจำสำหรับค้นหาข้อมูลของแล็บ
หากคุณต้องการให้ AI ตอบคำถามจากเอกสารหรือไฟล์โปรเจกต์ของตัวเอง คุณจำเป็นต้องมี Vector Database อย่าง Qdrant เพื่อทำหน้าที่เป็นหน่วยความจำในการค้นหาข้อมูล (retrieval memory) ซึ่งแยกออกจากตัวประมวลผล AI
การรัน local quick start ของ Qdrant จะใช้พอร์ต 6333 และ 6334 โดยควรทำการ mount storage เพื่อให้ข้อมูลอยู่รอดจากการรีสตาร์ท เลเยอร์การค้นหาข้อมูลนี้จะเปลี่ยนแล็บของคุณจากแค่เดโมให้กลายเป็นระบบที่ใช้งานได้จริงตามแนวทาง self-hosted LLMs in the real world
4. n8n: กระดูกสันหลังของระบบอัตโนมัติ
n8n คือเครื่องมือ Workflow ที่ช่วยเชื่อมต่อทุกอย่างเข้าด้วยกันแบบ Visual การติดตั้งด้วย Docker Compose เป็นวิธีที่เหมาะสมที่สุด ตัวอย่างงานที่ n8n ทำได้ เช่น:
- การนำเข้าข้อมูลรายคืน: สแกนโฟลเดอร์ แบ่งไฟล์เป็นส่วนๆ และบันทึกลง Qdrant อัตโนมัติ
- สรุปข้อมูลตามสั่ง: รับ URL หรือ PDF เพื่อส่งให้ Ollama สรุปผลแล้วบันทึกลงไฟล์
- การทบทวนรายสัปดาห์: ให้โมเดลอ่านบันทึกการทำงานเพื่อสรุปงานที่ยังค้างอยู่
ข้อควรระวังคือ n8n เก็บข้อมูลยืนยันตัวตนที่สำคัญ จึงต้องสำรองข้อมูล volume เสมอและไม่ควรเปิดพอร์ต 5678 สู่สาธารณะ
5. Portainer CE: แผงควบคุมการจัดการ
เมื่อมีคอนเทนเนอร์มากขึ้น Portainer CE จะเป็นเครื่องมือที่ช่วยให้คุณดู logs, รีสตาร์ทเซอร์วิส และตรวจสอบการอัปเดตผ่านเบราว์เซอร์ได้อย่างง่ายดาย การติดตั้งอย่างเป็นทางการ จะรันบนพอร์ต 9443 และมีการ mount Docker socket ที่ /var/run/docker.sock
การเข้าถึง Docker socket ทำให้ Portainer มีอำนาจควบคุมทุกอย่างบนโฮสต์ จึงควรใช้งานเฉพาะในเครือข่ายที่เชื่อถือได้เท่านั้น แม้จะไม่จำเป็นในวันแรก แต่ Portainer จะกลายเป็นสิ่งสำคัญเมื่อระบบเริ่มซับซ้อนและคุณต้องการหาต้นเหตุว่าทำไมเซอร์วิสบางตัวถึงหยุดทำงาน
เริ่มต้นจากน้อยไปมาก เพื่อแล็บที่ยั่งยืน
หน้าที่ทั้ง 5 (Serve, Talk, Remember, Automate, Manage) ไม่จำเป็นต้องทำพร้อมกันในคราวเดียว เริ่มจาก Ollama และ Open WebUI เพื่อสร้างแล็บที่ใช้งานได้ก่อน จากนั้นจึงเพิ่ม Qdrant เมื่อต้องจัดการเอกสาร และ n8n เมื่อต้องการลดขั้นตอนการทำงานด้วยมือ
การใช้ Docker Compose ตั้งแต่เริ่มต้นจะช่วยให้การเชื่อมต่อระหว่างเซอร์วิสง่ายขึ้นผ่าน hostname และการใช้ Named volumes จะช่วยให้แล็บของคุณมั่นคงแม้จะมีการอัปเดตเวอร์ชัน นอกจากนี้ควรระบุเวอร์ชันของ image ให้ชัดเจนเพื่อหลีกเลี่ยงปัญหาจากการเปลี่ยนแปลงในแท็ก :latest และคุณสามารถศึกษาเทคนิคเพิ่มเติมได้จาก practical Docker configurations ของ KDnuggets ในลำดับถัดไป
[Nahla Davies](http://nahlawrites.com/) เป็นนักพัฒนาซอฟต์แวร์และนักเขียนด้านเทคโนโลยีที่มีประสบการณ์ทำงานร่วมกับองค์กรชั้นนำระดับโลกมากมาย
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
