![見出し画像](https://assets.st-note.com/production/uploads/images/138374182/rectangle_large_type_2_86af3e8ec9a9499e648cdd22948a1b79.png?width=1200)
【ローカル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ベースで作成したエージェントに仕事をさせる、みたいなことがやりたいので、ここから色々試していこうと思います!