6 điểm bởi GN⁺ 2025-05-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • Llama.cpp giờ hỗ trợ đầu vào đa phương thức (bao gồm thị giác) thông qua libmtmd
    • API /chat/completions tương thích OpenAI qua llama-mtmd-cli hoặc llama-server
  • Có thể dùng ngay tính năng đa phương thức trên các mô hình như Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small, InternVL, v.v.
    • Có sẵn các mô hình pre-quantized (đa số mặc định gồm lượng tử hóa QK_K_M)
  • Theo mặc định, bộ chiếu đa phương thức sẽ được offload lên GPU, đồng thời cũng hỗ trợ tùy chọn tắt khi cần
  • Một số mô hình cần cửa sổ ngữ cảnh lớn (ví dụ: -c 8192)

Tổng quan

  • Llama.cpp nay bổ sung hỗ trợ đầu vào đa phương thức bằng libmtmd
  • Người dùng có thể xử lý cả các đầu vào ngoài văn bản như hình ảnh, qua đó mở rộng khả năng tận dụng mô hình thị giác
  • Tính năng này đã tương thích với các mô hình chủ chốt như Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small, InternVL, v.v.

Cách kích hoạt đầu vào đa phương thức

  • Có hai cách chạy chính được hướng dẫn: thứ nhất là dùng tùy chọn -hf (cần mô hình được hỗ trợ), thứ hai là kết hợp -m--mmproj để chỉ định riêng mô hình văn bản và mô hình projector đa phương thức
  • Khi dùng -hf, nếu muốn tắt tính năng đa phương thức thì thêm --no-mmproj, còn nếu dùng tệp mmproj tùy chỉnh thì dùng tùy chọn --mmproj local_file.gguf
  • GPU offloading là mặc định; nếu không muốn, có thể tắt bằng tùy chọn --no-mmproj-offload

Ví dụ lệnh

  • Trên dòng lệnh dùng llama-mtmd-cli, còn ở chế độ máy chủ thì dùng llama-server
  • Khi dùng tệp cục bộ, có thể chỉ định trực tiếp tệp bằng --mmproj
  • Để tắt GPU offloading, thêm tùy chọn --no-mmproj-offload

Danh sách mô hình đa phương thức dùng ngay được

  • Nhiều mô hình chuẩn bị sẵn với lượng tử hóa Q4_K_M được giới thiệu
  • Ví dụ các mô hình được hỗ trợ:
    • Gemma 3: bản 4b, 12b, 27b
    • Dòng SmolVLM: 256M, 500M, 2.2B, v.v.
    • Pixtral 12B
    • Qwen 2 VL: 2B, 7B và Qwen 2.5 VL: 3B, 7B, 32B, 72B
    • Mistral Small 3.1 24B (lượng tử hóa IQ2_M)
    • InternVL 2.5 và thế hệ 3: hỗ trợ nhiều kích thước tham số khác nhau

Lưu ý

  • Khi sử dụng, điền tên binary muốn chạy vào vị trí (tool_name) (ví dụ: llama-mtmd-cli hoặc llama-server)
  • Khi dùng một số mô hình đa phương thức, có thể cần chỉ định kích thước cửa sổ ngữ cảnh lớn (ví dụ dùng tùy chọn như -c 8192)

