🦙

Ollama + Open WebUI でローカルLLMを手軽に楽しむ

2024/04/30に公開
2

ローカルLLMを手軽に楽しむ

ローカルLLMを手軽に動かせる方法を知ったので紹介します。今まではLLMやPC環境(GPUの有無)に合わせてDocker環境を構築して動かしていました

それが、OllamaOpen WebUIというソフトを組み合わせることで、ChatGPTのように手軽にローカルでLLMを動かすことができます。参考にしたサイトなどは本記事の末尾で紹介します。特にもりしーさんの動画はきっかけになりました(感謝です)。

動かす方法として以下2つを紹介します。

  1. Ollama単体で動かす方法(初心者向け)
  2. Ollama + Open WebUIでGUI付きで動かす方法(Dockerが分かる人向け)

初心者でとりあえずLLMを動かすのにチャレンジしたいという人は、1つ目のOllama単体で動かす方法にトライするのがおすすめです。

Dockerとか普段から使っているという人は、1をとばして2からはじめてもOKです。

OSはMac/Windows/LinuxどれでもOKです。特にApple SiliconのMacだとGPUメモリとか気にしなくてよいので楽です。

Ollama単体で動かす方法

以下のサイトに行ってアプリを落として、サイトの説明どおりに実行すればOKです。

https://ollama.com/

簡単ですね。Macだと、ほんと指示通りにコマンド実行するだけです。

Linuxだと以下コマンドでセットアップできました。

$ curl -fsSL https://ollama.com/install.sh | sh

Windowsでは試せていません(すみません)。

ドキュメントはGitHubを参照しましょう。

https://github.com/ollama/ollama/tree/main/docs

Ollama + Open WebUIでGUI付きで動かす方法

OllamaもOpen WebUIもDockerで動かすのが手軽でよいので、単体でOllamaが入っていたら一旦アンインストールしてください。Linuxでのアンインストール方法はこちらです

続いてDockerをセットアップします。Dockerのセットアップや基本的な使い方は以下の記事を参考にしてください。

https://zenn.dev/mkj/articles/33befbaf38c693

後は、以下コマンドでDockerでOllamaとOpen WebUIをダウンロードして起動します。もし過去にOllamaを起動していたら、最初に以下コマンドで、すでに動いているコンテナを削除しておくと良いです。

$ docker stop $(docker ps -q)
$ docker rm $(docker ps -q -a)

Ollama Docker run

$ docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

NVIDIAのGPUを使う場合は、以下の通り--gpus=allオプションを追加してください。

$ docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Open WebUI Docker run

$ docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

起動したら、以下アドレスにアクセスします。

http://localhost:3000/

最初、以下のような画面が表示されるので、適当なユーザー名とメールアドレスを入力しましょう。これはあくまでローカルでの登録処理でサーバには送信されません。

以下登録後のログイン画面です。某ChatAIアプリにだいぶ似ていますね。

OllamaでダウンロードしたモデルをOpen WebUIから選択できるようになりますので、選択してローカルLLMを楽しみましょう。

別のPCからログインする場合はlocalhostをIPアドレスにおきかえてアクセスすればOKです。

以下動作例です。Linux OSでNVIDIA RTX3060で動かしています。35B(パラメータ数350億)のCommand Rなので遅めですが、ちゃんとローカルで動いています。

https://x.com/karaage0703/status/1785224113692488126

OllamaのDockerでの操作

Dockerをあまり知らない人向けに、DockerでのOllama操作の方法です。

以下のようにdocker exec -itをつけて、Ollamaのコマンドを実行すると、Ollamaを起動して、ターミナルでチャットができます。

$ docker exec -it ollama ollama run llama2

単にモデルをダウンロードしたい場合は、以下のようにollama pullしましょう。

$ docker exec ollama ollama pull llama3
$ docker exec ollama ollama pull phi3
$ docker exec ollama ollama pull mistral
$ docker exec ollama ollama pull gemma:2b
$ docker exec ollama ollama pull gemma:7b
$ docker exec ollama ollama pull command-r
$ docker exec ollama ollama pull gemma2:2b

ダウンロード可能なモデルは以下にならんでいます。

https://ollama.com/library

Tanuki-8Bを動かす

Tanuki-8Bというモデルが話題です(なお、私はTanuki-8Bの開発には直接参加していません。あくまで一般ユーザーとして試していますのでご了承ください)。

https://weblab.t.u-tokyo.ac.jp/2024-08-30/

https://note.com/shi3zblog/n/n0deabd85885b

七誌さんが神モデルを変換してくださいました。

https://x.com/7shi/status/1829628113657143547

以下コマンドでダウンロードできます。

$ docker exec ollama ollama pull 7shi/tanuki-dpo-v1.0:8b-q6_K

爆速で動きます。
https://x.com/karaage0703/status/1830039457355256038

なお、Ollamaでの動作は、公式の推奨の方法ではないためその点は注意ください(性能が落ちる可能性があるとのことです)。

Open WebUIでなく、Ollama単体で動かす場合は、続いて以下コマンドを実行してください。

