【M3mac環境】llama.cppを使ったGGUF変換からOllamaで実行までの手順
MacでローカルLLMを実行する機会があったため、手順をまとめます。
この記事を読むと
- MacでOllamaを使ってローカルLLMを動作させられます
- GGUFファイルがないモデルをllama.cppによって変換してOllamaにインストールできます
なお、GGUFファイルへの変換についてすぐに読みたい人はこちらに飛んでください。
マシンスペック
macbook pro M3Max 64GBです。
例えばメモリ16GBで動作するかは未確認です。
ollamaとは
ローカルでLLMを簡単に実行できるツールです。簡単にモデルのダウンロードや推論の実行ができます。
3種類のパターン
OllamaでLLMを動かすには3種類のパターンがあります。上から順に試してみましょう。
【↑簡単】
①ollamaのModelsに公開されているモデルをダウンロードして使う
②huggingfaceに公開されているGGUFファイルを使う
③huggingfaceに公開されているSafetensorsファイルをGGUFファイルに変換して使う
【↓面倒】
①OllamaのModelsに公開されているモデルをダウンロードして使う
最も簡単な方法から試しましょう。
Ollamaのインストール
まずは以下のページからインストーラをダウンロードして実行します。
実行できたらmacの上部のバーにラマのアイコンが表示されます。特にウィンドウは立ち上がりません。
ターミナルを開き、以下のコマンドを打ってみましょう。
ollama --version
インストールできていればバージョンが表示されます。
ollama version is 0.5.1
モデルのダウンロード
次にOllamaのHPのモデルの一覧から好きなモデルを探します。
メタのllama3やマイクロソフトのphi3, グーグルのgemma2など、有名どころは揃っています。
早く使いたくてたまらないと思いますので、今回はgemma2の2bモデルを使ってみます。1.7GBしかなく超軽量なのでダウンロードが早いです。
ollama run gemma:2b
モデルのダウンロードが終わるまで数分待つと、メッセージ入力欄が現れます。
質問する
文字を打ってエンターで送信です。
質問をしてみたところ返答が確認できました。
>>> 日本の首都はどこ?
日本の首都は東京です。
東京は日本の東部に位置し、アジアの東海岸に位置しています。
/bye
またはCntr + d
で入力待機状態が終了します。
>>> /bye
~ %
モデルの確認・変更・削除
ollama list
でインストール済みのモデル一覧が表示されます。私の環境ではgemma:2b と先日インストールしたllama3.3:latest が利用可能です。
~ % ollama list
NAME ID SIZE MODIFIED
gemma:2b b50d6c999e59 1.7 GB 5 minutes ago
llama3.3:latest a6eb4748fd29 42 GB 2 days ago
実行するモデルを変更する場合はモデル名を指定してrunします。
ollama run llama3.3:latest
モデルを削除する場合はモデル名を指定してrmします。
ollama rm gemma:2b
②huggingfaceに公開されているGGUFファイルを使う
OllamaのHPには存在しないモデルを使いたい場合は②の方法を使います。
Ollamaからhuggingface上のファイルを簡単にダウンロードできるようになっているため、操作自体は簡単です。
GGUF形式モデルを探す
モデル名+GGUFで検索すると、有名なモデルであれば大体ヒットします。
公式または有志の方がモデルファイルをGGUF形式に変換してアップロードしてくれています。
日本で有名な方はmmngaさんです。
モデルのダウンロード
Ollamaからhuggingface上のファイルを簡単にダウンロードできるようになっているため、操作自体は非常に簡単です。
今回は日本語LLMのELYZAを使ってみましょう。
これは公式がGGUFファイルを合わせて公開してくれているパターンです。
実行時のコマンドのモデル名のところに、モデルの公開ページからURLをコピーして「https://」をはずしてペーストするだけです。
ollama run huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
なお、右上の「Use this model」をクリックして、Ollamaを選び、コマンドをコピーすることもできます。
ダウンロードが実行されます。
~ % ollama run huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
pulling manifest
pulling 91553c45080b... 100% ▕███████████████████████████████████████████████████████▏ 4.9 GB
pulling 475211637354... 100% ▕███████████████████████████████████████████████████████▏ 7.8 KB
pulling eef4a93c7add... 100% ▕███████████████████████████████████████████████████████▏ 193 B
verifying sha256 digest
writing manifest
success
実行
①と同じようにモデル名を指定してrunします。
ollama run huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
動作することが確認できました。
>>> アメリカでIT産業で有名な都市は?
| IT・コンピューター|知恵袋
「IT・コンピューター」に関する知恵袋の回答です。
IT産業が有名な都市として、アメリカでは以下の都市を挙げることができます。
1. サンフランシスコ(カリフォルニア州):世界に名だたるIT企業、AppleやGoogle、Facebookなどが本社を構えている都市で
、「Silicon Valley」(シリコンバレー)と呼ばれるIT産業の集積地です。
2. ボストン(マサチューセッツ州):ボストンには、ハーバード大学やマサチューセッツ工科大学など、世界有数の名門大学が
立地し、優秀な人材を供給しています。
3. ニューヨーク(ニューヨーク州):金融やメディアの中心として栄えてきた大都市で、IT企業も多くあります。
4. シアトル(ワシントン州):マイクロソフトが本社を置く都市です。
5. オースティン(テキサス州):テキサス大学オースティン校のあるこの都市には、多くのIT企業やスタートアップが集積して
います。
6. ボルチモア(メリーランド州):JHU(ジョンズ・ホプキンズ大学)をはじめとする優秀な研究機関があります。
これらの都市は、有名なIT企業やスタートアップの本社、研究所が集積しているため、世界中から人材や投資が集まっています
。
補足:Modelfileについて
後述のModelfileのテンプレートについて、huggingfaceからダウンロードした際は、GGUFファイル内のデータに基づいてテンプレートを自動で選択してくれるようです。
③huggingfaceに公開されているSafetensorsファイルをGGUFファイルに変換して使う
GGUFファイルが見つからない場合はどうしたら良いでしょうか。
自身の環境でSafetensorsファイルをGGUF形式に変換すれば利用できます。
なおOllamaで利用できるようにするには
- GGUF形式のファイル
- Ollama Modelfile
の2つが必要です。
以下の記事を参考にさせていただきました。ありがとうございます。
手順について、上記の記事と全く同一内容になるのを避けるため、Llama-3-ELYZA-JP-8Bを手元でGGUFに変換してOllamaで動作させてみます。
llama.cppのビルド
llama.cppと言うLLMのライブラリをセットアップします。
任意の作業ディレクトリの中でcloneします。
今回は「llm_pj」というフォルダ内で作業します。
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
cmake -B build
cmake --build build --config Release
なお、他の記事ではビルドの際にmake
を実行すると書いてあるのですが、以下のエラーが出て、Cmakeを使えと指示されます。
Makefile:2: *** The Makefile build is deprecated. Use the CMake build instead. For more details, see https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md. Stop.
参照先の記述にしたがってCmakeを使っています。
cmake -B build
cmake --build build --config Release
Safetensorsファイル(transformerモデル)のダウンロード
GitLFSをインストールしていない場合は、事前にインストールしておきます。
GitLFS(Git Large File Storage)とは、大規模なファイルを扱う際に本体は別サーバーに保管しておき、参照用のファイルのみをレポジトリに保管しておく機能です。
brew install git-lfs
以下のコマンドでファイルをダウンロードします。
時間がかかる上にインジケーターが表示されないので心配になります。
お使いのネットワーク状況によりますが8Bの場合10〜20分程度は見ておいたほうが良いです。
cd ../
mkdir models
cd models
git lfs install
git clone https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B
ダウンロードが完了すると以下のように表示されます。
~/development/llm_pj/models % git clone https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B
Cloning into 'Llama-3-ELYZA-JP-8B'...
remote: Enumerating objects: 36, done.
remote: Counting objects: 100% (33/33), done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 36 (delta 8), reused 0 (delta 0), pack-reused 3 (from 1)
Unpacking objects: 100% (36/36), 2.65 MiB | 3.94 MiB/s, done.
Filtering content: 100% (4/4), 2.95 GiB | 8.57 MiB/s, done.
なお、git lfs install
はGitLFSを有効化するコマンドで、有効化後にgit clone
すると参照用ファイルの情報を元に本体ファイルがダウンロードされます。
GGUFモデルに変換
仮想環境を作成します。
cd ../
python3 -m venv venv
source venv/bin/activate
python -m pip install -r ./llama.cpp/requirements.txt
f16-GGUFモデルに変換します。
python ./llama.cpp/convert_hf_to_gguf.py ./models/Llama-3-ELYZA-JP-8B/ --outtype f16 --outfile ./models/Llama-3-ELYZA-JP-8B-f16.gguf
完了するとGGUFファイルが生成されます。
Ollama Modelfileを作成します
cd models
nano Modelfile_Llama-3-ELYZA-JP-8B-f16.txt
今回は以下の記事を参考にこのように記述します。
FROM ./Llama-3-ELYZA-JP-8B-f16.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
Ctrl + X
でnanoエディタを終了すると、ファイル名の確認が入るので、enterで確定すると保存されます。
Modelfileについての補足
モデルごとに適切なフォーマットで記述する必要があります。
Llama-3-ELYZA-JP-8BはLlama3がベースになっているため、ollama showで既存のモデルファイルを確認して、それを書き換えるようにすると動作するようです。
もし参考になる記述が存在しない場合は、こちらのドキュメントを参照しながら記述する必要があります。
Ollamaのモデルを作成
以下のコマンドを実行します。
仮想環境の中で実行するようにしてください。
ollama create Llama-3-ELYZA-JP-8B-f16.gguf -f Modelfile_Llama-3-ELYZA-JP-8B-f16.txt
実行すると以下のようになります。
(venv) ~/development/llm_pj/models % ollama create Llama-3-ELYZA-JP-8B-f16.gguf -f Modelfile_Llama-3-ELYZA-JP-8B-f16.txt
transferring model data 100%
using existing layer sha256:0645a807993252df622a701d85ac3e42d82ce1c58fe6949ac3f635b24332bd74
using existing layer sha256:8ab4849b038cf0abc5b1c9b8ee1443dca6b93a045c2272180d985126eb40bf6f
creating new layer sha256:c0aac7c7f00d8a81a8ef397cd78664957fbe0e09f87b08bc7afa8d627a8da87f
creating new layer sha256:ba4749188695777c79170aa784d2ff2f13ea121d82b97bfc48cb9aa4add172f0
writing manifest
以下のようにモデルが新たに追加されていることわかります。
(venv) ~/development/llm_pj/models % ollama list
NAME ID SIZE MODIFIED
Llama-3-ELYZA-JP-8B-f16.gguf:latest b936590e0fef 16 GB 17 seconds ago
(以下省略)
Ollamaにインストールできたら、これら3つのファイルは削除しても問題ありません。
実行
実際に実行してみましょう。
(venv) ~/development/llm_pj/models % ollama run Llama-3-ELYZA-JP-8B-f16.gguf:latest
>>> イギリスで有名なお茶は何ですか?
イギリスと言えば紅茶の国です。数多くの種類がありますが、特に有名なのは以下のものです。
1. アールグレイ: bergamotの香りが特徴的なフレーバーティー。
2. イングリッシュブレックファスト: ストレートティーの代表格で、ミルクと砂糖を入れて飲むことが多い。
3. リプトン オレンジペコー: 織物商のサックヴィル・テレスフォーヌスがインドで発見したオレンジフラワーの香りが特徴的。
他にも、フォートナム&メイソンやハンスンなどの有名ブランドから、多くの種類のお茶が販売されています。
最後に
Ollamaを使ってローカルLLMを動かす方法を解説しました。
既存の記事で私が詰まった点を踏まえて記載しているため、参考になれば幸いです。
Discussion