llamafile をWindowsやラズパイ5で使ってみる(LLM,SLM,LMM)


llamafile を使って言語モデル(LLM/SLM/LMM)を実行してみましょう。

LLM  :大規模言語モデル
SLM  :小規模言語モデル
LMM :大規模マルチモーダルモデル

今まで言語モデルを使う場合、llama.cpp やllama-cpp-python はプラットフォームに合わせてビルド・インストールしていましたが、llamafile はそういう作業が必要ありません。Java のようにプラットフォームを気にせずにバイナリをダウンロードすれば、そのまま使えます。

また、llamafileは様々な言語モデルをオフラインで実行するために作られたものです。

プラットフォームはLinux(Ubuntu,Debian)、Windows、Mac、FreeBSD、OpenBSD、NetBSD に対応しています。

これはllama.cpp にCosmopolitan LibC を適応したもので、単体で言語モデルを呼び出して使ったり、モデルとllamafileを統合することでローカルでもそのまま推論実行したりできます。

これは「大規模言語モデルを単一ファイルで実行する」という風に表現されています。
ちょっとイメージしづらいところがありますが、使ってみれば「ああ、そいうこと!」と納得できます。

さらにどうしたことか、llamafile はllama.cpp単体 より高速だったりします。

やってみましょう。


Windows(AMD64)

こういう環境で試してみました。

win11 Pro 22H2
Core(TM) i5-4590T CPU @ 2.00GHz
RAM 8.00 GB

llamafile公式を参照します。

まずllamafile から言語モデルを読み込んで推論実行してみます(Using llamafile with external weights)。

コマンドプロンプトターミナルを開いて実行します(PowerShellターミナルでexeを実行する場合、先頭に.\を置きます)。

適当なフォルダーを作ってそこで作業します。

llamafile-0.6をダウンロードして、Windows なのでllamafile.exe にリネームしておきます(30MB程度の実行ファイルです)。

LLMファイルはmistral-7b-instruct-v0.1 の4bit量子化版をダウンロードしてmistral.ggufにリネームしておきます。

で、実行(mオプションで外部からモデルを読んできます)。

>llamafile.exe -m mistral.gguf

 

 

 

 

 

 

 

 

 

ブラウザが開いてllama.cppの画面になりました。

自動でブラウザが開かない場合はhttp://127.0.0.1:8080/にアクセスしてみてください。

 

 

 

 

 

 

 

 

 

 

 

 

 

では、次に言語モデルとllamafileを統合したものを使ってみます。

<モデル名>.llamafile という名称になっています。

llamafile公式のページからダウンロードできます。ただWindows の場合4GBの壁があるようで、このサイズ以下のファイルに限定されます。4GB以上のllamafileについては下記のラズパイ5の項を参照してください。

LLaVA-1.5という大規模マルチモーダルモデル(LMM)の4bit量子化版のllamafileがギリ使えますね。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ダウンロードして、Windowsなので拡張子にexeを付けて実行してみます。

 

 

 

 

 

 

 

 

 

ブラウザーが起動して入力画面になります。

プロンプトは「Where is the heighest mountain in Japan ?」でやってみます。

Core(TM) i5-4590T CPU @ 2.00GHzのマシンで20秒くらいで結果が返ってきました。

 

 

 

 

 

 

 

LLaVA-1.5というモデルは画像と言語のマルチモーダルなので、画像も認識できます。

例えばモナリザを読み込んでそれが何なのか教えてもらいます。

 

 

 

 

 

 

画像をアップロードして、プロンプトを「この絵は何ですか?」としてみます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

少々ひ弱なWindowsマシンなので1分強かかりましたが、回答はくれました(ちょっとホラが入ってます、画家はダ・ヴィンチです、Dominikos Theotokopoulosってエル・グレコのことのようです)。使っているのが量子化モデルなので精度は若干落ちているかも…..です。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

昨今GPT-4omni という超多彩なマルチモーダルモデルが発表されています。使ってみたいですね。
ただGPT-4oは大きすぎるので、オンプレミスで使うなら複数LLMやSLMをLangChain などで使うのが現実的?

 

注1:モデルによっては対応できるものとそうでないものがあります。

例えばPhi-3-mini-4K-instructは、q4.gguf /fp16.ggufどちらの場合も

そのままllamafile.exeで実行しようとすると。unknown model architectureでロード失敗のエラーになりました。

 

 

 

 

fp16.ggufのllamafile版(Phi-3-mini-4k-instruct.F16.llamafile)は大きすぎて実行さえできませんでした。

 

注2:llamafileのバージョン0.7が公開されています。

llamafile v0.7

0.6の倍くらい高速で、おまけに英語の質問に日本語で応答が返ってきました…..?

 

注3:llamafileはllama.cppをベースにしているのでCPU を使うことが眼目ですが、もしNVIDIA 製のGPU を積んでいるなら -ngl 9999 オプションを付ければGPU オフロード(offloading)を有効にできます。つまり、推論演算が高速化されます。

Llamafileは、Apple Silicon上のApple Metal、Linux上のNvidia cuBLAS、およびWindows上のネイティブGPUサポートを含む幅広いGPUサポートを提供しています。最適なパフォーマンスを得るために、GPUサポートは動的にリンクされます。LMMで画像を認識させるとファンが高速に回転し始めて結構うるさいです。またMacの場合、Apple Silicon がサポートされいるので、ちょっと前のM1チップでも快適に動作するそうです。

 

 


