見出し画像

ローカルLLMの基礎の基礎

Note初投稿。

最近やっと時間が取れるようになったのもあって、復習も兼ねて、座学的なことを中心にローカルLLMの基礎を勉強してみた。

ローカルLLMはKaggleのPrompt Recoveryのコンペで少し遊んでたときに使ってただけなので、体系的に座学ベースではまとまってなかったので、やってよかったです!!

ローカルLLMってなに??

"ローカル"の名の通り、インターネットを介さずに自分の環境で動作させることができるLLM。

ローカルLLMの代表的なのを挙げるとGemma(Google)、Lamma 3(Meta)、Glok(X)、Phi3(Microsoft)、Mixtral-8x22bなどがある。

一方で、ChatGPTやGeminiやClaude3.5などのLLMは、インターネットを通してでなければ使えないので、ローカルLLMではない。

ローカルLLMの何がいいの?メリットは?

ローカルLLMのメリットはこんな感じ。

データプライバシィの保護

1番のメリットなんじゃないだろうか。
LLMでRAGを構築するときなど、個人情報や機密情報をLLMのinputに含めたいことは多いと思う。
個人情報や機密情報をインターネットを通して送ってるのはどう考えてもセキュリティの要件に違反するだろうし、いくらOpenAIやGoogleを信用していたとしても、インターネットを介して個人情報や企業の機密情報を外部の会社のwebサービスに送るのは"やばい"。これを解消できるのが一番大きいと思う。

オフラインで使える

プライバシーやセキュリティ・安全を理由にインターネットを使えない環境でLLMを使いたい需要は結構ある(医療現場や製造業など)。AI以外でも言えることだが、不要にインターネット回線を通してデータを送受信させるのは、セキュリティを考えても好まれるものではないし、エコではない。

低マシンスペックで動くモデルがたくさんある

これもうれしい。
2Bレベルの小型モデルだとGPUなしのIOTデバイスでも使える。
将来的にはオフラインの家電などにちょっとした会話botを搭載できたりする。
当然、精度は下がるだろうが、はっきりいって家電レベルの会話botに超ハイスペックなLLMはオーバースペックになる。

要件に合わせたLLMをカスタマイズしやすい

ファインチューニングや自作データでの学習が自由にできる。
モデルのアルゴリズム自体もカスタマイズできる。
ChatGPTやGeminiは倫理的な制約でガチガチに固められてるが、ローカルLLMなら倫理的な制約を自分で調整できるのもでかい。
日本語専用モデルやちょっとエロ系の会話botもローカルLLMなら作れる。

低遅延・高速な処理

インターネットに繋がなくていいので、インターネット帯域による遅延がない。LLMと会話するようなリアルタイム音声会話などを実現させやすい。

じゃあデメリットは何?

性能はChatGPT4oやGemini1.5やCalude3に劣る

一部のモデルを除けば、ローカルLLMはパラメータ数が圧倒的に少ない。パラメータ数=性能といっても過言ではないLLMにとって、まぁこれは当然だと言える。

とはいえ、最近ではLlama3-70BやCommand R+,Nemotron-4-340Bなど強力なローカルLLMも出てきている。

だけど、ChatGPT4oを一部のベンチマークでは上回るような、Nemotron-4-340Bなんて動かそうと思うと、Nvidiaの最高サーバー用GPU H100(1つ500万円)が8台必要だったりと、現実的ではなかったりする。

まぁそもそも実際の用途を考えた時に、ローカルLLMにChatGPT4oやGemini1.5レベルのパラメータ数が必要かと思うと、微妙で、もし必要ならば、普通にOpenAIのAPIなどを利用した方がかなり安い。


実際のローカルLLMが使えそうなビジネス事例は?

医療分野

プライバシー保護が非常に重要なことが多い医療分野でオフラインで使えるローカルLLMは最適だと言える。
患者の診断データを安全に分析し、診断支援を行うシステムが開発されている。
ある病院では、ローカルLLMの導入により、データ処理時間を40%削減し、診断の正確性を15%向上させたという報告もある。

製造業

機械の故障予測や生産ラインの最適化とか。
リアルタイムでのデータ分析により、効率的な生産管理が実現されている。
ある製造業者はローカルLLMを用いることで、生産効率を20%向上させ、機械のダウンタイムを30%削減することができた。

https://www.sciencedirect.com/science/article/abs/pii/S0736584520302428


企業用RAG

外に出せないデータでRAGが作れる。
社内文書や個人情報検索できるようになるのは大きいよね。
というより、機密情報や個人情報検索できないRAGなんて、ほとんど意味ないからそういう意味ではちゃんとデータプライバシー保護やセキュリティ考えるならば、外部の会社のAPI叩いてRAGなんて採用できない。