1 bình luận

 
GN⁺ 2025-05-11
Ý kiến trên Hacker News
  • Trên MBP M1 64GB, dùng ggml-org/gemma-3-4b-it-GGUF đạt tốc độ xử lý prompt khoảng 25t/s, tốc độ sinh token khoảng 63t/s
    Thời gian xử lý toàn bộ ảnh là khoảng 15 giây bất kể kích thước ảnh
    Ngay cả model 4B nhỏ cũng đã cho đầu ra khá ổn, mô tả tốt nhiều loại ảnh khác nhau
    Cách tái hiện là clone llama.cpp rồi build, tải file model và mmproj, chạy server, sau đó truy cập giao diện web
    Nếu dùng mà không có tùy chọn -hf thì bắt buộc phải thêm cờ --mmproj để không bị lỗi hỗ trợ multimodal
    Đang dùng quant chính thức của ggml-org/gemma-3-4b-it-GGUF
    Kỳ vọng quant unsloth do danielhanchen cung cấp sẽ nhanh hơn

    • Mọi ảnh đều trả ra cùng một câu trả lời
      Kiểu như: "Ảnh này có nhiều người trong các tư thế khác nhau xuất hiện..."
      Ảnh thực tế hoàn toàn không có như vậy nên không biết phải bắt đầu debug từ đâu

    • Tôi cũng liên tục gặp cùng kết quả đó
      Tôi có đọc rằng trên M1, nếu dùng model 7b thì xử lý prompt phải nhanh hơn gần 10 lần
      Không rõ có phải encoder chưa được tối ưu không

    • Có thể cho xem ảnh mẫu được tạo bằng prompt trực tiếp không?
      Tôi muốn xem trước khi thử

    • Tôi thắc mắc các con số đó là theo quant 4/8-bit hay theo toàn bộ fp16

  • Phải tự biên dịch llama.cpp từ mã nguồn
    Có thể lấy được chương trình llama-mtmd-cli
    Tôi đã tạo sẵn quant có hỗ trợ vision
    Có thể chạy bằng lệnh như unsloth/gemma-3-4b-it-GGUF:Q4_K_XL
    Trong lúc chat có thể tải ảnh lên và trò chuyện bằng /image image.png
    Giờ trên backend Metal không cần dùng -ngl -1 nữa
    Trên CUDA thì vẫn cần
    -1 nghĩa là offload mọi lớp GPU sang GPU

    • Nếu hữu ích thì tôi đã cập nhật trang tài liệu unsloth.ai, có thể xem ngay cách dùng llama-mtmd-cli
      Cũng dùng được cho Mistral Small

    • Nếu cài llama.cpp bằng Homebrew thì cũng có kèm llama-mtmd-cli
      Chỉ cần đưa lệnh là có thể chạy ngay

    • Thực ra -ngl 99 ổn định hơn, còn -ngl -1 có thể lúc chạy được lúc không

    • Chỉ nhìn thấy chữ ngl thôi là đã thấy bực bội dâng lên

  • Đây là tài liệu hữu ích nhất tôi tìm được tới giờ
    Nó giúp ích rất nhiều để hiểu cách hoạt động
    https://github.com/ggml-org/llama.cpp/…

    • Thật thú vị khi phần tiền xử lý image-embedding theo từng kiến trúc được tách thành thư viện riêng
      Nó tương tự như việc các công cụ text transformer được tách ra như huggingface/tokenizers
  • Dòng SmolVLM cũng được hỗ trợ
    Nhờ kích thước nhỏ nên phản hồi rất nhanh
    Rất phù hợp cho hệ thống giám sát video gia đình thời gian thực
    Tôi định thử nó như một dự án sở thích
    Cũng đã để lại ví dụ lệnh nhanh khá cụ thể

    • Cảm ơn vì đã thêm chức năng mtmd vào server
      Tôi cũng đã chờ commit này và theo dõi suốt

    • Mỗi lần xem ghi chú commit tôi đều thấy phần bạn đóng góp nên luôn rất ấn tượng
      Bạn cũng đã vất vả rất nhiều với toàn bộ llama.cpp

    • Nhưng tôi tò mò chất lượng của phản hồi nhanh như vậy ra sao
      Các model nhỏ hơn 2.2B có thể tạo được câu có ngữ cảnh tử tế không?

  • Tôi đã dùng Gemma3 4b để tạo từ khóa và mô tả cho nhiều ảnh du lịch gần đây
    Nó cũng làm được OCR cơ bản nên có thể tóm tắt ảnh có chữ, và còn đoán khá tốt ảnh được chụp ở đâu dựa trên manh mối ngữ cảnh
    Với một thứ có thể tự host thì rất ấn tượng

    • Nghe thú vị đấy
      Tôi tò mò không biết bạn có dùng theo kiểu lặp qua danh sách ảnh, chạy prompt cho từng ảnh rồi lưu kết quả vào metadata hay sqlite gì đó không

    • Tôi tò mò không biết gemma 4b có đủ dùng cho kiểu tác vụ này không
      Tôi chỉ mới dùng các bản lớn hơn, nên cứ tưởng 4b sẽ không đủ

  • Tôi tò mò từ góc nhìn người dùng bình thường thì đã thay đổi điều gì
    Vài tháng trước tôi cũng đã có thể làm mô tả ảnh bằng llama.cpp rồi, nên muốn biết điểm khác biệt lần này là gì

  • llama.cpp cung cấp bản phát hành biên dịch sẵn cho nhiều nền tảng khác nhau
    Lần này có thêm tính năng vision
    Trên macOS có thể tải llama-b5332-bin-macos-arm64.zip, giải nén, rồi dùng lệnh sudo xattr để cho phép chạy
    Có thể dùng llama-mtmd-cli làm giao diện terminal
    Hoặc chạy web server localhost:8080 cũng được, có cả UI và API
    Tôi đã ghi lại chi tiết quá trình sử dụng trên blog cá nhân

    • Nếu cài qua brew thì có thể build luôn bản mới nhất bằng tùy chọn --HEAD
      Trong vài giờ tới gói brew cũng sẽ sớm được cập nhật phiên bản để nâng cấp dễ dàng hơn

    • Nhờ convert_hf_to_gguf.py --mmproj mà việc tạo quant cho bất kỳ model vision nào cũng dễ hơn rất nhiều
      Việc llama-server hỗ trợ vision thật sự rất tuyệt
      Đây là tính năng tôi đã chờ từ lâu

    • Giờ -ngl sẽ tự động được đặt ở giá trị tối đa
      Không cần tự chỉ định -ngl 99 nữa
      Tuy nhiên điều này chỉ áp dụng cho môi trường Metal, còn CUDA v.v. thì vẫn phải chỉ định rõ

  • Tôi tò mò việc dùng gemma3 multimodal qua ollama so với dùng qua llama.cpp thì thế nào
    Muốn biết ưu điểm hay trải nghiệm sử dụng trên máy Mac Apple Silicon

    • Có hai khác biệt
      Thứ nhất, phần hỗ trợ của llama.cpp được tích hợp theo chiều ngang trong hệ sinh thái ggml nên có thể tối ưu để chạy nhanh hơn ollama
      Ví dụ, pixtral/mistral small 3.1 có mẹo 2D-RoPE dùng ít bộ nhớ hơn Ollama
      Sắp tới còn có thêm flash attention, nhờ đó vision encoder sẽ chạy nhanh hơn và tốn ít bộ nhớ hơn
      Thứ hai, llama.cpp hỗ trợ nhiều model hơn ollama
      ollama không hỗ trợ cả pixtral lẫn smolvlm
  • Tôi tò mò liệu có công cụ nào tích hợp vision vào quy trình phát triển UI không
    Ví dụ, trong dự án sở thích frontend TS/React, tôi gắn LLM local/cloud vào VSCode để dùng, nhưng ngay cả với model có hỗ trợ vision thì vẫn phải chụp ảnh màn hình rồi dán vào
    Nếu có thứ gì tự động hóa toàn bộ phần này, hoặc chỉ là một extension đơn giản cho phép chụp màn hình bằng phím tắt rồi tự động dán vào khung chat, thì cũng tiết kiệm được rất nhiều thời gian

  • Tên viết tắt ngl thật sự rất dễ gây nhầm lẫn
    Thật thú vị khi thấy đủ loại mẹo và tinh chỉnh xuất hiện để chạy nhanh nhất có thể trên Mac
    Tôi tò mò liệu những cải thiện tốc độ này có khiến nhiều người thử nghiệm tính năng vision tại nhà hơn không

    • Chắc chắn rồi
      llama.cpp chạy rất tốt cả trên chiếc PC 10 năm tuổi của tôi lẫn trên Mac M1