🍣

普通のローカル大規模言語モデル入門以前

2024/04/29に公開

この文章の目的

この文章はプログラマ以外の人にも読んで欲しいです。

  • ChatGPTや大規模言語モデルについて聞いたり使ったことはある
  • ChatGPTの業務利用が出来るか検討したが、機密情報を扱う事やコスト面から断念した
  • その後の大規模言語モデル界隈について、すごく驚く人や難しそうな事を言う人がいっぱい居て怖い

みたいな状況にある人が、手元のPC内に完全無料でChatGPTのような物を作ること(これをローカル大規模言語モデル、と呼びます)について分かったつもりになったり、あるいはローカル大規模言語モデルについて興味が出てきたときにググるべき単語を知る事が出来るようになって欲しい、と思って書きました。

ざっと読み飛ばすなら10分程度で現状を知れるようにしつつ、プログラマ向けの記載は折り畳みにしているので必要な人は折り畳みも見て下さい。

なぜローカル大規模言語モデルなのか

以下ローカル大規模言語モデルをローカルLLMと省略します。
去年(というか2022年後半から)はChatGPTの登場によって、「ともかく大量の文章データを食わせたら賢い文章応答botが作れる」という状況になりました。
( https://www.nvidia.com/ja-jp/glossary/large-language-models/ )

そしてChatGPTに追いつき追い越すため、各社が研究開発を行なっています。
その結果として「ちょっと良い家庭用PC」程度のスペックであれば十分な応答速度と性能を持つモデルが出てくるようになりました。(2023年はこれらの競争が激化した年でした)

ChatGPTのようなWebサービスを使う場合は機密情報の取り扱いや、あるいは為替レートに影響を受ける毎月の支払い、あるいは見えないところでモデルの性能が劣化したり質問内容に規制が出ることがあります。

こういった影響を考えなくて良い、そして個人あるいは会社が手元のPCで自由に使える大規模言語モデル環境に需要があります。これがローカルLLMです。

なぜ今なのか

Meta(旧Facebook)社が大量の学習データを使いトレーニングしたLlama3という最新の大規模言語モデルをつい最近の 2024.4.19 に公開しました。 ( https://llama.meta.com/llama3/ )
現時点で8Bと70Bという2種類のモデルが公開されていて、前者は10-20万円程度のゲーミングPCでも動く軽量なモデルにも関わらず、前の世代のLlama2の重いモデルよりも性能が良い、とされています。(後者はより性能が良いですが、やや勇気が必要な価格帯のPCが必要です)

また、多くの実用的なシチュエーションで皆様が試したであろうChatGPT3.5(無料で試せるモデル)よりもLlama3:8Bは優れた結果 を残します。

なので1年前にちょっと無料のChatGPTを試して「あんまり思ったより賢くなくて使えないよねえ…仕事で使うにはセキュリティも危ないしねえ…」と言う感想を持った人も今からローカルLLMに入門すると当時より賢いモデルをセキュリティ的にも安全に使う事が出来るタイミングになっています。

プログラマ向け:モデルのファイルサイズから大雑把なハードウェア要求性能を推定する

もの凄く大雑把にまとめると、モデルのファイルサイズ以上のグラフィックメモリを積んだPCであれば動く、と考えてください。

たとえばLlama3:8Bのモデルは4GB程度なので6-8GB程度のグラフィックメモリを積んだミドルレンジのGeforceGPUで動くと思って下さい。

また、Llama3:70Bのモデルは40GB程度なので、Geforce RTX3090(24GB)を2枚、あるいはApple Silicon搭載Macならメモリ64GB以上のモデルが必要そうだな、と思って下さい。

開発環境の整備

ローカルLLMは様々なモデルが各社から出ていて、それぞれ実行環境や環境構築が異なるため、それらを透過的に一括で扱うOllamaというソフトウェアが最近の人気です。

正直なところ、変な有料noteなどを参照するよりこちらが一番親切でおすすめです。ターミナルでの作業も多少はありますが、1-2時間程度で環境がセットアップできます。

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

上の記事内で様々な環境の選択肢が提示されています。僕のおすすめ環境は記事内にある通り

  • Ollama(モデルの読み込み、推論)
  • Llama3:8B (モデル)
  • OpenWebUI(ChatGPTっぽいUI環境)

で環境を構築することです。

この記事の通りに設定すると、例えば同一のLAN環境にある別のPCからもOpenWebUI経由でChatGPTのように扱えます。

これの何が嬉しいのかというと、例えば私物のゲーミングPC上にこの手順でローカルLLM環境を構築しておくと、テレワーク中の業務用のPCからChatGPTのような使い心地で外部へのデータ送信も無いままセキュリティ面も安心なまま使える 、という事があります。

あるいは、オフィス内にゲーミングPCを1台置いておいて、Ollama+OpenWebUI環境を構築しておいて、社員の方に「 ChatGPT的なものが使いたい場合はLAN内のPCからこのURLにアクセスしてください。このURL内での問い合わせは機密情報も扱えます 」とアナウンスして利用を促す事も出来ます。

プログラマ向け:LAN内で別PCに構築したOllama環境を使うには

基本的に上記の記事通りに設定すれば、インストールしたPCのLAN内のIPアドレス(192.168.x.xx的なやつ)にアクセスすることで、他のLAN内のPCやスマホからでもアクセス出来ます。
例: http://192.168.0.10:3000/
また、ここからアカウントを登録した場合、「管理者の承認が必要です」という表示になることがありますが、これは管理者アカウント(多くの場合インストールしたPC)で http://127.0.0.1:3000/admin
にアクセスして他のユーザを承認して下さい。

プログラマ向け:インターネット越しで自宅のPCに構築したOllama+OpenWebUI環境を使うには

ngrokというソフトウェアを経由することで、あなたが想像したとおりの使い方が出来ます。
ただし、セキュリティ面は当然気を付ける必要があります。
たとえばOpenWebUIを置いたDocker内に余分なデータを置かない、ngrokもbasic認証を掛ける、などあなたが必要と思う対策をしましょう。

プログラマ向け:Ollamaの他の選択肢

LM Studio https://lmstudio.ai/ もOllamaと並んで候補に上がるローカルのLLM環境です。
ここではユーザフレンドリーなUIと、非エンジニアに対するdefaultの環境の観点からOllamaを選定しました。
参考文献:
https://github.com/LiteObject/ollama-vs-lmstudio

Llama3を実際にプログラミングで使った所感

M1Max(64GB)モデルのMacでLlama3:70Bを使ってPythonのちょっとしたPoCを作ってみたところ、さすがに応答がゆっくりですがChatGPT4.0と同じくらいの性能があるように感じました。

  • 基本的に英語の方が賢いので英語で質問する
  • 冒頭で「You are seniour Python app developer.」などの役割指定を明確にする
  • どうしても日本語の返答がほしければ返答がきたあとに日本語に訳して欲しい、とお願いする

などがコツかな、と思いました。このあたりは ChatGPTと似たような傾向 ですね。

また、Ollama自体がWebAPIサーバ機能を持っているので、例えばUnityなどの外部アプリからhttpのpostで返事を受け取る、ということも簡単に出来て便利です。

その他資料

Llama3:8Bも絶対に日本語で答えて欲しい

以下の文章をチャット開始時に与えてから続けて下さい。

When you answer any question,
you must exactly and strictly use Japanese,
Any info from the document must be translated corectly.
None of other languages are accepted.

あなたが回答するとき、絶対に日本語で答えて下さい。
提示するドキュメントは日本語に翻訳してください。他の言語は受け付けません。

日本語で答えてもらった例
日本語で答えてもらった例

あるいは日本語向け Llama 3 8B https://huggingface.co/alfredplpl/Llama-3-8B-Instruct-Ja というモデルも公開されているので、これを試すことも出来ると思います。

OpenWebUIで便利プロンプトや画像認識を使いたい

便利なプロンプト情報や画像認識などのタスクの例が出てきたときは、その人が 使っているモデルが何か を確認してください。
このドキュメントでたびたび登場するLlama3:8Bは、例えば日本の観光地情報などは詳しくなかったりするので、モデルによって得意不得意があったり、出来ないこともあるということを覚えておいて下さい。

小説やストーリーを書くのはどうするの?

こちらがより特化した内容になっていると思います。
https://w.atwiki.jp/localmlhub/pages/13.html

もっと具体的な使い方の例を知りたい

本屋さんに行くとChatGPT活用の本がビビるくらいいっぱい出ているので、それを買ってプロンプトの例を学ぶのが良いかもしれません。ChatGPTのプロンプト例はほとんどの場合、今回構築した環境でも応用可能です。

ただ、エクセルファイルを解析する、などについては僕は試していないので用途によっては応用できないこともあるかもしれません。

他のモデルを使ったりRAGを使って追加学習させたい

僕も詳しくないので頑張ります…

Discussion