6 คะแนน โดย GN⁺ 2025-05-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2025-05-11
ความคิดเห็นจาก 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/…

    • น่าสนใจที่แยกขั้นตอน preprocess image-embedding ตามสถาปัตยกรรมออกเป็นไลบรารีต่างหาก
      คล้ายกับที่เครื่องมือ 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 รองรับโมเดลได้หลากหลายกว่า ollama
      ollama ยังไม่รองรับทั้ง pixtral และ smolvlm
  • อยากรู้ว่ามีเครื่องมือที่เอา vision มาใช้กับการพัฒนา UI ไหม
    ยกตัวอย่างเช่น ในโปรเจกต์งานอดิเรกฝั่ง frontend TS/React ผมต่อ LLM แบบโลคัล/คลาวด์เข้ากับ VSCode ใช้อยู่ แต่แม้แต่โมเดลที่รองรับ vision ก็ยังต้องแคปหน้าจอแล้วแปะเองอยู่ดี
    ถ้ามีอะไรที่ช่วยทำส่วนนี้อัตโนมัติทั้งก้อน หรืออย่างน้อยเป็นส่วนขยายง่ายๆ ที่กดคีย์ลัดเพื่อแคปหน้าจอแล้วแปะเข้าแชตอัตโนมัติได้ ก็น่าจะประหยัดเวลาเยอะ

  • ตัวย่อ ngl นี่ชวนสับสนจริงๆ
    บน Mac มีทิปและการปรับจูนหลายอย่างโผล่มาเพื่อให้รันได้เร็วที่สุดก็น่าสนใจดี
    สงสัยว่าการเพิ่มความเร็วแบบนี้จะทำให้คนทดลองฟีเจอร์ vision ที่บ้านกันมากขึ้นไหม

    • แน่นอน
      llama.cpp รันได้ดีมากทั้งบนพีซีอายุ 10 ปีของผมและบน Mac M1