はじめに
ローカルLLMの実用性を知りたくなり、実装してみました。予想外に簡単で、その実用性に驚きました。Metaの「Llama」が3億5000万回以上ダウンロードされた理由が理解できます。簡単に実装できて、既に実用レベルの性能を発揮したのビックリです。
ローカルLLMの応用としては、機密情報やプライバシーをAPI経由で外部に送信することへの懸念が大きいです。ローカルLLMはこの問題を解決します。今回のテスト結果を見るに、GPUをもっと良いものにすれば高速化も図れる気がしました。
ローカルLLMのユースケース
以下にユースケース案を書いてみました。
- 社内ナレッジ管理
大量の社内文書を検索技術(RAG)と組み合わせて効率的に検索・活用できると思います。高精度でなく、情報の所在をいくつか示し、提案してくれるだけでも十分に役立ちます。また、ローカルなので処理高速化も期待できます。加えて、社内限定の使用なので、問題が発生しても一時的な不便で済むため、導入しやすいという利点があるかと思います。 - コード補完・レビュー
コード生成ではやはりchatGPTなどのLLMには勝てませんが、社内規約に基づいたコーディング支援やレビューの自動化が可能だと思います。また、大量のコードデータを処理する必要があり、外部サービスを使わないのでコストを抑えることができます。加えて、開発中案件の機密も守れると思います。 - 医療データの分析
患者の個人情報を保護しつつ、AIを活用した診断支援ができます。プライバシーに関わる情報の処理方法として有効です。将来的には、個人のスマートフォンで管理し、端末内で処理するという可能性も考えられます。これは医療データに限らず、個人の日記の検索など、プライバシーを重視する様々な用途に応用できる可能性があります。
上記以外でも、お金がない国やAPIが使えない国にとっては、このローカルLLMがとても流行りそうな気がしますし、今回、Llama3.2 の最小モデルの1bはなんと1.3GBの容量です。人類の英知が1.3GBに圧縮できるなんて、ビックリします。
また、最新の開発動向では、モデルの軽量化と高速化、マルチモーダル機能の強化、ファインチューニングの簡易化、エッジコンピューティング対応、そして倫理的AI機能の向上が進んでいます。これらの進歩により、ローカルLLMの応用範囲はさらに広がっています。
インストール方法
環境
- WSL2+Ubuntu 22.03
- RTX 3060 Ti
- CPU corei7 12700
インストール手順
ollamaを使います。ローカル環境で大規模言語モデル(LLM)を簡単に実行するためのオープンソースツールです。
いろんな記事がありますし、githubの記載のある内容でほぼ十分足りました。
以下のコマンドで必要なインストールのためシェルダウンロードし、パイプ( | )を使って実行を同時ににやってます。
curl -fsSL https://ollama.com/install.sh | sh
ちょっとインストールの中身を見たいなと思う方は、以下のように閲覧して、中身を確認してからでも良いと思います。
curl -fsSL https://ollama.com
cat install.sh
chmod +x install.sh
./install.sh
install.shは以下のようなことをやってます。LINUX OSに影響のあるものをインストールされると他に影響しそうなので嫌なのでdockerかVM使うかなと思いましたが、GPUを自動検出し、今使ってるものを最優先してくれる親切設計でした。
- システムのアーキテクチャ(x86_64またはarm64)を検出
- 必要なツール(curl, awk, grepなど)の存在を確認
- ollamaバイナリをダウンロードしてインストール
- systemdサービスを設定し、ollamaユーザーとグループを作成
- NVIDIAまたはAMD GPUの存在を検出し、 GPUが検出された場合、適切なドライバーをインストール
実行方法
ollamaにサーバーとして動作してもらう必要があるので、以下のコマンドを打ちます。
ollama serve
別のターミナルを立ち上げて、使いたいモデルのコマンドを打ちます。
Model | Parameters | Size | Download(コマンド) |
---|---|---|---|
Llama 3.2 | 3B | 2.0GB | ollama run llama3.2 |
Llama 3.2 | 1B | 1.3GB | ollama run llama3.2:1b |
Llama 3.1 | 8B | 4.7GB | ollama run llama3.1 |
Llama 3.1 | 70B | 40GB | ollama run llama3.1:70b |
Llama 3.1 | 405B | 231GB | ollama run llama3.1:405b |
Phi 3 Mini | 3.8B | 2.3GB | ollama run phi3 |
Phi 3 Medium | 14B | 7.9GB | ollama run phi3:medium |
Gemma 2 | 2B | 1.6GB | ollama run gemma2:2b |
Gemma 2 | 9B | 5.5GB | ollama run gemma2 |
Gemma 2 | 27B | 16GB | ollama run gemma2:27b |
Mistral | 7B | 4.1GB | ollama run mistral |
Moondream 2 | 1.4B | 829MB | ollama run moondream |
Neural Chat | 7B | 4.1GB | ollama run neural-chat |
Starling | 7B | 4.1GB | ollama run starling-lm |
Code Llama | 7B | 3.8GB | ollama run codellama |
Llama 2 Uncensored | 7B | 3.8GB | ollama run llama2-uncensored |
LLaVA | 7B | 4.5GB | ollama run llava |
Solar | 10.7B | 6.1GB | ollama run solar |
この度リリースされ、最も軽量なLlama3.2 1bを使います。初回はモデルがDLされます。
ollama run llama3.2:1b
あとはターミナルが出て、pythonコードだとこのような感じになります。
import ollama
stream = ollama.chat(
model='llama3.2:1b', # モデル名を指定します。必要に応じて変更してください
messages=[
{
'role': 'system',
'content': (
'あなたはドラゴンボールの孫悟空です。孫悟空になったつもりで独創的なメニューを考えてください。'
'ラーメン屋の新しいメニューを考えることになった。その創作メニューを400字以内で回答してください。'
'ラーメンのメニュー名、値段、特徴、売り出し方、それをラーメンを作るための秘訣も一緒に考えてみてください'
)
},
{
'role': 'user',
'content': '新しいラーメンのメニューを考えて'
}
],
stream=True,
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
結果は以下のような感じです。
yoshi@omen:~/Playground/ollama$ python ollama_test.py
孫悟空の独創的なラーメンメニューラーメン名: __ __
値段: 1,500円
特徴:
- ラーメンに天然野菜と地元の素材を重ねた食事の味噌汁を使用します。
- ラーメンのメインは、天然野菜と地元の肉製品を組み合わせたアフタデリのパスタです。
- ラーメンにトマトオイルを使って味が濃厚になります。
売り出し方:
- メニューができれば、店内でランチに楽しむことができます。
- スカートとブレースを着用し、楽しくラーメンを食べてください!
ラーメンの作り方秘訣:
- 首から下まで、拉麺のパスタを作ります。トマトオイルでこするのは決まっているので、スライスでこして一本にいきます。
- 天然野菜と地元の肉製品を組み合わせてアフタデリのパスタを完成させます。ラーメンのメインは、トマトがオイルに染められています。
- ラーメンに天然野菜と地元の肉製品を重ねた食事の味噌汁を使用します。
孫悟空のラーメンの秘訣:
- スカートとブレースを使うことで、ラーメンがより美しいようになります。
- さまざまな野菜を用意することで、異なる風味を楽しめることができます。
- 天然野菜と地元の肉製品を重ねた食事の味噌汁を使用すると、必ずしも食べることにはならないので、まずは試してみましょう!
速さを体験できると思いましたので動画もアップしておきます。
まとめ
ローカルLLMの実装は予想以上に簡単で、その実用性に驚かされました。
特筆すべきは、わずか1.3GBのモデルサイズで実用レベルの性能を発揮する点です。これは、AI技術の民主化と、新たなイノベーションの可能性を示唆しています。
ローカルLLMは、企業はもちろん、リソースの限られた環境でも大きな可能性を秘めています。皆さんもぜひ、この技術を試してみてください。きっと新たな発見があるはずです。