oMLX เซิร์ฟเวอร์ LLM บน Mac เก็บแคชประวัติแชตไว้ใน SSD ข้ามการรีสตาร์ตเซิร์ฟเวอร์ Product Hunt ชูว่าเอเจนต์ตอบใน 5 วินาทีแทน 90
oMLX คือเซิร์ฟเวอร์ LLM บน Mac ที่เก็บแคชบทสนทนาไว้ทั้งใน RAM และ SSD เพราะโมเดลในเครื่องที่ไม่มีระบบแคชช่วย ต้องย้อนอ่านแชตเดิมก่อนตอบทุกรอบ

oMLX เป็นโปรแกรมเซิร์ฟเวอร์แบบ open-source สำหรับรันโมเดลภาษาขนาดใหญ่อย่าง LLM บนเครื่อง Mac ควบคุมการทำงานทั้งหมดได้จากไอคอนบนแถบเมนูด้านบน สร้างขึ้นมาเพื่อแก้ปัญหาหลักที่คนรันโมเดลในเครื่องพบเป็นประจำ นั่นคือ ยิ่งคุยยาวเท่าไร เวลารอก่อนที่ AI จะเริ่มตอบก็ยิ่งนานขึ้นเรื่อยๆ
เวลาเปิดห้องแชตใหม่ คำถามแรกๆ AI มักจะตอบกลับเร็ว แต่พอคุยต่อเนื่องไปหลายรอบแล้วกดส่งข้อความ หน้าจอกลับนิ่งค้างไปนานโดยไม่มีข้อความขึ้นเลย พอตัวอักษรแรกเริ่มพิมพ์ออกมา ข้อความที่เหลือก็พิมพ์ต่อได้เร็วตามปกติ ช่วงที่หน้าจอนิ่งค้างเฉพาะก่อนตัวอักษรแรกคือจุดที่ oMLX ตั้งใจเข้ามาแก้
ถ้าไม่มีระบบแคช เวลาที่รอคือเวลาอ่านบทสนทนาเดิม

เวลาถามต่อกับโมเดลที่รันอยู่บนเครื่องตัวเอง ปกติแล้วโมเดลจะย้อนอ่านบทสนทนาเดิมทั้งก้อนก่อนตอบ เพราะโมเดลไม่ได้เก็บบทสนทนาไว้ สิ่งที่โปรแกรมส่งไปประมวลผลจึงเป็นประวัติการคุยที่ผ่านมา รวมกับคำถามใหม่ล่าสุด แล้วโมเดลต้องอ่านให้จบก่อน ถึงจะเริ่มพิมพ์ตัวอักษรแรกออกมาได้
ยิ่งคุยยาว ข้อความที่ต้องอ่านใหม่ก็ยิ่งเยอะ ถ้าไม่มีอะไรมาช่วยเก็บของที่อ่านไปแล้ว การถามรอบหลังๆ โมเดลจึงไม่ได้อ่านแค่คำถามล่าสุด แต่ต้องไล่อ่านของเดิมซ้ำอีกรอบ ช่วงเวลาที่หน้าจอนิ่งค้างไปจึงเป็นเวลาที่โมเดลกำลังอ่านประวัติเก่าซ้ำ ไม่ใช่เวลาคิดหาคำตอบ
ผลการอ่านที่โมเดลทำไว้ในรอบก่อนๆ เรียกว่า KV Cache ซึ่งหยิบกลับมาใช้ซ้ำได้แทนที่จะอ่านใหม่ และทางที่ oMLX เลือกก็ตรงไปตรงมา คือไม่ทิ้งแคชก้อนนี้
แคชสองชั้นของ oMLX ชั้นร้อนอยู่ใน RAM ชั้นเย็นอยู่ใน SSD

