メインコンテンツへスキップ

Llama.cppでVision機能が利用可能に!

·3 分
2025/05 AI 機械学習 画像認識 Llama.cpp Vision

Llama.cppでVision機能が利用可能に!

引用元:https://news.ycombinator.com/item?id=43943047

dust42 2025/05/10 06:55:33

MBP M1 64GBで ggml-org/gemma-3-4b-it-GGUF を試したら、結構速いし4Bでもそこそこ画像説明してくれる。
使うにはまず GitHubから取ってビルドして、モデルDLしてサーバ起動する。
手順はコマンド書いといたよ。
Web UIは http://127.0.0.8080/。
-hf なしなら –mmproj オプション忘れずに。
unsloth のモデルはもっと速そう。

matja 2025/05/10 15:39:34

どんな画像試しても、”この画像には、帽子をかぶった男性、車椅子の女性、大きな頭の子供、スーツ姿の男性、帽子をかぶった女性など、様々なポーズをとった多様な人々が映っています。”って同じ応答が返ってくるんだけど。
いやいや、どれも画像には写ってないし。
どうやってデバッグ始めればいいのかも分かんないよ。

clueless 2025/05/10 19:19:52

自分も同じだよ。
どの画像アップしても、代わりにこんなメッセージが出てくるんだ。
”これは、「one does not get it」というフレーズを嘲笑的に使ったユーモラスなミームです。これは、冗談やミームの文脈が理解できずにイライラする人々についてのジョークです。”
なんで動かないのか分かんないなあ。

clueless 2025/05/10 19:40:36

よし、このスレッドのこのコメントを試したら、問題が解決したよ!
https://news.ycombinator.com/item?id=43943624

exe34 2025/05/10 16:03:28

これって、実際の画像が見れてないってことじゃない?
何か理由があって読み込めてないんだよ。

aendruk 2025/05/10 18:28:38

画像が見えてないだけで、なんで例えば「何も見えない」とか「視覚的な解釈ができない意味不明なもの」じゃなくて、あんな具体的でおかしな出力になるのか想像つかないな。
そんなの、使う側としては最悪だよね。

sigmaisaletter 2025/05/10 19:42:38

LLMって、「役に立てない」って言うのが苦手なんだ。
helpful assistantになるように訓練されてるから、画像が見えてないのに何かでっち上げちゃう(ハルシネーション)。
もう今となっては、そういうもんだと思ってていいよ。

aendruk 2025/05/10 19:54:46

学習データに制御が入ってないってこと?

tough 2025/05/10 19:41:24

面白い事実として、何も入力しないでLLMにプロンプト送っても、適当な意味不明なのが出てきたりするんだぜ。

exe34 2025/05/11 07:36:22

あと、temperatureをゼロに設定すると、毎回同じ出力になるんだ!

brrrrrm 2025/05/10 20:09:36

うーん、俺も同じ結果だなー。でもさ、M1で7b model使うと、プロンプト処理が10倍くらい速くなるって話らしいよ。このGitHubディスカッション見てみて。https://github.com/ggml-org/llama.cpp/discussions/4167もしかしてencoderの最適化がまだなのかな?

zamadatix 2025/05/10 12:39:13

それって4/8 bit quantsの話?それともフル精度のfp16 modelでの数字?

dust42 2025/05/10 13:59:18

4 bit quantの gemma-3-4b-it-Q4_K_M.gguf を使ってるよ。promptは”describe”とか、短くしたい時は”short description”だよ。
君が写真家ってことで、君のサイトの写真を使ってみたら gemma 4bが具体的な説明を出して、それが結構正確だったんだ。
使った写真は zamadatixのサイトの L’Officiel.02シリーズ(L-officel_lanz_08_1369.jpg)からだよ。

zamadatix 2025/05/10 18:42:02

俺は写真家じゃないけど、例はありがとう!写真はこちら:https://payload.cargocollective.com/1/15/509333/14386490/L-o…
説明は完璧じゃないね。建物も丘陵もドレスも違う点がある。
4 GB modelだし文句はないけど。quantに関する質問は速度のことだよ。大きいmultimodal modelはもっと正確だった(例:”wooden and stone rustic structure”)。

refulgentis 2025/05/10 17:17:58

ちなみに、画像処理は別のmodelが画像を読み込んで1000 tokenくらい生成してるよ。
(vision機能はllama.cppに前からあったけど、メンテしてたから分かる、めっちゃ大変だったんだ)
今回のこれは素晴らしい仕事だよ。vision codeはリベースとかリファクタリングが必要だったから、新しいのが出たのは大歓迎だね。

