ローカルLLMをMacBook Proにインストールしてみた。Open WebUI対応

下部に2024.09.20メモ追記

いつも視聴しているYoutubeでRaspberry Piの4、5にローカルLLM(大規模言語モデル)をインストールするというのがあって、ちょっとやってみるかなと思って観ていたんだけど、Raspberry Piでは8Gのメモリが少ないことや、(やり方があるかもしれないけど)GPUが利用できないことが原因で、実用的ではないようだった。あと、MacBookAirでもやってて、そっちはいけてて、同じく、マシンスペックが要求されるようだったけど、Apple siliconのMacではCPUとGPUが同じメモリを共有しているとかで、色々と都合がいいらしい。

ということで、当初、入れようと思っていたRaspberry Piへの導入はあきらめて、MacBookPro💻に導入することにした。僕のMacBookProは、ひとつ前のモデルだけどディスク以外はフルスペックのM2Maxなので、大丈夫🙆。

あわせて、ゴールデンウィークで時間があるので、ついでにYoutubeではやっていなかったWebUI対応も追加で試してみることにした。(思ったよりスムーズにできて正直半日も作業をやってないけど🤣)

以下が手順

まずは、ローカルPC💻でLLMを実行するツールの「Ollama」をMacにインストール。下の画面の真ん中の「Download↓」ボタンからダウンロードして、ダウンロードしたアプリを起動してインストールを実行する。(インストール画面は無し)

その後、導入できるLLMは以下のページの「Models」にある。それぞれのモデルの説明もあり、実行方法(Macのターミナル用)もコピーできるようになっているので、コピペして実行すれば良い。そのまま、ターミナルのコマンドラインでも利用できるんだけど、WebでのUIとOllamaが連携できるというので、それも入れることにした。ちなみにパラメータ数の多いモデルを入れると数十分ぐらいのダウンロード時間と、実行するのにもかなりのメモリ容量が必要。(「Ollama」の操作については割愛)

Dockerは前からMacに入っていたので、そこにWebUIをインストールする。ターミナルのコマンドラインから以下のコマンドを入れて実行すればよい。

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

実行するとDocker DesktopにWebUIのコンテナが実行中(Running)で表示される。

ブラウザからhttp://localhost:3000へアクセスすると以下のページが表示される。(というか、それより前にユーザ登録をしなきゃいけないんだけど、ローカルだし、適当に忘れない程度のユーザを作成しておく、僕の場合BorderHarry😸)

モデルの選択(Select a model)には事前にOllamaで入れておいた3つのモデルが表示されている。llama3 8B、llama3-70B、command-r-plus 104B-q4_0(Command R+)の3つ。

そして、それぞれについて試してみた。

まずはCommand R+について、ちょっと最初の文字が出力されるまでタイムタグ(1分程度)あったけど、それは全てのモデルで言えることで、最初にモデルをメモリに全ロードするらしい。後からはスラスラと回答を出力した。日本語対応もしているみたいで特に指定しなくても日本語で回答してくれた。回答の内容については、後半部分が怪しい🤨感じがするけど、光市に住んでいながら検証とれない😅

llama3 70Bは最初英語での回答で、しかも内容が完全に怪しかった。日本語で回答を求めると、中国🇨🇳がどうだとか?光市(「こうちょう」になってるし)のことがわかっていないようだった😭

最後にllama 8Bを試すと、軽いだけあってこれが1番速攻で回答が出たけど、わからないということだった。(わからないから速かっただけかも?)

その後もいろいろ試して遊んでみた。今回の3つではCommand R+が1番賢い感じだった。

しかし、100Bクラスをオフラインで持ち運べて、ローカルで利用できるって‼️

この進歩、凄すぎ👀

今後は、RAGやファインチューニングを勉強して、自分の周辺に特化したモデルを利用でできるようになったらいいなぁと思う今日この頃である🧐

(後述、今回使ったCommand R+は浮動小数点を8bitの離散値に量子化しているらしい、量子化してもあんまり精度は変わらないという情報を見たりするんだけど、じゃぁ何が変わるんだと、なんだかよくわからなくなってきた😩。違うとどの程度の出力が違うのか、今度試してみたい。このあたりになると一般人の自分にはキツイ😓領域になるなぁ)

2024.09.20 現状のノウハウをメモ

ローカルLLMを入れてみて半年近く経ったので、いろいろ遊んでみて、今のところのノウハウを掻い摘んで記録しました。

・僕のMacではちょっと重い質問をして考え始めると発熱があって、冷却対策が必要っぽい。MacBook Proを使い始めて2年近くになるけど、十分に満足している。でも、M4出たら物欲が出てきそう😅

・Open WebUIにはRAGの機能があって、いろいろと試すことができる。(チャンクの設定や読み込むファイルを細工してRAGの精度を向上させる方法をいろいろと試してみることができる)

・RAGの精度向上については、そのまま利用してもあんまり期待が薄い、独自で参照データの前処理とチャンク幅の調整などをして効果を高めることが重要で、まだまだお試し中の段階。試す度にいろんなコツを掴めてると思いたい今日この頃である🤓

・RAGについてはlangchainを使っているので、内容はGitHubで公開されており、ソースを見れば何をしているのか一目瞭然。langchainを使ったプログラミングの勉強にもなる。(open-webui/backend/apps/rag/main.py)

Web(apache)のログ解析などで、最新のCVEを調査したい場合などは、LLMモデルのカットオフ日より未来は調べることができないという問題に直面するので、それを解決するには、外部参照するしかない。

・カットオフ日以降の最新情報は外部参照機能(試せてないけど、いろんな検索サイトを選択でき、有料サイトを利用すると精度が高いらしい)を使ってRAG機能で解決できない回答を補足する。

・パラメータ数と量子化については、今のところパラメータ数が多い方が、量子化もビット数が多いほうが、また量子化するより浮動小数点のものの方が精度が高いような気がする。

・Ollamaで利用できるモデルの中には非検閲(uncensored)のLLMモデルもあり、検閲LLMでは確認できない個人情報やセンシティブな内容の検索が可能になる。これは非常に重要で社内などでプライベート利用する場合は、これじゃないと使えないってことだと思う。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA