見出し画像

【ローカル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ベースで作成したエージェントに仕事をさせる、みたいなことがやりたいので、ここから色々試していこうと思います!



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

コメント

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。
AI・データ分析エンジニアとして某メーカーで働いています。 ALifeを勉強中。 雑感や読書感想文、お勉強の記録を投稿していきます。
【ローカルLLM】Windows10でllama-cpp-pythonを動かす|はこやし
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1