brrrrrm 2025/05/10 21:49:48

待ってごめん、これどういう仕組み?
gemma3は siglipを使って256 embeddingsを並列出力できると思ってたんだけど。
codeのポインタとかあれば共有してもらえる?
この https://github.com/ggml-org/llama.cpp/blob/master/tools/mtmd… を見つけたけど、正しいcode pathか分からなくて。

astrodude 2025/05/10 16:39:15

promptに基づいて生成された画像の例とかある?
試す前に見てみたいな。

geoffpado 2025/05/10 19:11:47

はっきりさせとくけど、このmodelは画像を生成してるんじゃなくて、送られてきた画像を説明してるんだよ。

danielhanchen 2025/05/10 05:10:09

めっちゃうまく動くよ!llama.cppをsourceからcompileして llama-mtmd-cli をゲット。
vision対応quant modelで試してみて。例えばこれ実行してみて:
./llama.cpp/llama-mtmd-cli -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL -ngl -1
チャットで /image image.png で画像を読み込んでchat!
追記:-ngl -1 は Metal backends ではもう不要(CUDAは必要)。llama.cppがdefaultでGPUに自動offloadするようになったよ!

danielhanchen 2025/05/10 05:25:32

参考になれば、https://docs.unsloth.ai/basics/gemma-3-how-to-run-and-fine-t… のdocumentを更新したよ。llama-mtmd-cli を直接使えるって書いてあるから。Mistral Smallでも動くはずだよ。

distalx 2025/05/10 19:13:29

LLaMAをデスクトップで動かして、ノートPCからアクセスできる簡単なGUIってある?

xyc 2025/05/17 00:39:10

もしMac使ってるなら、https://recurse.chat/試してみて.モデルダウンロードしてチャット始めるだけってくらい簡単だよ.Llama.cppの新しいマルチモーダルサポートも入ったばっか.

Devorlon 2025/05/10 22:16:24

https://docs.openwebui.com/ を見てみてよ.デスクトップのIP使えば、ノートPCからアクセスできるよ(同じネットワークにいるならね).

tough 2025/05/10 19:42:47

それってollamaとそれをサポートするクライアントでよくない? tailscale使って内部ネットワーク組むとマジでうまくいくよ

thenameless7741 2025/05/10 05:50:29

もしHomebrewでLlama.cppをインストールしたら、llama-mtmd-cliはもう含まれてるよ.だから、ただ llama-mtmd-cli <args> って実行するだけでいいんだ.

danielhanchen 2025/05/10 10:14:47

OK、実は -ngl 99 を使う方が良くて、-ngl -1 は良くないね.-1は動くかも動かないかも!

danielhanchen 2025/05/10 06:15:26

あー、それってGPUにオフロードするレイヤー数の省略形だよ :) でもまあ、最高の略語じゃないかもね.

ngxson 2025/05/10 06:51:10

SmolVLMシリーズもサポートしてるよ!ミニサイズだから爆速レスポンスなんだ!リアルタイムホームビデオ監視システムにピッタリだね。これ次の趣味プロジェクトのアイデアの一つだよ!
llama-server -hf ggml-org/SmolVLM-Instruct-GGUF
llama-server -hf ggml-org/SmolVLM-256M-Instruct-GGUF
llama-server -hf ggml-org/SmolVLM-500M-Instruct-GGUF
llama-server -hf ggml-org/SmolVLM2-2.2B-Instruct-GGUF
llama-server -hf ggml-org/SmolVLM2-256M-Video-Instruct-GGUF
llama-server -hf ggml-org/SmolVLM2-500M-Video-Instruct-GGUF

a_e_k 2025/05/10 08:09:59

定期的にpullしてリビルドするたびに、最新のgitコミットであなたのコミットに気づいてたんだ。これ(そしてLlama.cpp全般)でのあなたの全ての作業に感謝してるよ!

thatspartan 2025/05/10 11:50:46

サーバーにmtmd機能を取り込んでくれてありがとう。他のコメントしてくれた人みたいに、期待してコミットをずっと追ってたんだ。

もっとコメントを表示(1)
moffkalast 2025/05/10 12:51:48

うん、でも高速レスポンスの質はどうなの?2.2B以下のやつでも、ちゃんと筋の通った文章出せるの?

simonw 2025/05/10 04:17:46

これまでに見つけた中で、これが一番分かりやすいドキュメントだよ: https://github.com/ggml-org/llama.cpp/tree/master/tools/mtmd

scribu 2025/05/10 11:37:05

アーキテクチャ固有の画像埋め込み前処理を別のライブラリに切り出したのは面白いね。text-onlyのTransformerでhuggingface/tokenizersライブラリができたのと似てるかも。

