ローカル環境でLLM推論ができる「Ollama」を使ってみた!その実力を徹底解説!
「ローカル環境で手軽にLLM推論したい」「機密性の高いデータを保護しつつ高度な言語処理したい」などの悩みを一度でも持たれたことがある方、その悩みを解決するツール「Ollama」についてご説明します!
「Ollama」はllama.cppをバックエンドにしたオープンソースソフトウェア(OSS)です。
しかも、外部サーバーに依存することなく、ローカル環境で高度な言語処理ができるとのこと。つまり、「Ollama」はLLM推論を高速かつユーザーフレンドリーな形で利用できちゃうんです!
そんな「Ollama」について本記事で徹底解説しますので、ぜひ最後までご覧ください!
Ollamaとは?
「Ollama」は、2023年8月にリリースされ、ローカル環境でも高度なLLM推論ができる点が強みのオープンソースのAIツールです。
さまざまな便利機能がリリースされており、2024年12月6日にリリースされたStructured Outputs機能では、JSONスキーマで定義したフォーマットにLLMの出力を制御することが可能になりました。
公式ブログ上では、以下のようなStructed Outputsのユースケースが紹介されているので参考にしてみてください!
- ドキュメントからのデータ解析
- 画像からのデータ抽出
- すべての言語モデルの応答の構造化
- JSONモードよりも高い信頼性と一貫性
Ollamaの特徴
主な特徴は2つあり、
- ローカル環境での動作を重視しており、インターネット接続のない環境でもOK
- llama.cppをベースに設計されているため、ローカル環境でも高速な動作を実現
といったことが可能です!
ローカル環境で利用することで、データ漏えいを防止することはもちろんのこと、インターネット接続に依存せず利用できたり、クラウドサービスの利用コストを削減できたりと多くのメリットを得ることができます。
データのセキュリティを担保したい方、オフライン環境で利用したい方にピッタリなOSSですね!
Ollamaでサポートしている言語モデル
Ollamaは様々な言語モデルに対応しており、ユースケースに応じて最適なモデルを選択することが可能です。
モデル | ユースケース |
---|---|
Llama 3 | 文章生成、要約、校正 |
Llama 2 | チャットボット、対話型AI |
Gemma 2 | 医療や法務のテキスト解析 |
Mistral | 意味解析、感情分析 |
Moondream 2 | 創作、感情に基づく文章生成 |
Neural Chat | カスタマーサポート、音声アシスタント |
Starling | 質問応答、検索エンジン |
Code Llama | コード生成、デバッグ |
LLaVA | 画像キャプション生成、画像認識 |
Solar | 情報検索、FAQ自動回答 |
ローカル環境で、これだけ多くのユースケースに対応できるのはありがたいですね!ぜひ、ご自身のプロジェクトに適したモデル探しの参考にしてみてください!
ライセンス
ライセンス詳細は以下の通りです。
利用用途 | 可否 |
---|---|
商用利用 | ⭕ |
改変 | ⭕ |
配布 | ⭕ |
特許利用 | ⭕ |
私的利用 | ⭕ |
商用利用も可能ですが、利用するモデル自体のライセンスも確認するようにしましょう。
Ollamaの使い方
ここからは実際にOllamaを使っていきます。早速Ollamaのインストールを進めていきましょう!
Ollamaのシステム要件
- OS:macOS 12+, Linux, Windows 10+
- RAM:最低8GB(16GB以上推奨)
- ストレージ:モデルによって異なるが、最低10GB以上の空き容量
1.Ollamaのインストール
公式サイトからインストーラをダウンロードします。
2.インストーラを実行
インストーラをダウンロードし、指示に従ってollamaコマンドがターミナル上で動かせるようになれば導入は完了です!
ollama --version
# ollama version is 0.5.4
本記事では、最新バージョン0.5.4を使っていきます。(※2024年12月26日時点)
Ollamaはアクティブに開発が進められていますので、気になる方はリリースノートを参考にしてみてください!
筆者は導入に5分もかからなかったので、お手軽に環境構築できる点も非常にありがたいですね・・!
Ollamaを使う際の注意点
ここまでOllamaの良い点をあげてきましたが、注意点も確認しておきましょう。
- 長期間使用していない場合、初回応答に時間がかかる
- しばらくOllamaを放置していると、再度利用する際にレスポンスタイムが10秒ほどかかる場合があります。
- GPUのメモリが乗りっぱなしになる
- デフォルトでは「モデルをロードしたままにするタイムアウト設定」がされていて、しばらく(たとえば5分間)操作が無い場合にGPUメモリを解放する仕組みがなされています。GPUメモリの占有が続くので、他の処理でGPUを使いたい場合はリソースを圧迫してしまうことになります。
メモリについての対策として、「アイドル状態(何もしない状態)が 600 秒(10 分)になったら GPU のメモリを解放する」などと追記することがあげられます。
短くしたい場合は、600の部分を60(1分)や180(3分)等に変更することもできるので、GPU乗りっぱなし問題はこれで解決できると思います!
ollama serve --idle-timeout 600
しかし、フラグの書式や単位(秒 or 分)は、使用しているOllamaのバージョンやビルドによって異なる場合があるので、ollama serve –helpコマンドや最新ドキュメントを確認するようにしましょう。
OllamaでLlama-3-ELYZA-JP-8Bを動かしてみた
ここからは実際に、日本語に特化した大規模言語モデル「Llama-3-ELYZA-JP-8B」を動かしてみます!
Llama-3-ELYZA-JP-8Bは、ELYZA社が提供する「ELYZA LLM for JP」シリーズの最新モデルとして、Meta社の「Llama 3」をベースとした80億パラメータの大規模言語モデルです。
80億パラメータの軽量なモデルでありながら、「GPT-3.5 Turbo」や「Claude 3 Haiku」、「Gemini 1.0 Pro」に匹敵すると言われています。
今回使用したいモデルは、Ollamaで標準サポートされていないため、自分で「Modelfile」を作成して、追加していきます。
1.モデルダウンロード
Hugging Faceから「Llama-3-ELYZA-JP-8B-q4_k_m.gguf」をダウンロードします。
参照:https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/blob/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf
2.ファイル作成
Modelfileを作成し、Llama3モデルと同じ内容になるように、以下の設定を記述します。
FROM ./Llama-3-ELYZA-JP-8B-q4_k_m.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
3.モデル作成
以下コマンドを実行して、2で作成したファイルからモデルを作成します。
ollama create elyza:jp8b -f Modelfile
10秒ほどで作成が完了しました!
4.モデル実行
以下コマンドでモデルを実行します。
ollama run elyza:jp8b
5.プロンプト(>>>)入力
モデルを実行すると以下のような入力欄が表示されるので、色々試していきましょう!
> ollama run elyza:jp8b
>>> Send a message (/? for help)
一問一答(Q.歴代で最も興行収入が高い映画は?)
回答(クリックで開きます)
世界の興行収入ランキングトップ10(Box Office Mojo調べ)に基づく情報です。
2023年現在、歴代で最も興行収入が高い映画は「アバター」(2009年)です。
興行収入:27億5600万ドル(約3034億円)
ジェームズ・キャメロン監督作品で、SF大作の金字塔と評されています。3D映像技術を駆使し、壮大な世界観と独特のストーリーが話題になりました。
2021年には、ディズニー映画「スター・ウォーズ/スカイウォーターの夜明け」が興行収入24億ドル超えしてランクインしましたが、「アバター」を超えるには至りませんでした。
一問一答(Q.最初に宇宙へ行った人は誰で、いつ?)
回答(クリックで開きます)
最初に宇宙へ行った人は、ユーリ・ガガリーンというソビエト連邦の飛行士です。彼は1961年4月12日、ソ連の宇宙船「ヴォストーク1号」に搭乗し、高度約200kmの地球の大気圏まで到達しました。
この時、ガガーリンは27歳でした。彼は世界は初の有人宇宙飛行を成功させましたが、その直後、機体の問題で大急ぎで帰還する必要があり、地球の重力に適応する時間もなく、僅か9分間という短い時間で地上に戻りました。
この歴史的事件は「ガガーリン宇宙飛行」と呼ばれ、世界中で大きな話題を呼びました。
アルゴリズム実装(Q.クイックソートをPythonで書いてください)
回答(クリックで開きます)
以下は、Pythonでクイックソートを実装した例です。
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
この関数は、クイックソートの基本的なアルゴリズムに従っています。まず、配列の長さが1以下の場合にはそのまま返します。次に、配列の真ん中の要素をピボットとして選びます。左側の要素はピボットより小さいもの、右側の要素はピボットより大きいものに分けます。最後に、左側と右側の部分を再度クイックソートして、結果を連結します。
この関数を使用するには、以下のように呼び出します。
arr = [5, 2, 8, 3, 1, 6, 4]
arr = quicksort(arr)
print(arr)
自然な文章が返ってきました!!!
速度も充分で、オフラインでここまで出来ちゃうOllama、圧巻です・・・!
他にも、翻訳や要約、プロンプトエンジニアリングなど活用できそうなので、興味のある方はぜひ試してみてください!
まとめ
今回はOllamaでLlama-3-ELYZA-JP-8Bを動かしてみました!実装自体は簡単だったので、ローカルLLMを活用したいというかはまずここから試してみるもの良いのでは?と思いました。
そんなOllamaの特長は以下の内容でしたね!
- 外部サーバーに依存せず、ローカル環境で高度な言語処理が可能
- データのセキュリティを確保しながらLLMを活用可能
- 商用利用可能なライセンス体系
- 豊富な言語モデルに対応し、用途に応じて選択可能
外部サーバーに依存することなく、ローカル環境で高度な言語処理ができるので、活用法次第で自分専用のLLMの作れちゃう気がしました!今後のアップデートも楽しみです!
最後に
いかがだったでしょうか?
株式会社WEELは、自社・業務特化の効果が出るAIプロダクト開発が強みです!
開発実績として、
・新規事業室での「リサーチ」「分析」「事業計画検討」を70%自動化するAIエージェント
・社内お問い合わせの1次回答を自動化するRAG型のチャットボット
・過去事例や最新情報を加味して、10秒で記事のたたき台を作成できるAIプロダクト
・お客様からのメール対応の工数を80%削減したAIメール
・サーバーやAI PCを活用したオンプレでの生成AI活用
・生徒の感情や学習状況を踏まえ、勉強をアシストするAIアシスタント
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。