Llama.cpp 이제 비전 기능 지원 (멀티모달 입력)
(github.com/ggml-org)-
Llama.cpp가 이제 libmtmd를 통해 멀티모달 입력(비전 포함)을 지원함
- llama-mtmd-cli 또는 llama-server를 통한 OpenAI 호환
/chat/completions
API
- llama-mtmd-cli 또는 llama-server를 통한 OpenAI 호환
- Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small, InternVL 등 모델에서 멀티모달 기능 즉시 사용 가능함
- Pre-quantized 모델들 제공 (대부분 QK_K_M 양자화를 기본 포함)
- 기본적으로 멀티모달 프로젝터는 GPU에 오프로딩되며, 필요시 비활성화 설정도 지원함
- 일부 모델은 큰 컨텍스트 윈도우(예: -c 8192)가 필요
개요
- Llama.cpp는 libmtmd를 이용해 멀티모달 입력 기능을 새롭게 지원하게 됨
- 사용자들은 이미지 등 텍스트 외 입력도 처리할 수 있게 되어 비전 모델 활용성이 확대됨
- 이 기능은 이미 Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small, InternVL 등 주요 모델들과 호환됨
멀티모달 입력 활성화 방법
- 두 가지 주요 실행 방식이 안내됨: 첫 번째는 -hf 옵션 사용(지원 모델 필요), 두 번째는 -m과 --mmproj 옵션을 조합해 텍스트와 멀티모달 프로젝터 모델을 각각 지정하는 방법임
- -hf 옵션 사용 시, 멀티모달 기능을 끄고 싶으면 --no-mmproj를 추가하고, 사용자 지정 mmproj 파일을 활용할 경우 --mmproj local_file.gguf 옵션을 사용함
- GPU 오프로딩이 기본값이며, 이를 원치 않으면 --no-mmproj-offload 옵션으로 비활성화가 가능함
예시 명령어
- 커맨드라인에서는 llama-mtmd-cli를, 서버에서는 llama-server를 활용하는 형태임
- 로컬 파일을 사용하는 경우 --mmproj로 직접 파일을 지정하는 방식임
- GPU 오프로딩을 비활성화하려면 --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)
- 일부 멀티모달 모델 사용 시 큰 컨텍스트 윈도우 크기 지정이 필요할 수 있음(예: -c 8192와 같은 옵션 활용)
Hacker News 의견
-
MBP M1 64GB에서 ggml-org/gemma-3-4b-it-GGUF를 사용해 프롬프트 처리 속도 25t/s, 토큰 생성 속도 63t/s 정도 얻음
전체 이미지 처리 시간은 이미지 크기와 상관없이 약 15초임
작은 4B 모델도 이미 꽤 괜찮은 출력 보여줌, 다양한 이미지를 잘 설명함
재현 방법은 llama.cpp 클론 후 빌드, 모델 및 mmproj 파일 다운로드 후 서버 실행, 그리고 웹 인터페이스 접속임
-hf 옵션 없이 사용하면 --mmproj 스위치를 반드시 넣어야 멀티모달 지원 에러가 안 남
공식 ggml-org/gemma-3-4b-it-GGUF 쿼트 사용 중임
danielhanchen에서 제공하는 unsloth 쿼트가 더 빠를 거로 기대함-
모든 이미지에 똑같은 답변이 뜸
"이 이미지는 다양한 포즈의 여러 사람이 등장하며…" 이런 식임
실제 이미지에는 그런 게 전혀 없어서 어디서부터 디버깅해야 할지 감이 안 옴 -
나도 같은 결과가 계속 나오고 있음
M1에서 7b 모델을 쓰면 프롬프트 처리가 거의 10배 빨라야 한다는 글을 봄
혹시 인코더 최적화가 안 됐나 궁금함 -
직접 프롬프트로 생성한 예시 이미지가 있다면 보여줄 수 있음?
해보기 전에 한 번 보고 싶음 -
저 숫자들은 4/8비트 쿼트 기준인가 아니면 전체 fp16 기준인가 궁금함
-
-
llama.cpp를 소스에서 직접 컴파일해야 함
llama-mtmd-cli 프로그램을 얻을 수 있음
나는 vision 지원하는 쿼트 만들어 놨음
unsloth/gemma-3-4b-it-GGUF:Q4_K_XL 등 명령으로 실행 가능함
채팅 중 /image image.png로 이미지 올려 대화 가능함
이제는 Metal 백엔드에선 -ngl -1 안 써도 됨
CUDA에서는 여전히 필요함
-1은 모든 GPU 계층을 GPU에 오프로딩 의미임-
도움이 된다면, 문서 unsloth.ai 페이지 갱신했으니 바로 llama-mtmd-cli 사용법 참고 바람
Mistral Small에도 쓸 수 있음 -
Homebrew로 llama.cpp 설치하면 llama-mtmd-cli도 포함되어 있음
명령어만 주면 바로 실행할 수 있음 -
사실 -ngl 99가 더 안정적임, -ngl -1은 작동 여부가 다를 수 있음
-
ngl이란 글자만 봐도 화가 치솟는 기분임
-
-
지금까지 찾은 가장 유용한 문서임
어떻게 동작하는지 이해하는 데 큰 도움 줌
https://github.com/ggml-org/llama.cpp/…- 아키텍처별 이미지-임베딩 전처리를 별도 라이브러리로 분리한 게 흥미로움
huggingface/tokenizers처럼 텍스트 트랜스포머 도구가 나눠진 것과 유사함
- 아키텍처별 이미지-임베딩 전처리를 별도 라이브러리로 분리한 게 흥미로움
-
SmolVLM 시리즈도 지원함
작은 사이즈 덕분에 매우 빠른 응답 제공함
실시간 가정용 비디오 감시 시스템에 완벽함
이걸로 취미 프로젝트로서 시도해 볼 생각임
빠른 명령어 예시도 구체적으로 남김-
서버에 mtmd 기능 추가해줘서 고마움
나도 커밋 기다리며 계속 지켜보고 있었음 -
git 커밋 노트 볼 때마다 기여한 내용 보여서 항상 감탄함
llama.cpp 전체적으로도 고생 많았음 -
근데 이렇게 고속 응답이 품질적으로는 어떤지 궁금함
2.2B보다 작은 모델들도 맥락 있는 문장 제대로 뱉을 수 있음?
-
-
Gemma3 4b 사용해서 최근 여행 사진 다수에 키워드랑 설명 생성하는 데 썼음
기본적인 OCR도 돼서 텍스트가 적힌 사진 요약해주고, 맥락 단서 통해 어디서 찍었는지도 잘 추측해줌
직접 호스팅 가능한 것 치고 훌륭함-
재밌게 들림
이미지 목록 루프 돌며 각각 프롬프트 실행하고 결과를 메타데이터나 sqlite 등에 저장하는 구조로 쓰는지 궁금함 -
gemma 4b가 이 정도 작업에 충분히 쓸만한지 궁금함
나는 더 큰 버전만 써봤는데, 4b면 부족할 줄 알았음
-
-
평범한 사용자 입장에서 뭐가 달라졌는지 궁금함
몇 달 전에도 llama.cpp로 이미지 설명 등 할 수 있었는데 변화점이 궁금함 -
llama.cpp가 다양한 플랫폼용 컴파일 릴리즈 제공함
이번에는 비전 기능 새로 들어감
macOS에서 llama-b5332-bin-macos-arm64.zip 받아서 압축 풀고, sudo xattr 명령으로 실행 허용 후
llama-mtmd-cli로 터미널 인터페이스 사용 가능함
또는 localhost:8080 웹 서버 실행도 가능함(UI, API 포함)
자세한 사용 기록은 개인 블로그에 정리함-
brew로 설치하는 경우 --HEAD 옵션으로 항상 최신 상태로 빌드 가능함
몇 시간 내로 brew 패키지 버전도 곧 업데이트되어 손쉽게 업그레이드할 수 있을 거임 -
convert_hf_to_gguf.py --mmproj 덕분에 어떤 비전 모델이든 쿼트 제작이 훨씬 쉬워졌음
llama-server에서 비전 지원되는 게 아주 멋짐
오래 기다렸던 기능임 -
이제 -ngl은 자동으로 최대값 지정됨
직접 -ngl 99 지정할 필요 없음
단, Metal 환경에만 해당되고 CUDA 등은 여전히 명시해야 함
-
-
gemma3 멀티모달 모델을 ollama 통해 쓰는 것과 비교해서 llama.cpp 쓰는 게 어떤지 궁금함
애플 실리콘 맥에서 장점이나 사용 경험 있는지 알고 싶음- 두 가지 차이점 있음
첫째, llama.cpp 지원은 ggml 생태계 내에서 가로로 통합되어 있어 ollama보다 더 빠르게 동작하게 최적화 가능함
예를 들어, pixtral/mistral small 3.1은 Ollama보다 더 적은 메모리 쓰는 2D-RoPE 트릭을 제공함
곧 플래시 어텐션 기능도 추가될 예정인데, 이로써 비전 인코더가 더 빠르고 적은 메모리로 동작할 것임
둘째, llama.cpp는 ollama보다 더 다양한 모델 지원함
ollama는 pixtral이나 smolvlm 둘 다 지원하지 않음
- 두 가지 차이점 있음
-
UI 개발에 비전을 접목하는 도구가 있는지 궁금함
예시로 프론트엔드 TS/React 취미 프로젝트에서 로컬/클라우드 LLM을 VSCode에 붙여 쓰는데, 비전 지원 모델조차도 꼭 스크린샷 찍어 붙여야 함
이 부분 전반을 자동화하거나, 키보드 단축키로 스크린샷 찍고 자동으로 채팅에 붙여넣는 단순 확장만 있어도 시간 절약 클 것임 -
ngl 약어가 참 헷갈림
맥에서 최대한 빠르게 돌리려고 여러 팁과 조정이 등장하는 게 신기함
이런 속도 개선이 더 많은 사람들이 집에서 비전 기능 실험하게 만들지 궁금함- 확실함
llama.cpp는 10년된 내 PC와 m1 맥 둘 다에서 아주 잘 돌아감
- 확실함