IOTデバイス

オフラインでも使えるChatbotつき家電とかも作れそう。
2B以下のモデルならCPUだけでも動く。
まだ2Bレベルだと使ってみた感じだと、性能に不安があるので、今後のさらなる軽量化に期待。


最近流行ってるローカルLLMは何?

最新の主要なローカルLLMはこんな感じ。

Llama 3

リリース:24/04/18 ~ 
開発会社:Meta
オープンソース:True
モデル:
meta-llama/Meta-Llama-3-8B
meta-llama/Meta-Llama-3-8B-Instruct
meta-llama/Meta-Llama-3-70B
meta-llama/Meta-Llama-3-70B-Instruct

  • 80億(8B)パラメータと700億(60B)パラメータの2つの異なるモデルが用意されている

  • 400Bモデルも公開予定

  • 80Bモデルは一般的なタスク用。多様なデータソースからの情報を取得するような用途で使える

  • 70Bモデルはより専門的な計算要求や複雑な言語モデリングタスクに特化している

Gemma-2

リリース:24/06/27 ~ 
開発会社:Google
オープンソース:True
モデル:
google/gemma-2-9b
google/gemma-2-27b

  • Gemma 1よりもパフォーマンスが高く、推論の効率も高く、安全性が大幅に向上

  • 商用に適した Gemma licenseの下で利用可能

  • 現在はGoogleAI Studioで使える


Phi-3

リリース:24/04/05 ~ 
開発会社:Microsoft
オープンソース:True
コンテキストサイズ:28Kと4K
モデル:
microsoft/Phi-3-small-128k-instruct
microsoft/Phi-3-small-8k-instruct
microsoft/Phi-3-medium-128k-instruct
microsoft/Phi-3-medium-4k-instruct
microsoft/Phi-3-vision-128k-instruct

  • 「Phi-3-small」「Phi-3-medium」は、同じサイズの言語モデルだけでなく、はるかに大きい言語モデルよりも優れたパフォーマンスを発揮する

  • 「Phi-3」は高品質の学習データのみを使って学習されている

  • 「Phi-3-vision」のみ言語と視覚機能を備えたマルチモーダルモデル

  • Microsoft Responsible AI標準に従って開発され、厳格な安全性測定と評価、レッドチーミング、敏感な使用レビュー、セキュリティガイダンスの遵守を経て、これらのモデルがマイクロソフトの標準とベストプラクティスに沿って開発されている。

Phi3-ベンチマーク

OpenELM

リリース:24/04/24 ~ 
開発会社:Apple
オープンソース:True
モデル:
apple/OpenELM-270M
apple/OpenELM-450M
apple/OpenELM-1_1B
apple/OpenELM-3B
apple/OpenELM-270M-Instruct
apple/OpenELM-450M-Instruct
apple/OpenELM-1_1B-Instruct
apple/OpenELM-3B-Instruct

  • iPhoneやiPadなどのAppleデバイスで動作することを目的とした軽量モデル

  • AppleのAシリーズチップの性能を最大限活かせるモデルとなっている

  • モバイルデバイスでの使用を前提として設計されており、バッテリー効率が良い


Mixtral-8x22B

リリース:24/04/17 ~ 
開発会社:mixtral
オープンソース:True
モデル:
mistralai/Mixtral-8x22B-v0.1
mistralai/Mixtral-8x22B-Instruct-v0.1

  • 22Bモデルを8つ組み合わせたMixture of Expertsモデルで、複数のモデルを内部に入れて入力によって専門家を変えて計算するというモデル

Quan

リリース:24/06/07 ~ 
開発会社:アリババ
オープンソース:True
コンテキストサイズ:128k
モデル:
Qwen/Qwen2-72B-Instruct
Qwen/Qwen2-72B
Qwen/Qwen2-57B-A14B-Instruct
Qwen/Qwen2-57B-A14B
Qwen/Qwen2-7B-Instruct
Qwen/Qwen2-7B
Qwen/Qwen2-1.5B-Instruct
Qwen/Qwen2-1.5B
Qwen/Qwen2-0.5B-Instruct
Qwen/Qwen2-0.5B

0.5Bから72Bまで5つのサイズのパラメータを持つ一連の大規模な言語モデル。
0.5Bや1Bなどの小さいモデルはエッジAIなどで、72Bなどの大きいモデルはクラウド上のAPIなどとして高精度が必要なサービスで、といったふうに使い分けができる。

  • 0.5Bから72Bまで5つのサイズのパラメータを持つ一連の大規模な言語モデル。

  • 0.5Bや1Bなどの小さいモデルはエッジAIなどで、72Bなどの大きいモデルはクラウド上のAPIなどとして高精度が必要なサービスで、といったふうに使い分けができる。