oMLX แบ่งการจัดการแคชบทสนทนาออกเป็น 2 ชั้น ชั้นแรกเก็บไว้ใน RAM สำหรับข้อมูลที่เรียกใช้บ่อยเพื่อให้ตอบสนองได้เร็วที่สุด เมื่อแคชชั้นร้อนเต็ม ข้อมูลที่ไม่ค่อยได้เรียกใช้จะย้ายลงไปเก็บในชั้นที่สองบน SSD ในรูปแบบไฟล์ safetensors ซึ่งใช้จัดเก็บข้อมูลโมเดล ถ้าคำถามครั้งต่อไปมีข้อความช่วงต้นเหมือนเดิม oMLX จะดึงแคชเดิมมาใช้ต่อได้ทันทีโดยไม่ต้องอ่านข้อความซ้ำใหม่ทั้งหมด
จุดเด่นสำคัญของการเก็บแคชลง SSD คือข้อมูลแคชจะยังอยู่แม้รีสตาร์ตเซิร์ฟเวอร์ไปแล้ว เมื่อเปิดระบบขึ้นมาใหม่ แคชของบทสนทนาหรือคำสั่งที่เคยประมวลผลไว้จึงนำกลับมาใช้ต่อได้ทันทีโดยไม่ต้องเริ่มอ่านใหม่จากศูนย์
ระบบนี้จัดการแคชโดยแบ่งออกเป็นบล็อกย่อยๆ เพื่อให้ข้อความส่วนต้นที่เหมือนกันใช้แคชร่วมกันได้ ซึ่งเป็นแนวคิดที่นำมาจากระบบรันโมเดลยอดนิยมอย่าง vLLM บนเซิร์ฟเวอร์ขนาดใหญ่ ตัวโปรเจกต์ oMLX พัฒนาต่อยอดมาจาก vllm-mlx เวอร์ชัน 0.1.0 และทำงานอยู่บนเฟรมเวิร์ก MLX กับ mlx-lm ไลบรารีรันโมเดลภาษาของ Apple โดยตรง
ตัวเลข 5 วินาทีแทน 90 วินาที มาจากใคร
ในหน้าเปิดตัว oMLX บน Product Hunt พาดหัวไว้ว่า สามารถลดเวลาตอบกลับของโปรแกรม AI ช่วยเขียนโค้ดอย่าง Claude Code จากเดิม 90 วินาที เหลือเพียงประมาณ 5 วินาที แต่ก่อนจะนำตัวเลขนี้ไปอ้างอิง ควรเข้าใจก่อนว่ามาจากไหน เพราะไม่ได้มาจากผลทดสอบอย่างเป็นทางการของผู้พัฒนา และไม่ใช่ผลทดสอบจากคนกลาง
ตัวเลขนี้มาจาก Rabnoor Singh ผู้ส่งโปรเจกต์ขึ้นเปิดตัว ซึ่งเป็นคนละคนกับผู้พัฒนา โดยเขาเล่าจากประสบการณ์ใช้งานบนเครื่องตัวเองว่า เมื่อ agent วนกลับมาทำงานรอบใหม่ ระบบเดิมต้องคำนวณประวัติแชตทั้งหมดใหม่จนค้างไปถึง 90 วินาที ความเร็วจริงจึงแตกต่างกันไปตามสเปกเครื่อง ขนาดของโมเดล และความยาวของบทสนทนา
เครื่องต้องเป็น Apple Silicon เท่านั้น
ก่อนเริ่มต้นใช้งาน oMLX มีข้อกำหนดระบบหลัก 3 ข้อที่ต้องตรวจสอบ:
- ระบบปฏิบัติการ macOS 15.0 Sequoia ขึ้นไป
- Python เวอร์ชัน 3.11 ถึง 3.13
- ชิป Apple Silicon ตั้งแต่ M1 ถึง M5
เอกสารของโปรเจกต์ระบุว่าทำงานบน Apple Silicon เท่านั้น และไม่ได้ระบุว่ารองรับเครื่อง Mac ที่ใช้ชิป Intel ถ้าเครื่องที่มีอยู่ไม่ตรงสามข้อนี้ ตัวนี้ยังไม่ใช่ของสำหรับเครื่องคุณนะ
เซิร์ฟเวอร์เดียว รองรับทั้งโมเดลข้อความ รูปภาพ และ OCR
oMLX รองรับโมเดล AI ได้หลากหลายรูปแบบผ่านเซิร์ฟเวอร์ตัวเดียว ครอบคลุม 4 กลุ่มหลัก:
- โมเดลข้อความ: สำหรับงานพูดคุยและงานช่วยเขียนโค้ดทั่วไป
- โมเดลประมวลผลภาพหรือ VLM: สำหรับงานที่ต้องส่งรูปภาพเข้าไปพร้อมคำถาม
- โมเดลอ่านข้อความจากภาพอย่าง OCR: สำหรับดึงตัวอักษรออกจากเอกสารหรือรูปภาพ รองรับ DeepSeek-OCR, DOTS-OCR และ GLM-OCR พร้อมระบบตรวจจับประเภทโมเดลอัตโนมัติ
- โมเดลแปลงข้อความเป็นเวกเตอร์อย่าง Embedding และโมเดลจัดอันดับผลค้นหาหรือ Reranker: สำหรับงานค้นหาข้อมูลจากคลังเอกสารของตัวเอง
ระบบรองรับการประมวลผลหลายคำขอพร้อมกัน โดยค่าเริ่มต้นตั้งไว้ที่ 8 คำขอ และปรับเพิ่มลดได้ตามต้องการ
สำหรับการจัดการหน่วยความจำ oMLX มีระบบควบคุม 3 รูปแบบ ได้แก่ ปักหมุดโมเดลที่ใช้บ่อยให้อยู่ในหน่วยความจำตลอดเวลา, ลบโมเดลที่ไม่ได้ใช้งานนานที่สุดออกอัตโนมัติเมื่อหน่วยความจำใกล้เต็ม และตั้งเวลาถอดโมเดลออกได้เมื่อไม่มีการเรียกใช้ นอกจากนี้ยังกำหนดเพดานหน่วยความจำรวมไว้เท่ากับ RAM ของเครื่องหลังหักออก 8 GB เพื่อป้องกันไม่ให้ระบบหลักของ macOS ค้าง
ผู้ใช้ตั้งค่าและดูสถานะทั้งหมดได้ผ่านหน้าจอควบคุมหรือ Admin Panel ที่ /admin ทั้งดูสถานะการทำงานแบบสดๆ, โหลดหรือถอดโมเดล, เปิดหน้าต่างแชตสำหรับทดสอบ และทดสอบความเร็ว