$ docker exec -it ollama ollama run 7shi/tanuki-dpo-v1.0:8b-q6_K 

以下のようにターミナル上で対話ができます。

=> % docker exec -it ollama ollama run 7shi/tanuki-dpo-v1.0:8b-q6_K
>>> こんにちは
こんにちは!今日はどのようなこ

Tanuki-8Bは最低7.2GBのメモリが必要です。(使用するGPUメモリの計算方法参照)。

以下の環境で動きました

  • Linux(メモリ:32GB, GPU:NVIDIA RTX3060)
  • MacBook Pro (Apple Silicon M2, メモリ:16GB)
  • MacBook Air (Apple Silicon M1, メモリ:8GB)

Raspberry Piでは動きませんでした。

gguf形式のモデルを動かす

自分で変換したり、ネットでダウンロードしたgguf形式のモデルファイルを動かす方法です。

例えばsample.ggufというモデルファイルがあったときの例を書きます。

sample.ggufと同じ場所(ディレクトリ)にModelfileというテキストファイルを作成します。中身は最低限以下を記載ください。他にも色々オプションを記載できますが、最低限動かすだけならファイル名だけでOKです。

FROM ./sample.gguf

続けて、以下でOllamaを起動します。-v $PWD:/ollamaオプションで今いるディレクトリをコンテナ内の/ollamaディレクトリにマウントしています。

$ docker run -d -v $PWD:/ollama -p 11434:11434 --name ollama ollama/ollama

正しくモデルファイルが置かれているか確認します。以下コマンドでコンテナにログインします。

$ docker exec -it ollama /bin/bash

コンテナ内でファイルを確認します。Modelfilesample.gguf/ollama内にあればOKです。

root@xxx:/# cd /ollama 
root@xxx:/ollama# ls
Modelfile  sample.gguf

コンテナから出て、以下コマンドを実行して、Ollamaで新しいモデルを使えるようにします。

$ docker exec ollama ollama create test -f /ollama/Modelfile

エラーがでず最後にsuccessと表示されたらOKです。

モデルが追加されたかは、以下コマンド実行することで確認できます。追加したtestが追加されていたらOKです。

$ docker exec ollama ollama list

以下コマンドを実行すると、モデルを動かすことができます。

$ docker exec -it ollama ollama run test

モデルを削除するときは、以下コマンドを実行しましょう。

$ docker exec ollama ollama rm test

Raspberry Pi(ラズパイ)で動かす

ラズパイでも動くらしいです。まだ試してないのでそのうちに。
動きました。以下記事参照ください。

https://zenn.dev/karaage0703/articles/5fd411a9358898

使用するGPUメモリの計算方法

https://www.substratus.ai/blog/calculating-gpu-memory-for-llm

Pythonで動かす

PythonでもOllamaを使うことができます。以下公式ライブラリを使用します。

https://github.com/ollama/ollama-python

以下参考記事です。

https://qiita.com/7shi/items/be2ca03a654f4d26ba5f

まとめ

ローカルでLLMを手軽に動かす方法を紹介しました。ローカルでAIといえばNVIDIA一択だったのですが、動かすだけならMacの方が手軽に大きなパラメータのモデルを動かせるといった逆転現象がいつの間にかおきてて面白いですね。

色々なLLMがどんどん出てきて楽しいですね。

参考リンク

https://www.youtube.com/watch?v=8Pcs-P48fyg

https://note.com/schroneko/n/n8b1a5bbc740b

https://note.com/jap4ai/n/n632a2270b084

https://zenn.dev/seya/articles/03399b9e3d465e

https://zenn.dev/tos_kamiya/articles/9d8ce89bb933b1

https://nikkie-ftnext.hatenablog.com/entry/llm-quantize-first-step-cyberagent-calm2-7b-chat

https://uepon.hatenadiary.com/entry/2024/08/02/120526

https://qiita.com/7shi/items/ae0da373184b82d53fcc

https://stmind.hatenablog.com/entry/2024/08/19/160515

https://uepon.hatenadiary.com/entry/2024/08/22/141325

https://uepon.hatenadiary.com/entry/2024/08/26/141528

https://uepon.hatenadiary.com/entry/2024/09/10/153249

https://zenn.dev/ajapa/articles/fc1205d4bcbfe7

https://zenn.dev/koichiro_mori/scraps/ed27232985089a

https://zenn.dev/hellorusk/books/e56548029b391f

関連記事

https://zenn.dev/karaage0703/articles/2b753b4dc26471

変更履歴

  • 2024/09/01 Tanuki-8Bについて追記
  • 2024/08/20 使用するGPUメモリの計算方法を追記
  • 2024/05/01 ラズパイでの動かし方のリンクを追記

Discussion

Kaito SugimotoKaito Sugimoto

ちょっとした Tips ですが、Open WebUI Docker run の際に、WEBUI_AUTH という環境変数を False にしておくことで、最初のユーザー新規登録画面をスキップできるようになりました。

docker run -d -p 3000:8080 --env WEBUI_AUTH=False --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main