Nemotron-4-340B

リリース:24/06/14 ~ 
開発会社:Nvidia
オープンソース:True
コンテキストサイズ:
モデル:
nvidia/Nemotron-4-340B-Instruct

  • 340Bと他のローカルLLMと比べるとかなりパラメータ数が大きい

  • 枯渇してきているLLM用学習データを新たに作成するAIトレーニング用合成データ生成モデル。


Command R+

リリース:24/04/4 ~ 
開発会社:Cohere(コーヒア)
オープンソース:True
コンテキストサイズ:128kトークン
モデル:
CohereForAI/c4ai-command-r-plus

  • 104Bの特大LLMモデル

  • RAG やツールなどの長いコンテキストのタスクや大規模なプロダクションワークロード向けに最適化された生成言語モデル

  • 英語,フランス語,スペイン語,イタリア語,ドイツ語,ポルトガル語,日本語,韓国語,アラビア語,中国語の10言語に対応


日本語対応ローカルLLMは何がある?

日本初の日本語対応ローカルLLMはこんな感じ。

Llama-3-ELYZA-JP

リリース:24/06/26 ~ 
開発会社:ELYZA
オープンソース:True
コンテキストサイズ:
モデル:
  ・Llama-3-ELYZA-JP-70B(非公開)
  ・Llama-3-ELYZA-JP-8B(オープンソースで公開)

  • 東京大学・松尾研究室から生まれたAIスタートアップELYZAが開発したモデル。

  • Llama 3をベースとした日本語対応モデル

  • Llama 3では日本語を理解して生成することが少しはできたが日本語に関係する知識が不足していたり、日本語での生成を促しても英語や韓国語で生成してしまう問題があった

  • Llama-3-ELYZA-JP-70Bでは日本語の生成能力に関するベンチマーク評価で「GPT-4」を上回る性能を達成

  • Llama-3-ELYZA-JP-8Bは80億パラメータと軽量ながらも「GPT-3.5 Turbo」に匹敵する日本語性能を達成

Ninja-V1 Vecteus-v1

リリース:24/05/01 ~ 
開発会社:LocalNovelLLM-project
オープンソース:True
コンテキストサイズ:
モデル:
Local-Novel-LLM-project/Ninja-v1
Local-Novel-LLM-project/Ninja-v1-128k
Local-Novel-LLM-project/Ninja-v1-NSFW
Local-Novel-LLM-project/Ninja-v1-NSFW-128k
・Local-Novel-LLM-project/Vecteus-v1

  • Vecteus-v1はMistral-7B-v0.1をファインチューニングして作られた7Bサイズのモデル

  • Ninja-V1 Vecteus-v1の両方ともLocalNovelLLM-projectさんが作ったモデル

RakutenAI-7B-Instruct

リリース:24/05/01 ~ 
開発会社:楽天
オープンソース:True
コンテキストサイズ:
モデル:
    Rakuten/RakutenAI-7B-instruct
    ・
Rakuten/RakutenAI-7B-chat
    ・
Rakuten/RakutenAI-7B

  • 楽天グループが制作したモデル。

  • 「Mistral-7B-v0.1」をベースに作られた70Bのモデル


ローカルLLMを動かすために使えるライブラリは?

Llama.cpp

  • Georgi Gerganov さんが作った PC の CPU だけで LLM が動くプラットフォーム

  • llama.cpp は Python で書かれた LLaMA を GGML(C/C++)で「書き直す」プロジェクトとして始まった

  • Llama, Llama2 が動くというだけでなく Bloom, StableLM などいくつかの LLM がサポートされている


Ollama

  • MacやLInuxで動くOllamaとはローカルでLLMを動かすことができるアプリケーション

  • Llama 3、Mistral、Gemma など、様々なオープンソースモデルをサポート

  • コマンドラインインターフェース(CLI)とREST APIを提供

  • 8B程度のモデルならM1 Macで動かせる


終わりに

今回は勉強も兼ねて、ローカルLLMの基礎の基礎ということで、
・ローカルLLMとは何か
・ローカルLLMのメリット・デメリット
・ローカルLLMが使えそうなビジネス事例
・最近流行ってるローカルLLMはなに
・日本語対応のローカルLLM
・ローカルLLMを使うためのツール
についてまとめた。

なんとなく全体像は掴めたと思う。
次はOllama実際に触ってみたいと思う。

今日はここまで!


参考


https://gist.github.com/kyo-takano/c662c1bfa1e7fe440511b11f62521a7e

この記事が気に入ったらサポートをしてみませんか?