これまでOllama
を使用して比較的容易にローカルLLMモデル
を使用することをやってきました。ここまで来ると未対応のLLMモデル
を使用したくなってきます(よね😊)。
そこで、Ollama
のREADMEファイルを読んでいったところ
Import GGUF
という項目がありました。
GGUF
とは LLMモデル
をllamma.cpp
から使用できるようにしたバイナリ形式のファイルになります。現在はこのファイル形式で使用できる処理系も増えてきています。HuggingfaceでもGGUF形式
のファイルが公開されていて、それをOllama
からロードしてすることができるようになります。デフォルトで対応したLLMモデル
は少ないのですが、GGUF形式
まで含めると数多くのモデルが使用できます。
参考
自分も話題になっていたrinna
、楽天
、サイバーエージェント
のモデルを使ってみたいと思っていたので、今回はこの使い方を含めてまとめてみたいと思います。
GGUF形式
のLLMモデル
の準備
まずは今回使用していくGGUF形式
のLLMモデル
を探していくことになります。Huggingfaceから探すのが良いです。注意点としてはすべてのLLMモデル
がGGUF形式
で公開されているわけではないので、そのあたりは気をつけましょう。公式でなくても形式変換を行っている方もいらっしゃるので、そちらを使用するのもいいでしょう。今回は多くのLLMモデル
をGGUF形式
に変換して公開されているmomongaさんのGGUF形式のファイルを称させていただこうと思います。ありがとうございます🙏
今回はChat機能を持つ以下の3つのLLMモデルをを使ってみたいと思います。
- mmnga/rinna-youri-7b-chat-gguf(https://huggingface.co/mmnga/rinna-youri-7b-chat-gguf)
- mmnga/RakutenAI-7B-chat-gguf(https://huggingface.co/mmnga/RakutenAI-7B-chat-gguf)
- mmnga/cyberagent-calm2-7b-chat-gguf(https://huggingface.co/mmnga/cyberagent-calm2-7b-chat-gguf)
準備と言ってもGGUF形式
のファイルのダウンロードして、Docker
のコンテナから参照できるフォルダへのコピーとなります。
上記のリンクを開き、モデルのページの【Files and Versions】をクリックし、該当するモデルのリストにある【↓】ボタンをクリックしてモデルのダウンロードを行います。モデルファイルのファイルはサイズが大きいので注意してください。
これでGGUF形式
のLLMモデル
をダウンロードできました。これで準備はOKです。ダウンロードしたファイルはDocker起動コマンドでマウント指定するフォルダに移動しておきましょう。
例えば、以下のようにDockerコンテナを起動した場合には-vで指定したフォルダに格納します。
Ubuntu等の場合は以下のように起動している場合には~/ollama
ディレクトリに格納します。
$ docker run -d --gpus=all -v ~/ollama:/ollama -p 11434:11434 --name ollama ollama/ollama
Windowsでは以下のように起動するとC:\ollama
フォルダに格納します。
PS> docker run -d -v /c/ollama:/ollama -p 11434:11434 --name ollama ollama/ollama
以降はUbuntu
で使用した例を記述していきますが、Windows側の作業フォルダが違うだけなので適宜読み替えてもらえればと思います。
DockerコンテナからダウンロードしたGGUF形式のLLMモデルの確認
ではDocker
のOllamaコンテナ
を起動して事前の状態を確認をします。
# コンテナの起動 $ docker start ollama # ダウンロードしたモデルの確認() $ docker exec -it ollama ls /ollama # 現在のモデルの状態(元の状態) $ docker exec -it ollama ollama list NAME ID SIZE MODIFIED granite-code:8b 998bce918de0 4.6 GB 2 weeks ago codegemma:latest 0c96700aaada 5.0 GB 2 weeks ago codellama:latest 8fdf8f752f6e 3.8 GB 2 weeks ago gemma2:latest ff02c3702f32 5.4 GB 2 weeks ago llama3.1:latest 91ab477bec9d 4.7 GB 2 weeks ago
ちゃんとダウンロードしたファイルが確認できています。
設定ファイル(Modelfile)の作成
GGUFファイル
はollama create
コマンドを使用し、設定ファイルを使うことで導入ができます。この設定ファイルをModelfileといいます。-f
オプションでファイル名(パスも含めて)の指定を行うことが可能です。
このファイルはカスタマイズできる様になっていますが、今回はオリジナルのモデルとするためにfromのエントリを作成するだけにしたいと思います。ファイルに以下の様な1行を書き込みます。
最も簡単なモデルファイルの例
form 【パス付きのモデルファイル名】
今回はModelfile
をモデルと同じパスに作成します。(/ollma/
ディレクトリに作成)
Modelfile_rinna
from /ollama/rinna-youri-7b-chat-gguf
Modelfile_Rakuten
from /ollama/RakutenAI-7B-chat-gguf
Modelfile_CA
from /ollama/cyberagent-calm2-7b-chat-gguf
モデルファイルのダウンロードと、modelfileの作成ができれは準備完了です。
GGUFファイルからモデルの取り込み
GGUFファイル
からのモデルの取り込みはollama create
コマンドで行います。起動は以下のように行います。
使用時のモデルはわかりやすい名前をつけておくとよいでしょう。
$ docker exec -it ollama ollama create 【使用時のモデル名】 -f 【パス付きのModelfile名】
# rinna-youri-7b-chat-gguf $ docker exec -it ollama ollama create rinna-youri-7b-chat -f /ollama/Modelfile_rinna # RakutenAI-7B-chat-gguf $ docker exec -it ollama ollama create RakutenAI-7B-chat -f /ollama/Modelfile_Rakuten # cyberagent-calm2-7b-chat-gguf $ docker exec -it ollama ollama create cyberagent-7b-chat -f /ollama/Modelfile_CA
実行の様子
モデルの状況
モデルを実行する
GGUF形式
のLLMモデル
の取り込みも終わったので実行させてみたいと思います。チャット形式なので、プロンプトは
- 「おはようございます」
- 「今日は曇っています。なにをするといいでしょうか?」
と入力してみます。
rinna-youri-7b-chat-gguf
# rinna-youri-7b-chat-gguf $ docker exec -it ollama ollama run rinna-youri-7b-chat
2つともはうまく答えてくれませんでした😢プロンプトの書き方などが悪いのでしょうか?
RakutenAI-7B-chat-gguf
# RakutenAI-7B-chat-gguf $ docker exec -it ollama ollama run RakutenAI-7B-chat
こちらは「おはようございます渥美長兵衛です」という番組を紹介してくれました。(そんな番組は存在しない)これだけ長く返答してくれるのは嬉しいのですが、あまりにも大々的なハルシネーションをしてくれているので、評価が難しいです。文体がWikipediaっぽい感じがしますね。
cyberagent-calm2-7b-chat-gguf
# cyberagent-calm2-7b-chat-gguf $ docker exec -it ollama ollama run cyberagent-7b-chat
1つ目には、世間話という体で答えてくれましたが、2つ目はうまく答えてくれませんでした。
おわりに
今回使用したLLM
の評価はちょっと微妙なところもありましたが、本来やりたかったOllama
に対応していないLLMモデル
をGGUF形式モデル
からインポートするという目的は達成できました。この仕組みを使うことでOllma
で使用できるLLMモデル
数も増え、いろいろな実験ができるようになります。また、このModelfile
の使用はGGUF形式
の変換だけではなく、プロンプトなどのカスタマイズをすることができるなどの、既存モデルのカスタマイズにも使用する事ができるようです。例えば、キャラ付けをするといったパラメータも用意されています。
新しいLLMを使うことで見えてくることや、得意不得意が見えるのも楽しい実験かなと思います。(良い結果ばかりではないのでそこも味わうというのがいいと思います)