見出し画像

【ローカルLLM】Windows10でllama-cpp-pythonを動かす

はじめに


ローカルLLMを動かすためにWindowsにllama.cppを導入しましたが、普段の開発に使っているPython環境で扱えるよう、llama.cppのPythonバインドであるllama-cpp-pythonを導入して動かしてみようと思います。

公式Githubはこちらです。
https://github.com/abetlen/llama-cpp-python

以下、私の環境になります。

  • OS:Windows10 64bit

  • CPU:AMD Ryzen 5 3600

  • GPU:GeForce RTX 3060

  • CUDA Toolkit : 12.4.99

  • Visual Studio Build Tools 2022 : 17.9.6

  • Python : 3.11.0b4

GPUもしっかり活用していきたいので、対応させておきます。llama.cpp同様、GPUを有効化するためには別途の手順が必要なようです。

では、はじめていきます!


CPU版のインストール


llama-cpp-python自体はお馴染みpipでインストールできるようです。

コマンドプロンプトで下記を実行するだけです。便利!

pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu

以前は自分の環境でビルドされるため、環境を整えておく必要があったのですが、最近、事前にビルドされたものを直接インストールすることもできるようになったみたいです。

自分でビルドする場合は以下のコマンドを実行します。

pip install llama-cpp-python

こちらの方法では、インストール時にC言語のコンパイルが行われるので、WindowsではVisual StudioかMinGWが必要とのこと。私の環境ではVisual Studioを導入していて、特に問題なくインストールできました。

Visual Studioは下記からダウンロード・インストールすればOKです。Communityバージョンで良いと思います。
https://visualstudio.microsoft.com/ja/downloads/

Visual Studioは、Visual Studio Build Toolsを入れています。おそらく私のやり方が悪かったのだと思いますが、(普通の?)Visual StudioではCmakeが上手く動きませんでした。

まぁ、そもそも何が違うのかもよくわかってないのですが…

GPU対応(CUDA)でインストール


CUDA対応版も、ビルド済みのものを配布してくれていますので、それをpipでインストールすればOKです。

下記コマンドを実行します。

pip install llama-cpp-python   --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/<cuda-version>

cuda-versionは自分の環境に合わせて以下のように入力します。

cu121: CUDA 12.1
cu122: CUDA 12.2
cu123: CUDA 12.3

例えば、CUDA 12.1 のwheelをインストールするなら、

pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu121

です。

非常に便利でありがたいのですが、私の環境のCUDA12.4はまだ対応されていないようです…悲しい。

ということで、自分でビルドします。と言ってもそこまで大変な作業ではなく、下記コマンドで環境変数を設定して、

set FORCE_CMAKE = 1
set CMAKE_ARGS = -DLLAMA_CUDA=ON

下記でビルドとインストールします。

pip install llama-cpp-python --upgrade --force-reinstall --no-cache-dir

CPUだけのバージョンをすでにインストールしている場合は、`force-reinstall`で完全にインストールしなおします。

動作確認


ではPython上でllama.cppを動かします。今回は、SakanaAIのEvoLLM-JP-v1-7Bを使ってみます。

このモデルは、日本のAIスタートアップのSakanaAIにより、遺伝的アルゴリズムによるモデルマージという斬新な手法によって構築されたモデルで、7Bモデルでありながら70Bモデル相当の能力があるとか。

例によって、量子化モデルを使います。Hugging Faceから4bit量子化モデルのSakanaAI-EvoLLM-JP-v1-7B-q4_K_M.ggufをダウンロードして、適当なディレクトリに配置します。

そして、下記のPythonコードを実行します。

from llama_cpp import Llama
llm = Llama(model_path=".models/SakanaAI-EvoLLM-JP-v1-7B-q4_K_M.gguf", n_gpu_layers=-1, n_ctx=512)

prompt="日本で一番高い山は?"
prompt="Q: "+prompt+" A: "

output = llm(prompt,max_tokens=256, stop=["Q:", "\n"], echo=True)

print(output["choices"][0]["text"])

実行結果がコチラ。

:
llama_print_timings:        load time =     133.65 ms
llama_print_timings:      sample time =       0.78 ms /     7 runs   (    0.11 ms per token,  8962.87 tokens per second)
llama_print_timings: prompt eval time =     133.61 ms /    17 tokens (    7.86 ms per token,   127.24 tokens per second)
llama_print_timings:        eval time =     110.54 ms /     6 runs   (   18.42 ms per token,    54.28 tokens per second)
llama_print_timings:       total time =     261.16 ms /    23 tokens

Q: 日本で一番高い山は? A: 富士山です。

動きました!なかなか早いです。EvoLLMくんはなかなか端的な回答を繰り出してきました。いい感じ。

最後に


これで、PythonからローカルLLMを実行できるようになりました!ローカルLLMベースで作成したエージェントに仕事をさせる、みたいなことがやりたいので、ここから色々試していこうと思います!



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