LLMがローカルで動くのか検証してみた

LLM, 生成AI

はじめに

システム開発推進部第1Gの牧野です。
昨今、生成AIが急速に発達し、様々なサービスが登場していますが、それに伴い、利用する上でセキュリティ面やコスト面の課題が生じていると感じました。
そこで今回は、LLMをローカルで動かすことでこれらの課題が解決できるかどうかを検証しました。

LLMをローカルで動かすメリット

LLMをローカルで動かすことには以下のメリットがあると考えています。

  • コスト面の課題解決:
    • 無料でも利用可能ですが、APIを使って生成AIを特定の処理に組み込むと料金が発生します。ローカルで動かせばAPI不要で生成AIを活用できます。
  • セキュリティ面の課題解決:
    • 機密文書を外部の生成AIに読み込ませることができなかったり、社外への情報漏洩が懸念されたりする場合に有効です。
  • 自由度:
    • 公開されていないLLMを自分で自由に扱うことができます。

LLMをローカルで動かす方法

LLMをローカルで起動する基本的な方法は、公開されている学習済みのモデルをローカルにダウンロードし、Pythonのtransformersやtorchといった機械学習系ライブラリを利用して起動します。
調べた結果、以下の手法が主流のようです。

  • llama-cppを利用する。
  • llama-cpp-pythonを利用する。
  • Lmstudioを利用する。

今回はllama-cpp-pythonを利用して検証を進めます。
※なお、Pythonとpip(パッケージ管理システム)がインストールされていることを前提とします。

llama-cpp-pythonを利用してLLMをローカルで動かす

学習済みのLLMをhugging face1からダウンロードします。
今回は、日本語対応であり、比較的新しいモデルであるElyza(Meta社のLlamaをベースにしたLLM)のLlama-3-ELYZA-JP-8Bを使用します。また、llama-cpp-pythonを利用する方法では量子化2されたLLMが必要なため、このモデルの量子化バージョン(.gguf)を使用します。
以下からLlama-3-ELYZA-JP-8B-q4_k_m.ggufをダウンロードします。
https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/tree/main

まずPythonが動く環境を用意します。
任意のディレクトリ(project dir)配下に任意のプロジェクト名(newenvname)を作成します。
Pythonやpipコマンドを使用するときはアクティベートが必要なので使用する前に1度だけ source [newenvname]/bin/activateを実行する必要があります。

次にllama-cpp-pythonが必要なためインストールします。

以下の内容で.pyファイルを作成します。
自分はllm-local.pyとしました。

作成した.pyファイルを実行します。

結果が返ってきました。

うまく使えているようです。
処理時間は40〜90秒ほどで応答が返ってきました。
(質問内容やPCスペック、実行時のメモリ状況によって変わると思いますのでご参考までに。私の使用しているPCはM1 MacBook Proのメモリ16GBです。)

ローカルLLMの使い道

使い方の一例をご紹介します。
私は、LLMに指定したジャンルのおすすめの曲を紹介してもらうことにしました。 ジャンルが毎回変わるようにいくつか用意し、ランダムに指定するようにしています。 今回は、cronでシェルスクリプトを定期実行させ、そのシェルからPythonを実行するため、質問内容と回答を渡すために print(input_text+'\n\n'+assistant_text)としています。
以下ソースコードです。llm-local.pyから適宜修正しました。
recommend-miusic.py

次に作成した.pyをshellから実行させてその出力をダイアログで画面に表示させます。

sample.sh

最後に定期実行させるために作成した.shをcronで実行させるための設定をします。
今回は試しに1分間隔で実行させてみます。

定期実行で動かしてみました。

result.png

いい感じですね!
曲の紹介とその曲に関する情報も簡単に教えてくれました。 観察を続けたところ、同じジャンルでも異なる曲を紹介してくれるので、問題なさそうです。
私は昼休憩後に眠くなることがあり、音楽を聴くことがあります。そのため、昼休憩後の時間帯に設定して実行すれば、活用できそうだと思いました。

まとめ

今回はローカルでLLMを動かし、その使い道を模索しました。作成した便利ツールとしての使い方も良いですが、業務の効率を上げるような使い方ができればさらに有用だと思いました。 より性能の良いLLMをローカルで動かせるようになり、回答の質や処理速度が向上すれば、使用範囲が広がり、コスト面やセキュリティ面の課題が解決に進むと感じました。
また、定期実行でLLMを動かす際、API利用の場合は料金が発生しますが、ローカルで動かすLLMであれば料金が発生しないため、定期実行×ローカルLLMの組み合わせはローカルで動かす利点を最大限に活かせると思います。

参考元

ローカルLLM”Phi-3″をWindows CPUで動かす
LLMをローカル環境で動かすことは貴族の遊びなのか?
LMstudioをローカルマシン上で使ってみる
huggingface elyza/Llama-3-ELYZA-JP-8B-GGUF


  1. hugging faceとはAIモデルやデータセットを共有・利用することを主な目的としたプラットフォームです。 
  2. 量子化とは、機械学習モデル、特に大規模言語モデル(LLM)を効率化するための技術です。量子化によりモデルのサイズを小さくし、計算を高速化することでノートPCのようなデバイスでも実行が可能になります。GGUFは量子化されたモデルを保存・展開するための汎用フォーマットになります。 

この記事を書いた人

牧野拓海
最近書いた記事

LLM, 生成AI