สำหรับการเชื่อมต่อ oMLX ออกแบบมาให้รองรับ API มาตรฐานของ OpenAI และ Anthropic ทำให้เครื่องมือหรือแอปที่รองรับ OpenAI API อยู่แล้ว เปลี่ยน Endpoint มาชี้ที่ http://localhost:8000/v1 ได้ทันที โดยใช้พอร์ตเริ่มต้น 8000 พร้อมหน้าต่างแชตบนเว็บในตัวที่ http://localhost:8000/admin/chat
| Endpoint | รูปแบบการใช้งาน |
|---|---|
POST /v1/chat/completions | รองรับ OpenAI Chat Completions API |
POST /v1/messages | รองรับ Anthropic Messages API |
POST /v1/embeddings | สร้างเวกเตอร์แทนข้อความสำหรับค้นหาข้อมูล |
POST /v1/rerank | จัดลำดับความเกี่ยวข้องของผลค้นหาแบบ Reranking |
GET /v1/models | ตรวจสอบรายชื่อโมเดลที่โหลดไว้ |
สำหรับคนที่ใช้ Claude Code ร่วมกับโมเดลที่มี Context Window สั้น oMLX มีโหมดปรับแต่งเฉพาะ เช่น ปรับอัตราส่วนจำนวนโทเคนที่รายงานกลับไป เพื่อให้ฟังก์ชันบีบอัดข้อความอัตโนมัติอย่าง Auto-compact ย่อประวัติแชตในจังหวะที่เหมาะสม นอกจากนี้ยังมีระบบส่งสัญญาณ Keep-alive เพื่อป้องกันปัญหา Connection Timeout ระหว่างที่โมเดลประมวลผลข้อความขนาดยาว ถ้าสนใจแนวทางการรัน Claude Code ด้วยโมเดลในเครื่องแบบอื่น ดู Muse Glimmer 30B เพิ่มเติมได้
ติดตั้งได้สามทาง เลือกตามว่าจะใช้งานหรือแก้โค้ด
เลือกติดตั้ง oMLX ได้ 3 แบบตามความสะดวก:
1. ติดตั้งผ่านไฟล์ DMG จากหน้า Releases
เป็นไฟล์ติดตั้งสำเร็จรูปสำหรับ macOS เพียงลากลงโฟลเดอร์ Applications ก็พร้อมใช้งานทันที เหมาะสำหรับคนที่ต้องการใช้งานทั่วไปโดยไม่ต้องตั้งค่า Python หรือเครื่องมือพัฒนา ตัวแอปมีระบบอัปเดตอัตโนมัติ และติดตั้ง CLI ไว้ที่ ~/.omlx/bin/omlx เพื่อใช้สั่งงานเซิร์ฟเวอร์ผ่าน Terminal หรือ Apple Shortcuts
2. ติดตั้งผ่าน Homebrew เหมาะสำหรับคนที่จัดการโปรแกรมบน Mac ผ่านคำสั่ง brew ของ Homebrew เป็นหลัก และต้องการให้เซิร์ฟเวอร์ทำงานเบื้องหลังตลอดเวลา
brew tap jundot/omlx https://github.com/jundot/omlx
brew install jundot/omlx/omlxอัปเดตเวอร์ชันได้ด้วยคำสั่ง brew update && brew upgrade omlx และสั่งให้ทำงานเบื้องหลังด้วยคำสั่ง brew services start omlx ซึ่งระบบจะเริ่มทำงานใหม่โดยอัตโนมัติถ้าเกิดข้อขัดข้อง
3. ติดตั้งจากโค้ดต้นฉบับหรือ Source Code เหมาะสำหรับนักพัฒนาที่ต้องการแก้ไขโค้ดหรือต่อยอดฟีเจอร์เพิ่มเติม
git clone https://github.com/jundot/omlx.git
cd omlx
pip install -e .ถ้าต้องการใช้ MCP (Model Context Protocol) เพื่อเชื่อมต่อเครื่องมือภายนอก ให้ติดตั้งด้วยคำสั่ง pip install -e ".[mcp]"
ทุกรูปแบบการติดตั้งควบคุมเซิร์ฟเวอร์ผ่านคำสั่งชุดเดียวกัน ได้แก่ omlx start, omlx stop และ omlx restart หรือถ้าต้องการดู Log บน Terminal ให้ใช้คำสั่ง omlx serve --model-dir ~/models
เมื่อติดตั้งเสร็จและเปิดแอปขึ้นมา ระบบจะแสดงหน้าต่างตั้งค่าเริ่มต้น 3 ขั้นตอน ได้แก่ เลือกโฟลเดอร์สำหรับเก็บโมเดล, กดเริ่มเซิร์ฟเวอร์ และดาวน์โหลดโมเดลแรก