banana_giraffe 2025/05/10 05:40:37

この機能を使って、最近の旅行写真にGemma3 4bでキーワードとか説明を付けたんだ。すごい上手くいったよ、テキストの入った写真のOCRで概要出してくれたり、文脈から写真の場所を推測したりもできた。自分でホストできるのはめっちゃいいね。

accrual 2025/05/10 05:46:03

それはすごいね。要は、画像のリストをループして、それぞれの画像に対してプロンプトを実行して、結果をどこか(メタデータとかsqliteとか)に保存してるってこと?

banana_giraffe 2025/05/10 05:57:02

うん、そうだよ。それぞれの画像を同じプロンプトでループして、結果をSQLiteに保存してるんだ。検索したり、将来的にWebUIで見せたいなと思って。
コードはこれだよ: https://gist.github.com/Q726kbXuN/
一枚の画像の出力例はこれ: https://imgur.com/a/6jpIbvk
POCコードで汚いけど動くよ。

wisdomseaker 2025/05/10 06:40:42

いいね! フォルダに入ってる全部の写真のサマリーを作るのって、どれくらい難しいと思う?例えば旅行の写真とか、イベント後の写真とか、写真がまとまってる場合。

banana_giraffe 2025/05/10 06:49:46

めっちゃ簡単だよ。各画像の詳細を出して、そのサマリーから全体のサマリーを作るか、全部の画像をまとめて放り込むかできるよ: https://imgur.com/a/1IrCR97
画像が多いと文脈の限界でmap-reduceが必要だろうけど、それも難しくないと思う。

sorenjan 2025/05/10 13:03:00

写真のexifデータから場所を抽出して、プロンプトに含めるのも良いかもね。座標を受け取って都市名を返す逆ジオコーディングのライブラリやサービスがあるから、旅行のサマリーがもっと良くなるはずだよ。

buyucu 2025/05/10 14:35:11

Gemma 4bってこの用途に十分なの?僕は4bじゃダメだと思って、もっと大きいGemmaを色々試してたんだ。

banana_giraffe 2025/05/10 20:30:13

使ってみた感じだと、俺の用途には十分良さそうだったよ。
ネットで見つけた適当な画像をいくつか食わせてみたんだけど、どんな感じのメタデータが出るかは、ここの静的ダンプで見れるよ:https://q726kbxun.github.io/llama_cpp_vision/index.html
完璧ってわけじゃないけど、キーワードとか説明文のおかげで、たくさんの画像の中から探すのには十分役に立ちそう。

simonw 2025/05/10 06:31:57