ラズパイ5(ARM64)

OSイメージはRaspberry Pi OS Desktop (64-bit)Bookworm……Debianです。
Ubuntu Desktop 24.04 LTS (64-bit)でも可。

 

基本的にはllamafile公式の通りです(Using llamafile with external weights)。

作業フォルダーを作成してllamafile version 0.6とmistral をダウンロードして実行するだけ。

 

 

 

 

 

 

Linuxなので実行権を与えて実行します。

入力画面が開きます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

プロンプト「Where is the heighest mountain in Japan ?」を入力して実行、結果はだいたい20秒くらいで返ってきました。

 

 

 

 

 

 

 

 

 

 

 

ラズパイ5(8GB)ではWindows のような4GBの壁がないので、大きなllamafileでも実行はできます、一応。

llamafile公式SLMモデルPhi-3-mini-4k-instruct(7.67 GB)の場合

プロンプト:”Where is the capital in Japan ?”をやってみました。

40秒くらいから回答を返し始めますが、トークン生成はすごく貧弱です。回答を完結するのに3分くらいかかっています。

 

 

 

 

 

 

 

 

 


● SSH で外部から接続している場合、サーバーを公開しておきます

例えばllava-v1.5-7b-q4.llamafileの場合….

外部ブラウザーから

http://<ラズパイのIPアドレス> :8080

 

● xxxxx.llamafile はmオプションで自前以外の言語モデルを読み込んで使うことができます

例えばrocket-3b.Q5_K_M.llamafileという比較的小規模のllamafile を使ってみます。

Windowsでやってみます。

モナリザをアップロードしてみました。

 

 

 

 

 

これは普通の言語モデルなのでこの画像を認識できません。

こんな感じ。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mオプションでLMM(llava-v1.5-7b-Q4_K.gguf)を使って推論実行してみます。

llamafileのhelpにあるように、mmprojオプションでllava-v1.5-7b-mmproj-Q4_0.ggufというファイルが必要です。

rocket-3b.Q5_K_M.llamafile.exe -m llava-v1.5-7b-Q4_K.gguf --mmproj llava-v1.5-7b-mmproj-Q4_0.gguf

LMMを読んでrocket-3b.Q5_K_M.llamafile.exeでも画像を認識できています。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ただ残念ながらちょっとウソついてます。

Llama: This is a painting of the famous artist Leonardo da Vinci’s “Mona Lisa.” The image is an oil portrait painted in black and white, featuring a woman with long hair staring directly at the viewer. She is sitting in front of a landscape, which includes trees and water, creating a serene atmosphere surrounding her.

ラマ:これは有名な芸術家レオナルド・ダ・ヴィンチの「モナ・リザ」の絵です。 この画像は白黒で描かれた油絵で、見る者をまっすぐに見つめる長い髪の女性を特徴としています。 彼女は木々や水のある風景の前に座っており、彼女を取り巻く穏やかな雰囲気を作り出しています。

 

 

回答を返し始めるのに

Windows で1分半、ラズパイ5で3分弱くらいでした。

 

 


Appendix

LLaVA 1.5  [3.97 GB]
curl -L -o llava15.llamafile https://huggingface.co/Mozilla/llava-v1.5-7b-llamafile/resolve/main/llava-v1.5-7b-q4.llamafile
TinyLlama-1.1B [2.05 GB]
curl -L -o tinyllama.llamafile https://huggingface.co/Mozilla/TinyLlama-1.1B-Chat-v1.0-llamafile/resolve/main/TinyLlama-1.1B-Chat-v1.0.F16.llamafile
Mistral-7B-Instruct [3.85 GB]
curl -L -o mistral7binstruct.llamafile https://huggingface.co/Mozilla/Mistral-7B-Instruct-v0.2-llamafile/resolve/main/mistral-7b-instruct-v0.2.Q4_0.llamafile
Phi-3-mini-4k-instruct [7.67 GB]
curl -L -o phi3miniinstruct.llamafile https://huggingface.co/Mozilla/Phi-3-mini-4k-instruct-llamafile/resolve/main/Phi-3-mini-4k-instruct.F16.llamafile
WizardCoder-Python-13B [7.33 GB]
curl -L -o wizardcoder13b.llamafile https://huggingface.co/jartine/wizardcoder-13b-python/resolve/main/wizardcoder-python-13b.llamafile
LLaMA-3-Instruct-8B [5.37 GB]
curl -L -o llama3instruct8b.llamafile https://huggingface.co/Mozilla/Meta-Llama-3-8B-Instruct-llamafile/resolve/main/Meta-Llama-3-8B-Instruct.Q5_K_M.llamafile
Rocket-3B [1.89 GB]
curl -L -o rocket3b.llamafile https://huggingface.co/Mozilla/rocket-3B-llamafile/resolve/main/rocket-3b.Q5_K_M.llamafile
———— Text Embedding Models —————-
E5-Mistral-7B-Instruct [5.16 GB]
https://huggingface.co/Mozilla/e5-mistral-7b-instruct/resolve/main/e5-mistral-7b-instruct-Q5_K_M.llamafile
mxbai-embed-large-v1 [0.7 GB]
https://huggingface.co/Mozilla/mxbai-embed-large-v1-llamafile/resolve/main/mxbai-embed-large-v1-f16.llamafile

 


Appendix2

llamafile HELP

 

 

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*