หลังจากนั้น ตัวเซิร์ฟเวอร์จะแสดงเป็นไอคอนบนแถบเมนูด้านบน สามารถคลิกดูสถานะเซิร์ฟเวอร์ สั่งหยุดการทำงาน เปิดหน้า Admin หรือเปิดหน้าต่างแชตได้ทันที ตัวแอปเขียนด้วยภาษา Swift สำหรับ macOS โดยเฉพาะ ไม่ใช่เว็บที่แปลงมาเป็นแอปด้วย Electron

ไม่มี Custom Kernel แต่ระบบไม่แจ้งเตือน
ถ้าเลือกติดตั้งจากโค้ดต้นฉบับด้วยคำสั่ง pip install -e . แบบปกติ ระบบจะไม่คอมไพล์ชุดคำสั่งเร่งความเร็วเฉพาะชิปอย่าง Native Custom Kernels ทำให้โมเดลบางตระกูล เช่น GLM-5.2, MiniMax M3 และ Qwen3.5 ต้องสลับไปประมวลผลผ่านโค้ดมาตรฐานที่ช้ากว่ามาก โดยไม่มีข้อความแจ้งเตือนใดๆ
ในแง่ความเร็ว เอกสารของโปรเจกต์ระบุผลทดสอบกับโมเดล GLM-5.2 บนเครื่อง M3 Ultra ว่า ในขั้นตอนประมวลผลข้อความเริ่มต้น (Prefill) ถ้ามี Custom Kernel จะทำความเร็วได้ถึง 845 โทเคนต่อวินาที แต่ถ้าไม่มี จะเหลือเพียงประมาณ 29 โทเคนต่อวินาที ซึ่งช้ากว่าเดิมเกือบ 30 เท่า และยังกินหน่วยความจำมากขึ้นด้วย ตามที่บันทึกไว้ใน GitHub Issue #2137
สามารถตรวจสอบว่าเซิร์ฟเวอร์บนเครื่องเปิดใช้งาน Custom Kernel อยู่หรือไม่ ด้วยคำสั่ง:
python -c "from omlx.custom_kernels import native_kernel_status; print(native_kernel_status())"ถ้าต้องการประสิทธิภาพสูงสุด มีแนวทางแก้ไข 2 รูปแบบ:
- ติดตั้งผ่านไฟล์ DMG: ตัวติดตั้ง DMG จะคอมไพล์ Custom Kernels มาให้เรียบร้อยแล้ว จึงพร้อมใช้งานทันทีโดยไม่ต้องติดตั้ง Xcode
- ติดตั้ง Xcode ตัวเต็มก่อนคอมไพล์: ถ้าต้องการติดตั้งจากโค้ดต้นฉบับหรือ Homebrew จำเป็นต้องติดตั้ง Xcode ตัวเต็ม ซึ่งเป็นชุดเครื่องมือพัฒนาของ Apple เสียก่อน เพราะชุดคำสั่งขนาดเล็กอย่าง Xcode Command Line Tools จะไม่มีคอมไพเลอร์กราฟิกอย่าง Metal Compiler ซึ่งจะทำให้เกิดข้อผิดพลาด
xcrun: error: unable to find utility "metal"แล้วค่อยสั่งบิลด์ด้วยคำสั่งOMLX_WITH_CUSTOM_KERNEL=1 pip install -e .หรือbrew install jundot/omlx/omlx --HEAD --with-custom-kernel
ดังนั้น ถ้าต้องการความสะดวกและได้ความเร็วเต็มที่โดยไม่ต้องยุ่งกับเครื่องมือพัฒนา ไฟล์ติดตั้ง DMG จะตอบโจทย์ที่สุด แต่ถ้าตั้งใจแก้ไขโค้ดด้วยตัวเอง ก็ต้องติดตั้ง Xcode ตัวเต็มไว้ตั้งแต่แรก เพื่อป้องกันไม่ให้เซิร์ฟเวอร์ทำงานช้ากว่าที่ควรโดยไม่รู้ตัว
SSD ช่วยลดภาระ RAM แต่แทนที่ RAM ไม่ได้
แม้ระบบจะเก็บแคชลง SSD แต่ไม่ได้หมายความว่า SSD จะทำงานทดแทน RAM ได้อย่างสมบูรณ์ ในกระทู้เปิดตัว มีผู้ใช้ชื่อ Dmitrii Tsepelev ตั้งข้อสังเกตว่า แบนด์วิดท์ของ SSD ต่ำกว่า RAM อยู่มาก การย้ายแคชลง SSD จึงช่วยแบ่งเบาภาระของ RAM ได้ระดับหนึ่งเท่านั้น ไม่ได้มาแทนที่กันโดยตรง ข้อสังเกตนี้เป็นความเห็นจากผู้ใช้ในชุมชน ไม่ใช่ข้อมูลอย่างเป็นทางการจากผู้พัฒนา ดังนั้น ถ้ากำลังวางแผนเลือกซื้อเครื่อง Mac มารัน LLM ขนาดของ RAM ยังคงเป็นปัจจัยสำคัญที่สุด ซึ่งดูรายละเอียดเปรียบเทียบเพิ่มเติมได้ใน บทวิเคราะห์ Mac mini M6
สำหรับคำถามเรื่องขนาดพื้นที่ SSD ที่ระบบแคชใช้จริง ผู้เปิดตัวโปรเจกต์ระบุว่ายังไม่มีตัวเลขสถิติที่แน่นอน แต่ขนาดไฟล์แคชจะแปรผันตามความยาวของบทสนทนาคูณด้วยขนาดโมเดล ซึ่งใช้เป็นแนวทางคร่าวๆ ในการประเมินพื้นที่ว่างบนดิสก์ที่ต้องเตรียมไว้ได้
สิ่งที่สำคัญกว่าความเร็ว คือข้อมูลไม่ออกจากเครื่อง
ในกระทู้เปิดตัว มีเจ้าของสตูดิโอด้านงานสร้างสรรค์เข้ามาคุยด้วย สิ่งที่ผู้เปิดตัวโปรเจกต์หยิบยกขึ้นมาคุยกลับไม่ใช่เรื่องความเร็ว แต่เป็นเรื่องที่ทุกอย่างรันอยู่บนเครื่องตัวเอง ข้อมูลที่ป้อนเข้าไปจึงไม่ออกไปไหน เขามองว่าสำหรับงานที่ยังไม่เผยแพร่ เรื่องนี้มักเป็นตัวตัดสินที่แท้จริงมากกว่าความเร็วในการตอบ ทั้งนี้ oMLX เป็นโครงการโอเพนซอร์สภายใต้สัญญาอนุญาต Apache 2.0
ของที่เอากลับไปใช้ได้แม้ไม่ได้ใช้ Mac หรือ oMLX คือวิธีอ่านอาการ ลองแยกก่อนว่าที่ช้าอยู่นั้นเป็นแบบไหน ระหว่างนิ่งค้างเฉพาะก่อนตัวอักษรแรกแล้วหลังจากนั้นไหลปกติ กับตัวอักษรพิมพ์ช้าเท่าเดิมตลอดทั้งคำตอบ สองอาการนี้คนละเรื่องกัน ถ้าเจอแบบแรก มีวิธีหนึ่งที่ลองได้ทันทีโดยไม่ต้องติดตั้งอะไรเลย คือเปิดห้องแชตใหม่แทนที่จะคุยต่อในบทสนทนาเดิมที่ยาวเกินไป เพราะเมื่อประวัติแชตสั้นลง ของที่ต้องอ่านก่อนตอบก็น้อยลงตาม
เพราะยิ่งบทสนทนายาวขึ้น สิ่งที่เพิ่มขึ้นไม่ใช่ความจำของโมเดล แต่เป็นปริมาณข้อความเดิมที่โมเดลต้องย้อนกลับไปอ่านใหม่ทั้งหมดในทุกรอบ
ที่มา:
- oMLX: Mac LLM server that cuts agent wait times from 90s to 5s จาก Product Hunt
- LLM inference server with continuous batching & SSD caching for Apple Silicon จาก GitHub · jundot/omlx
ชอบเรื่องแนวนี้ มีอีบุ๊คฟรีให้อ่านต่อ
สร้าง Claude Skill แบบไม่ต้องรู้โค้ด คู่มือสร้าง Claude Skill ของคุณเองด้วยการคุยกับ Claude Code เป็นภาษาไทย
กดสมัครแล้วเราจะส่งเทคนิค AI และของแจกใหม่ๆ ให้ทางอีเมล เลิกรับได้ตลอด
Claude Cowork · The Business Playbook

ฉบับภาษาไทย 15 บท เรียนรู้ผ่านโปรเจกต์จำลองต่อเนื่องทั้งเล่ม ตั้งแต่ตั้งค่า Workspace จัดการไฟล์ เชื่อมแอป ตั้งระบบอัตโนมัติ จนถึงสร้าง Plugin


