- Llama.cpp รองรับอินพุตมัลติโหมด (รวมถึงวิชัน) ผ่าน libmtmd แล้วในตอนนี้
- รองรับ OpenAI-compatible
/chat/completions API ผ่าน llama-mtmd-cli หรือ llama-server
- สามารถใช้งานความสามารถมัลติโหมดได้ทันทีบนโมเดลอย่าง Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small, InternVL เป็นต้น
- มีโมเดลแบบ pre-quantized ให้พร้อมใช้ (ส่วนใหญ่มีการควอนไทซ์ QK_K_M รวมมาเป็นค่าเริ่มต้น)
- โดยค่าเริ่มต้น มัลติโหมดโปรเจ็กเตอร์จะถูก offload ไปยัง GPU และยังรองรับการปิดการทำงานหากจำเป็น
- บางโมเดลต้องใช้ context window ขนาดใหญ่ (เช่น
-c 8192)
ภาพรวม
- Llama.cpp เพิ่มการรองรับอินพุตมัลติโหมดใหม่โดยใช้ libmtmd
- ผู้ใช้สามารถประมวลผลอินพุตนอกเหนือจากข้อความ เช่น รูปภาพ ได้ ทำให้การใช้งานโมเดลวิชันกว้างขึ้น
- ฟีเจอร์นี้รองรับกับโมเดลหลัก ๆ แล้ว เช่น Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small, InternVL เป็นต้น
วิธีเปิดใช้งานอินพุตมัลติโหมด
- มีวิธีรันหลัก 2 แบบ: แบบแรกคือใช้ตัวเลือก -hf (ต้องเป็นโมเดลที่รองรับ) และแบบที่สองคือใช้ -m ร่วมกับ --mmproj เพื่อระบุโมเดลข้อความและโมเดลมัลติโหมดโปรเจ็กเตอร์แยกกัน
- เมื่อใช้ตัวเลือก -hf หากต้องการปิดความสามารถมัลติโหมด ให้เพิ่ม --no-mmproj และหากต้องการใช้ไฟล์ mmproj แบบกำหนดเอง ให้ใช้ตัวเลือก --mmproj local_file.gguf
- ค่าเริ่มต้นคือ GPU offloading และหากไม่ต้องการสามารถปิดได้ด้วยตัวเลือก --no-mmproj-offload
ตัวอย่างคำสั่ง
- บนคอมมานด์ไลน์จะใช้ llama-mtmd-cli ส่วนฝั่งเซิร์ฟเวอร์จะใช้ llama-server
- หากใช้ไฟล์โลคัล จะเป็นการระบุไฟล์โดยตรงด้วย --mmproj
- หากต้องการปิด GPU offloading ให้เพิ่มตัวเลือก --no-mmproj-offload
รายชื่อโมเดลมัลติโหมดที่พร้อมใช้งานทันที
- มีการแนะนำโมเดลที่เตรียมไว้พร้อมใช้งานหลายรายการ โดยใช้การควอนไทซ์ Q4_K_M เป็นค่าเริ่มต้น
- ตัวอย่างโมเดลที่รองรับ:
- Gemma 3: เวอร์ชัน 4b, 12b, 27b
- ตระกูล SmolVLM: 256M, 500M, 2.2B เป็นต้น
- Pixtral 12B
- Qwen 2 VL: 2B, 7B และ Qwen 2.5 VL: 3B, 7B, 32B, 72B
- Mistral Small 3.1 24B (การควอนไทซ์ IQ2_M)
- InternVL รุ่น 2.5 และ 3: รองรับหลายขนาดพารามิเตอร์
หมายเหตุ
- ตอนใช้งาน ให้ใส่ชื่อไบนารีที่ต้องการลงในตำแหน่ง (tool_name) (เช่น llama-mtmd-cli หรือ llama-server)
- เมื่อใช้โมเดลมัลติโหมดบางตัว อาจจำเป็นต้องกำหนด ขนาด context window ที่ใหญ่ขึ้น (เช่น ใช้ตัวเลือกอย่าง
-c 8192)
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
บน MBP M1 64GB ใช้
ggml-org/gemma-3-4b-it-GGUFแล้วได้ความเร็วประมวลผลพรอมป์ตราว 25t/s และความเร็วสร้างโทเค็นราว 63t/sเวลาประมวลผลภาพทั้งหมดอยู่ที่ประมาณ 15 วินาทีโดยไม่ขึ้นกับขนาดภาพ
แม้แต่โมเดลเล็ก 4B ก็ให้ผลลัพธ์ที่ค่อนข้างดีแล้ว และอธิบายภาพได้หลากหลายแบบดี
วิธีทำซ้ำคือ clone
llama.cppแล้ว build, ดาวน์โหลดไฟล์โมเดลและmmproj, จากนั้นรันเซิร์ฟเวอร์แล้วเข้าเว็บอินเทอร์เฟซถ้าใช้โดยไม่มีออปชัน
-hfต้องใส่สวิตช์--mmprojด้วย ไม่เช่นนั้นจะขึ้น error เรื่องรองรับมัลติโหมดัลตอนนี้กำลังใช้ quant แบบทางการของ
ggml-org/gemma-3-4b-it-GGUFอยู่คาดว่า quant แบบ unsloth ที่
danielhanchenให้มาน่าจะเร็วกว่าทุกภาพให้คำตอบเหมือนกันหมด
ประมาณว่า "ภาพนี้มีคนหลายคนในท่าทางต่างๆ ปรากฏอยู่…"
ทั้งที่ในภาพจริงไม่มีอะไรแบบนั้นเลย เลยไม่รู้จะเริ่มดีบักจากตรงไหนดี
ผมก็ยังได้ผลแบบเดียวกันซ้ำๆ
เห็นมีคนเขียนว่าถ้าใช้โมเดล 7b บน M1 การประมวลผลพรอมป์ตควรเร็วกว่านี้เกือบ 10 เท่า
เลยสงสัยว่าหรือยังไม่ได้ optimize ฝั่ง encoder
ถ้ามีภาพตัวอย่างที่สร้างด้วยพรอมป์ตเองโดยตรง ช่วยเอามาให้ดูได้ไหม?
อยากเห็นสักรอบก่อนลองเอง
อยากรู้ว่าตัวเลขพวกนั้นอิง quant 4/8 บิต หรือว่าเป็น fp16 เต็มทั้งหมด
ต้องคอมไพล์
llama.cppจากซอร์สเองจะได้โปรแกรม
llama-mtmd-cliผมทำ quant ที่รองรับ vision ไว้แล้ว
รันได้ด้วยคำสั่งอย่าง
unsloth/gemma-3-4b-it-GGUF:Q4_K_XLระหว่างแชตสามารถอัปโหลดภาพแล้วคุยต่อได้ด้วย
/image image.pngตอนนี้บนแบ็กเอนด์ Metal ไม่ต้องใช้
-ngl -1แล้วแต่บน CUDA ยังจำเป็นอยู่
-1หมายถึง offload ทุกชั้นของ GPU ไปยัง GPUเผื่อเป็นประโยชน์ ผมอัปเดตหน้าเอกสารที่
unsloth.aiแล้ว ลองดูวิธีใช้llama-mtmd-cliได้เลยใช้กับ Mistral Small ได้ด้วย
ถ้าติดตั้ง
llama.cppผ่าน Homebrew ก็มีllama-mtmd-cliรวมมาให้ด้วยแค่ใส่คำสั่งก็รันได้เลย
จริงๆ แล้ว
-ngl 99เสถียรกว่า,-ngl -1อาจใช้ได้หรือไม่ได้แล้วแต่กรณีแค่เห็นตัวอักษร
nglก็รู้สึกเดือดขึ้นมาแล้วนี่เป็นเอกสารที่มีประโยชน์ที่สุดเท่าที่หาเจอจนถึงตอนนี้
ช่วยให้เข้าใจการทำงานได้มาก
https://github.com/ggml-org/llama.cpp/…
คล้ายกับที่เครื่องมือ text transformer ถูกแยกออกมาแบบ
huggingface/tokenizersรองรับตระกูล SmolVLM ด้วย
ด้วยขนาดที่เล็กเลยตอบสนองได้เร็วมาก
เหมาะอย่างยิ่งสำหรับระบบเฝ้าระวังวิดีโอภายในบ้านแบบเรียลไทม์
ผมว่าจะลองทำเป็นโปรเจกต์งานอดิเรกดู
ยังทิ้งตัวอย่างคำสั่งแบบด่วนไว้ค่อนข้างละเอียดด้วย
ขอบคุณที่เพิ่มฟีเจอร์
mtmdให้กับเซิร์ฟเวอร์ผมเองก็คอยตามอยู่เรื่อยๆ ระหว่างรอคอมมิตนี้เหมือนกัน
ทุกครั้งที่ดูบันทึก git commit แล้วเห็นสิ่งที่คุณมีส่วนร่วมก็ทึ่งตลอด
เหนื่อยมามากทั้งกับ
llama.cppโดยรวมด้วยแต่ก็สงสัยว่าความเร็วสูงแบบนี้คุณภาพจริงๆ เป็นยังไง
โมเดลที่เล็กกว่า 2.2B ยังสร้างประโยคที่มีบริบทได้ดีอยู่ไหม?
ใช้ Gemma3 4b สร้างคีย์เวิร์ดกับคำอธิบายให้รูปทริปเที่ยวล่าสุดหลายรูป
ทำ OCR พื้นฐานได้ด้วย เลยช่วยสรุปรูปที่มีข้อความอยู่ และยังเดาตำแหน่งที่ถ่ายได้ดีจากเบาะแสเชิงบริบท
ถือว่ายอดเยี่ยมมากสำหรับของที่โฮสต์เองได้
ฟังดูน่าสนุก
อยากรู้ว่าใช้ในโครงแบบวนลูปรายการภาพ รันพรอมป์ตกับแต่ละภาพ แล้วเก็บผลลง metadata หรือ
sqliteอะไรทำนองนั้นหรือเปล่าอยากรู้ว่า
gemma 4bใช้งานระดับนี้ได้ดีพอจริงไหมผมเคยใช้แต่เวอร์ชันใหญ่กว่านี้ เลยคิดว่า 4b น่าจะไม่พอ
ในมุมผู้ใช้ทั่วไป อยากรู้ว่ามีอะไรเปลี่ยนไปบ้าง
เมื่อไม่กี่เดือนก่อนก็ใช้
llama.cppทำ image caption อะไรพวกนี้ได้อยู่แล้ว เลยสงสัยว่าความเปลี่ยนแปลงคืออะไรllama.cppมีคอมไพล์รีลีสสำหรับหลายแพลตฟอร์มคราวนี้เพิ่มฟีเจอร์ vision เข้ามาใหม่
บน macOS สามารถดาวน์โหลด
llama-b5332-bin-macos-arm64.zipมาแตกไฟล์ แล้วใช้คำสั่งsudo xattrเพื่ออนุญาตให้รันได้จากนั้นใช้
llama-mtmd-cliผ่านเทอร์มินัลอินเทอร์เฟซได้หรือจะรันเว็บเซิร์ฟเวอร์ที่
localhost:8080ก็ได้เช่นกัน (มีทั้ง UI และ API)ผมสรุปบันทึกการใช้งานแบบละเอียดไว้ในบล็อกส่วนตัว
ถ้าติดตั้งผ่าน
brewก็ใช้ตัวเลือก--HEADเพื่อ build เวอร์ชันล่าสุดได้ตลอดอีกไม่กี่ชั่วโมงแพ็กเกจ
brewก็น่าจะอัปเดตเวอร์ชันตาม ทำให้อัปเกรดได้ง่ายขึ้นมากconvert_hf_to_gguf.py --mmprojทำให้สร้าง quant สำหรับ vision model ไหนก็ได้ง่ายขึ้นเยอะการที่
llama-serverรองรับ vision นี่เจ๋งมากเป็นฟีเจอร์ที่รอมานาน
ตอนนี้
-nglจะถูกตั้งเป็นค่าสูงสุดโดยอัตโนมัติแล้วไม่ต้องระบุ
-ngl 99เองแต่ใช้ได้เฉพาะบน Metal ส่วน CUDA และอย่างอื่นยังต้องระบุเอง
อยากรู้ว่าถ้าเทียบกับการใช้โมเดลมัลติโหมดัล
gemma3ผ่านollamaแล้ว การใช้llama.cppเป็นยังไงบ้างอยากรู้ข้อดีหรือประสบการณ์ใช้งานบน Mac Apple Silicon
อย่างแรก การรองรับของ
llama.cppถูกรวมแบบแนวนอนอยู่ใน ecosystem ของggmlทำให้สามารถ optimize ให้เร็วกว่าollamaได้ตัวอย่างเช่น
pixtral/mistral small 3.1มีทริก 2D-RoPE ที่ใช้หน่วยความจำน้อยกว่า Ollamaอีกไม่นานจะมีฟีเจอร์ flash attention เพิ่มเข้ามา ซึ่งจะทำให้ vision encoder ทำงานได้เร็วขึ้นและใช้หน่วยความจำน้อยลง
อย่างที่สอง
llama.cppรองรับโมเดลได้หลากหลายกว่าollamaollamaยังไม่รองรับทั้งpixtralและsmolvlmอยากรู้ว่ามีเครื่องมือที่เอา vision มาใช้กับการพัฒนา UI ไหม
ยกตัวอย่างเช่น ในโปรเจกต์งานอดิเรกฝั่ง frontend TS/React ผมต่อ LLM แบบโลคัล/คลาวด์เข้ากับ VSCode ใช้อยู่ แต่แม้แต่โมเดลที่รองรับ vision ก็ยังต้องแคปหน้าจอแล้วแปะเองอยู่ดี
ถ้ามีอะไรที่ช่วยทำส่วนนี้อัตโนมัติทั้งก้อน หรืออย่างน้อยเป็นส่วนขยายง่ายๆ ที่กดคีย์ลัดเพื่อแคปหน้าจอแล้วแปะเข้าแชตอัตโนมัติได้ ก็น่าจะประหยัดเวลาเยอะ
ตัวย่อ
nglนี่ชวนสับสนจริงๆบน Mac มีทิปและการปรับจูนหลายอย่างโผล่มาเพื่อให้รันได้เร็วที่สุดก็น่าสนใจดี
สงสัยว่าการเพิ่มความเร็วแบบนี้จะทำให้คนทดลองฟีเจอร์ vision ที่บ้านกันมากขึ้นไหม
llama.cppรันได้ดีมากทั้งบนพีซีอายุ 10 ปีของผมและบน Mac M1