llama.cppはいろんなプラットフォーム用にコンパイル済みのリリースを提供してるんだ。
今回のリリースに新しいvision機能が入ってるよ:https://github.com/ggml-org/llama.cpp/releases/tag/b5332
macOSだと、llama-b5332-bin-macos-arm64.zipをダウンロードして、動かすにはこれを実行する必要があったんだ。
unzip llama-b5332-bin-macos-arm64.zip
cd build/bin
sudo xattr -rd com.apple.quarantine llama-server llama-mtmd-cli *.dylib
そしたら、対話型ターミナル(3.2GBのモデルダウンロードが必要)をこうやって実行できたよ(参考:https://news.ycombinator.com/item?id=43943370R)
./llama-mtmd-cli -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL -ngl 99
もしくは、localhost 8080のウェブサーバー(UIとAPI付き)をこうやって起動できたよ:
./llama-server -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL -ngl 99
もっと詳しいメモはここに書いたよ:https://simonwillison.net/2025/May/10/llama-cpp-vision/

ngxson 2025/05/10 06:38:50

brewユーザーなら、パッケージインストール時に–HEADを指定できるよ。
こうすれば、brewが自動的に最新のmasterブランチをビルドしてくれるんだ。
そういえば、brewのバージョンはあと数時間で更新されるから、その後は単に“brew upgrade llama.cpp”すれば準備OKになるよ!

danielhanchen 2025/05/10 06:43:15

俺もconvert_hf_to_gguf.py –mmprojには超感動したよ!
これでvisionモデルの量子化がずっと簡単になった!
Llama-serverがvisionをサポートしたのも間違いなく超クールだね。
しばらく待ってたんだ!

ngxson 2025/05/10 06:42:31

そういえば、-nglは今自動で最大値に設定されるから、もう-ngl 99ってつける必要ないよ!
追記:ごめん、これはMetalだけだわ。
CUDAとか他のGPUバックエンドの場合は、まだ手動で-nglを指定する必要があるよ。

danielhanchen 2025/05/10 06:44:42

え、マジで!
じゃあ単に-nglでいいの?
あ、あと、1つのGPUが終わったら次のGPUに(つまり順番に)自動で割り当てることってできるか知ってる?
俺は小さいモデルでも手動で–device CUDA0って設定しなきゃいけないんだけど、たぶん全部のGPUに分散させると通信オーバーヘッドがあるだろうし!

ngxson 2025/05/10 06:47:41

あー、いや、俺が言いたいのは、今は“-ngl N”っていう引数自体を省略できるってことなんだ。
CPPコードの中でデフォルトで-1(伝統的な0じゃなくて)に内部設定されてて、-1は全部GPUにオフロードするって意味だから。
マルチGPUでカスタムレイヤー設定を指定する方法は全然わからないけど、それは興味深いね!

danielhanchen 2025/05/10 06:57:03

え、待って!
じゃあGPUオフロードがデフォルトでオンなの?
おお、最高だね!
今のところPythonスクリプトで”推測”しなきゃいけないんだ。
つまり、全部の.gguf分割ファイルのファイルサイズを合計して、CUDAメモリ使用量を検出して、おおよそいくつのGPUに割り当てるか、つまり–device CUDA0,CUDA1みたいに指定してるんだ。

ngxson 2025/05/10 07:07:50

あーー、ごめん、これを実際に制御してるコードがllama-model.cppの中にあるって忘れてたわ。
間違った情報ごめん。
-nglがデフォルトで最大値に設定されるのは、Metalバックエンドを使ってる場合だけだ。
(llama_model_default_params()の中のコードを見てね)

thenthenthen 2025/05/10 10:06:18

素人向けに何が変わったの? 数ヶ月前にllama.cpp試した時、もう画像説明とかできたけど?

nico 2025/05/10 04:48:38

これ、ollamaでgemma3みたいなマルチモーダルモデル使うのとどう違うの?Macのapple siliconだと何かメリットある?誰か経験談教えてくれると嬉しいな

ngxson 2025/05/10 06:13:46

二つあるよ。
1.llama.cppはggmlエコシステムに統合されてるから、ollamaよりずっと速く最適化できるんだ。pixtral/mistral small 3.1の2D-RoPEとか、すぐ追加されるflash attentionでメモリも少なく済む。
2.ollamaより多くのモデルをサポートしてるよ。pixtralもsmolvlmもollamaはサポートしてないんだ。

nolist_policy 2025/05/10 08:39:11

一方で、ollamaはgemma3でiSWAをサポートしてるけど、llama.cppはしてないんだ。iSWAはkv cacheのサイズを1/6にするんだよ。

vlovich123 2025/05/10 09:18:24

iSWAって何?ネットで全然見つからないんだけど

imtringued 2025/05/10 10:19:32

gemma3には文脈サイズが1024トークンのレイヤーもあれば、フル長のレイヤーもあるんだ。gemmaの技術レポート読む必要があるよ。

nolist_policy 2025/05/10 10:13:11

interleaved sliding window attentionだよ

roger_ 2025/05/10 07:26:52

この変更って、最終的にollamaにも追加されるんじゃないの? ollamaってllama.cppベースだと思ってたんだけど。

diggan 2025/05/10 11:28:46

僕の理解だと(関係者じゃないけど、コード見た感じ)、ollamaは最初は全部llama.cppをランナーとして使ってたみたい。でも新しいモデルのために自分たちでGolangでランナーを書き始めたんだ。だから、ほとんどのモデルはllama.cppだけど、新しいやつは彼らのGolangランナーなんだよ。

danielhanchen 2025/05/10 06:22:18

そういえば - llama.cppのvisionサポート、今回も素晴らしい出来だよ - この調子で頑張ってね!!

ngxson 2025/05/10 06:41:11

Danielさんありがとう!量子化の素晴らしい仕事に拍手だよ、開発中にunslothのMistral Small IQ2_Mを使ってるんだけどめちゃくちゃよく動くんだ!!

もっとコメントを表示(2)
danielhanchen 2025/05/10 06:54:13

へへへ、Mistralのチャットテンプレートを更新しなきゃいけなかったんだよね−あなたのllama.cppのPRは見たよ−tokenizer_config.jsonファイルにchat_templateがないのが紛らわしくて、chat_template.jinjaにあったんだ。chat_templateをtokenizer_config.jsonに移さなきゃいけなかったんだけど、あなたの修正で今は大丈夫になったと思うよ。

ngxson 2025/05/10 07:01:43

へぇー、いい情報だね!誰かがチャットテンプレートを直そうとしてるだろうなって思ってたよ、ははは。でも、GGUF−my−repoスペース経由でユーザーが自由に自分のquantsを作れるようにしてるから、そのソースから生成されるquantsも直さなきゃいけないんだ。

dr_kiszonka 2025/05/10 09:47:59

UI開発でVision機能を活用できるツールって何かあるかな?例えば、趣味でTS/Reactでフロントエンドを開発してるんだけど、VSCodeでローカルやクラウドのLLMを使ってもVision付きでもスクショ撮ってチャットに貼り付けなきゃいけないんだ。理想的には、何らかの停止条件(たとえn回繰り返しだけだとしても)を満たすまで全部自動化したいな。でも、プレビューをスクショしてチャットに貼り付けるだけの拡張機能(キーボードショートカットで起動)でもすごく時間短縮になると思うんだけど。

a_e_k 2025/05/10 08:06:35

これはすごいね。定期的にプルしてリビルドしてたんだけど、コミットノートを見ててさ(たぶんngxsonさんたちが)、最初はVisionモデルをそれぞれ独自のCLIプログラムで追加して、それから一つのCLIプログラムに統合して独立した方を非推奨にして、バグ修正や画像処理の改善も続けてたんだ。サーバーサポートもいつか追加されるんじゃないかって期待してたんだけど、ついに来たね!ありがとう!

gryfft 2025/05/10 04:20:08

また一歩進んだ感じだね。初めてスマホでローカルLLMを動かして、結構まとまった会話ができた時、エッジ推論は少なくとも個人的なアシスタントとか”デジタルワイフ”みたいなビジネスケースで本当に早く離陸するだろうなって想像したんだ。Llama.cppとその派生技術の上に構築される次の波のアプリが、今後3ヶ月で世界経済に何をもたらすか興味津々だよ。

LPisGood 2025/05/10 04:44:36

”3ヶ月での世界経済”なんて話は、最近のAIブームが3年経ってもまだ換金できてない小切手を書いてるようなもんだよ。

ijustlovemath 2025/05/10 04:59:47

AIは集合知の確率分布を学習してるけど、サンプリングだけじゃ根本的な向上はないと思うんだ。高品質なデータがなければ、AIはどんどん訓練コストが高くなって、1980年代のエキスパートシステムに戻っちゃうかも。最近のAIイノベーションは停滞してるけど、分布を活用するツール(セマンティック検索とか)としては素晴らしいよ。これがAGIへのアプローチかは疑問だけどね。

MoonGhost 2025/05/10 05:17:05

それは”確率的なオウム”みたいに単純じゃないよ。定義と公理から始めて、全ての定理は発明して証明できるはずなんだ。モデルをループに入れて、内部的な”思考”と外部フィードバック、生成・取得した新しいデータを使わせるのが進むべき道だと思う。データを定期的に圧縮すれば、またアルゴリズム競争が始まるね。

GTP 2025/05/10 12:51:35

「定義や公理から始めて、すべての定理を発明し証明できる」って考え方は、symbolic AIの前提だったけど、このやり方はもう捨てられちゃったみたいだね。

gryfft 2025/05/10 05:48:01

大きな経済的影響を与えるのに、AGIである必要はないよ。単に、今ある十分な数のCAPTCHAを破れればいいんだ。

LPisGood 2025/05/10 14:21:36

それ、もう今日できてるよ。

yieldcrv 2025/05/10 17:58:04

やっとだ!Open source multimodalは、closed source optionsに比べてあまりにも遅れてて、みんなベンチマークすら試そうとしないんだ。まだ、新しいモデルが出るたびにテキストとか数学のテストばっかやってる。だって、ひどすぎるからね。

behnamoh 2025/05/10 05:07:40

llama.cppって、去年くらいにVisionサポートあったんじゃなかったっけ?

danielhanchen 2025/05/10 05:12:32

そうだよ、ずっとあったんだ。でも”llama-mtmd-cli”って1つの傘下に全部移されたんだよ!

breput 2025/05/10 06:44:56

そうそう、でも今回は汎用化されたから、llama-serverのGUIにも追加できるようになったんだよ。

jacooper 2025/05/10 10:08:43

multimodal LLMを彼らのVulkanバックエンドで実行するのって可能?Vulkanしかサポートしてない4gbのGPUがいっぱい転がってるんだ。

buyucu 2025/05/10 11:06:07

うん、llama.cppはVulkanのサポートがすごくいいよ。

buyucu 2025/05/10 06:30:39

少し前にVisionが削除された時は本当に悲しかったよ。復活してくれて嬉しい。関係者の皆さんに感謝!

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。