catch-img

【Llama2】 Windows CPUでのllama-cpp-pythonの使い方 | ローカル環境

この記事では、Windows CPUのローカル環境を使ってLlama-cpp-pythonによるテキスト生成をする方法(推論)について紹介しています。


目次[非表示]

  1. 1.Llama2とは
  2. 2.Windowsのローカル環境Llama2を動かす(llama-cpp-python)
  3. 3.Llama 2 のモデル一覧
  4. 4.実行環境
  5. 5.WSL・Ubuntuのインストール
  6. 6.Dockerのリポジトリを設定する
  7. 7.Dockerをインストールする
  8. 8.ユーザーをDockerグループに追加
  9. 9.モデルのダウンロード
  10. 10.Dockerイメージのビルドとコンテナ起動
  11. 11.llama-cpp-pythonのモデル設定
  12. 12.llama-cpp-pythonでテキスト生成
    1. 12.1.プロンプトの実行
    2. 12.2.生成結果
    3. 12.3.日本語翻訳
  13. 13.生成AI・LLMならGPUクラウド
  14. 14.まとめ


Llama2とは

Llama2(ラマツー)とは、Facebookを運営するMeta社が開発した言語生成AI(LLM)で、OpenAI社のChatGPTに匹敵する性能を持っています。


Llama2の特徴としては、軽量モデルで高性能、そして無料で使えるオープンソースであるため、開発者にとって扱いやすいモデルになっています。

llama2


Llama2の詳細については、以下の記事で解説しています。


  Llama2とは?使い方・日本語性能・商用利用について解説 | 初心者ガイド この記事では、Llama2について幅広く解説しています。Llama2の性能や安全性、商用利用、日本語対応、様々な環境での使い方などに触れています。 業界最安級GPUクラウド | GPUSOROBAN


Windowsのローカル環境Llama2を動かす(llama-cpp-python)

llama-cpp-pythonは、Llama.cppをPythonで扱えるようにしたバインディングです。

Llama.cppはもともとMacBookでLlamaを実行することを目指して開発されたランタイムですが、Windowsでも動かすことができます。


Windowsの環境では主にCPUを利用して、4bit量子化されたLlama2モデルを実行することが可能です。

CPUでモデルを動かす場合、テキスト生成にかなりの時間がかかりますので、基本的にGPUを推奨しています。


Llama.cppは、C言語で書かれていますが、llama-cpp-pythonはPythonで動かすことができます。

この記事では、llama-cpp-pythonについて解説しています。


Llama.cppについて詳しく知りたい方は下記の記事をご覧ください。


  【Llama2】Winodws CPUでのLlama.cppの使い方 この記事では、Windows環境のCPUを使ってLlama.cppによるテキスト生成をする方法(推論)について紹介しています。 業界最安級GPUクラウド | GPUSOROBAN


Llama 2 のモデル一覧

「Llama.cpp」を利用するには、「Llama 2」モデルをGGML形式に変換する必要があります。HuggingFaceには、変換済みのモデルが公開されていますので、これを使用します。


Llama.cppの量子化モデルは、2bit~8bitまでたくさんのバリエーションがありますが、大半のモデルは低品質になりますので推奨されていません。


HiggingFaceで推奨されているモデルは以下の通りです。
量子化メソッドの[Q4_K_M]、[Q5_K_S]、[Q5_K_M]が推奨されています。


model_id

メモリ(RAM)の使用量※

ストレージの使用量

量子化メソッド

量子化bit

llama-2-7b-chat.Q4_K_M.gguf

6.58 GB

4.08GB

Q4_K_M

4bit

llama-2-7b-chat.Q5_K_S.gguf

7.15 GB

4.65GB

Q5_K_S

5bit

llama-2-7b-chat.Q5_K_M.gguf

7.28 GB

4.78GB

Q5_K_M

5bit

llama-2-13b-chat.Q4_K_M.gguf

10.37 GB

7.87 GB

Q4_K_M

4bit

llama-2-13b-chat.Q5_K_S.gguf

11.47 GB

8.97 GB

Q5_K_S

5bit

llama-2-13b-chat.Q5_K_M.gguf

11.73 GB

9.23 GB

Q5_K_M

5bit

llama-2-70b-chat.Q4_K_M.gguf

43.92 GB

41.42 GB

Q4_K_M

4bit

llama-2-70b-chat.Q5_K_S.gguf

33.07 GB

30.57 GB

Q5_K_S

5bit

llama-2-70b-chat.Q5_K_M.gguf

51.25 GB

48.75 GB

Q5_K_M

5bit


※メモリ(RAM)の使用量には、GPUオフロードが含まれていません。GPUを使用する場合は、RAMの使用量が減り、代わりにGPUメモリ(VRAM)が使用されます。

※Llama.cppで扱えるモデル形式がGGMLからGGUFに変更されています。


実行環境

この記事では以下のスペックのMacBookを使用しました。
OS:Windows 11
CPU:Intel Core i5-113
メモリ:8GB


WSL・Ubuntuのインストール

[スタート]から[コマンドプロンプト]を開きます。 llama-widows-gpu


コマンドプロンプトで次のコマンドを実行し、wsl2およびUbuntuをインストールします。


[Enter new UNIX username:]と表示がされるのでユーザー名を設定します。
この記事では”user”をユーザー名として入力しています。

[New password:]と表示がされるので任意のパスワードを設定します。

wsl --install

llama-cpp-python-windows+cpu

Windowsを再起動し、変更を有効化します。


コマンドプロンプトで次のコマンドを実行し、WSLのバージョンを確認します。

wsl --list --verbose

llama-widows-gpu


VERSIONが[1]の場合は、次のコマンドを実行し、既存のディストリビューションをWSL2 に変更します。

※VERSIONが既に[2]の場合は、このステップは飛ばしてください。

wsl --set-version ubuntu 2


Wiindowsの[スタート]から”Ubuntu”を検索し、起動します。
llama-widows-gpu


Dockerのリポジトリを設定する

Ubuntuのコマンドラインからapt パッケージを更新します。

sudo apt update

llama-cpp-python-windows+cpu


必要なパッケージをインストールします。

sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

llama-cpp-python-windows+cpu


DockerのGPGキーを保存するためのディレクトリを作成します。

sudo mkdir -p /etc/apt/keyrings


Dockerの公式GPGキーをダウンロードし、ディレクトリに格納します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg


ファイルのアクセス許可を変更して、読み取り可能にします。

sudo chmod a+r /etc/apt/keyrings/docker.gpg


DockerのAPTリポジトリを /etc/apt/sources.list.d/docker.listファイルに追加します。

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


aptパッケージをアップデートします。

sudo apt update


Dockerをインストールする

docker最新版をインストールします。

sudo apt install docker-ce docker-ce-cli containerd.io


ユーザーをDockerグループに追加

userにはUbuntuのユーザー名が入ります。

sudo usermod -aG docker user


新しいグループにユーザーを切り替えます。

newgrp docker


再度Dockerを再起動します。

sudo service docker restart


モデルのダウンロード

HuggingFaceのサイトにアクセスし、検索窓に[TheBloke/Llama-2]と入力すると、TheBloke/Llama-2-(7b or 13b or 70b)-Chat-GGUFが表示されます。

この記事ではTheBloke/Llama-2-7b-Chat-GGUFを選択しています。

*末尾がGGMLと書かれたものは古い形式になりますので、選ばないようにご注意ください。

llama-cpp-mac


モデルの詳細に遷移したら、[Files and versions]のタブを開きます。

llama-cpp-mac


モデルの一覧が表示されますので、ダウンロードする対象のモデルの[ダウンロード]アイコンにカーソルを合わせて、右クリックで[リンクのアドレス]を選択し、コピーします。


コマンドプロンプトで次のコマンドを実行し、先程コピーしたURLを使って、モデルをダウンロードします。

wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf

※モデルの格納場所は、/home/user/のディレクトリ配下になります。

※モデルの末尾に[?download=true]が付いている場合はこの部分を除外してください。


Dockerイメージのビルドとコンテナ起動

GitHub リポジトリからソースコードをクローンします。

git clone https://github.com/abetlen/llama-cpp-python


docker/openblas_simple ディレクトリに移動します。

cd llama-cpp-python/docker/openblas_simple


Docker イメージのビルドをします。

docker build -t openblas_simple .


コンテナを起動します。

docker run -d --cap-add SYS_RESOURCE -e USE_MLOCK=0 -e MODEL=/var/model -v /home/user/llama-2-7b-chat.Q4_K_M.gguf:/var/model --name llama -t openblas_simple /bin/bash


コンテナにシェル対話モードでログインします。

docker exec -it llama /bin/bash


llama-cpp-pythonのモデル設定

pythonをインタラクティブモードで起動します。

python

llama-cpp-python-windows+cpu


必要なライブラリをインポートします。

from llama_cpp import Llama


Llama2のモデルを読み込みます。

llm = Llama(model_path="/var/model", chat_format="llama-2")

llama-cpp-python-windows+cpu


llama-cpp-pythonでテキスト生成

プロンプトの実行

Llama-cpp-pythonを使ってテキスト生成(推論)を実行します。

プロンプトでは、家電量販店の店員にBluetoothスピーカーの選定について質問しています。

llm.create_chat_completion(
      messages = [
          {"role": "system", "content": "You are a salesperson at an electronics retail store."},
          {
              "role": "user",
              "content": "Please tell me the points to consider when choosing a Bluetooth speaker."
          }
      ]
)

llama-cpp-python-windows+cpu

※CPUでの生成の場合、かなりの時間がかかりますので、基本的にはGPUの利用を推奨しています。


生成結果

llama_print_timings:        load time =  114820.88 ms
llama_print_timings:      sample time =     687.82 ms /   465 runs   (    1.48 ms per token,   676.05 tokens per second)
llama_print_timings: prompt eval time =  114818.38 ms /    47 tokens ( 2442.94 ms per token,     0.41 tokens per second)
llama_print_timings:        eval time = 2159593.48 ms /   464 runs   ( 4654.30 ms per token,     0.21 tokens per second)
llama_print_timings:       total time = 2280901.65 ms
{'id': 'chatcmpl-b4112bd8-27d8-4e55-b00b-01afb1fc7a35', 'object': 'chat.completion', 'created': 1703939758, 'model': '/var/model', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': "  
Absolutely! As a salesperson at an electronics retail store, I'd be happy to help you choose the perfect Bluetooth speaker for your needs. Here are some key factors to consider:
\n1. Sound Quality: Look for a speaker that produces clear and rich sound with good bass. You should also check the frequency response range to ensure it can handle a wide range of audio frequencies.
\n2. Connectivity: Make sure the speaker is compatible with your devices, such as smartphones, tablets, or laptops. Bluetooth 5.0 is the latest and most reliable standard for wireless connectivity.
\n3. Battery Life: Consider how long you want the speaker to last on a single charge. Look for a speaker that can provide at least 8-10 hours of battery life, but some high-end models can go up to 24 hours or more.
\n4. Durability and Build Quality: A rugged and well-built speaker will withstand the rigors of travel and outdoor use. Look for a speaker with a durable casing and a sturdy handle, if available.
\n5. Portability: If you plan to take your speaker on the go, consider its size and weight. A smaller, lightweight speaker is easier to carry around, but may not produce as much sound quality as larger models.
\n6. Water Resistance: If you plan to use your speaker near water or in wet conditions, look for a model that's IP67 or higher rated for water resistance. This will protect the speaker from accidental splashes or immersion in water.
\n7. Additional Features: Some Bluetooth speakers come with additional features like built-in microphones, FM radios, or even LED lights. Consider whether these features are important to you and your needs.
\n8. Price: Bluetooth speakers can range from very affordable to very expensive. Set a budget for yourself and look for speakers that meet your requirements within that price range. Keep in mind that higher prices don't always mean better sound quality, so compare different models before making a decision.
\n9. Brand Reputation: Consider the reputation of the brand"},
 'finish_reason': 'length'}], 'usage': {'prompt_tokens': 47, 'completion_tokens': 465, 'total_tokens': 512}}


日本語翻訳

{'id': 'chatcmpl-b4112bd8-27d8-4e55-b00b-01afb1fc7a35'、'object': 'chat.completion'、'created': 1703939758、'model': '/var/model'、'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': " 
ぜひ!家電量販店の販売員として、ぴったりのBluetoothスピーカー選びをお手伝いさせていただきます ニーズに合わせて選択してください。考慮すべき重要な要素は次のとおりです:
\n1. 音質: 優れた低音を備えたクリアで豊かなサウンドを生み出すスピーカーを探してください。
また、周波数応答範囲をチェックして、幅広いオーディオを処理できることを確認する必要があります。 
\n2. 接続性: スピーカーがスマートフォン、タブレット、ラップトップなどのデバイスと互換性があることを確認してください。Bluetooth 5.0 は、ワイヤレス接続の最新かつ最も信頼性の高い標準です。
\n3. バッテリー寿命: 必要な長さを検討してください。
 スピーカーは 1 回の充電で持続します。バッテリー寿命が少なくとも 8 ~ 10 時間あるスピーカーを探してください。
ただし、一部のハイエンド モデルでは最大 24 時間以上持続するものもあります。
\n4. 耐久性と製造品質: A 頑丈でよく構築されたスピーカーは、旅行や屋外での過酷な使用にも耐えます。 
可能であれば、耐久性のあるケースと頑丈なハンドルを備えたスピーカーを探してください。
\n5. 携帯性: スピーカーを外出先に持ち歩く予定がある場合は、そのサイズと重量を考慮してください。
 小型軽量のスピーカーは持ち運びが簡単ですが、大型モデルほどの音質が得られない可能性があります。
\n6. 耐水性: 水の近くまたは濡れた状態でスピーカーを使用する予定がある場合は、IP67 以上の耐水性を備えたモデルを探してください。 これにより、スピーカーが偶発的な水しぶきや水没から保護されます。
\n7. 追加機能: 一部の Bluetooth スピーカーには、内蔵マイク、FM ラジオ、LED ライトなどの追加機能が付属しています。
 これらの機能が自分と自分のニーズにとって重要かどうかを検討してください。
\n8. 価格: Bluetooth スピーカーは、非常に手頃な価格のものから非常に高価なものまでさまざまです。 
自分で予算を設定し、その価格帯内で要件を満たすスピーカーを探してください。 価格が高いほど音質が必ずしも良いとは限らないため、決定を下す前にさまざまなモデルを比較してください。
\n9. ブランドの評判: ブランドの評判を考慮します"}, 
'finish_reason': 'length'}], 'usage': { 'prompt_tokens': 47, 'completion_tokens': 465, 'total_tokens': 512}}


生成AI・LLMならGPUクラウド

Llama2やその他のLLMを使用する際には、モデルサイズやタスクに応じて必要なスペックが異なります。

LLMで使用されるGPUは高価なため、買い切りのオンプレミスよりも、コストパフォーマンスが高く柔軟な使い方ができるGPUクラウドをおすすめしています。


GPUクラウドのメリットは以下の通りです。

  • 必要なときだけ利用して、コストを最小限に抑えられる
  • タスクに応じてGPUサーバーを変更できる
  • 需要に応じてGPUサーバーを増減できる
  • 簡単に環境構築ができ、すぐに開発をスタートできる
  • 新しいGPUを利用できるため、陳腐化による買い替えが不要
  • GPUサーバーの高電力や熱を管理をするための設備投資が不要


コスパをお求めなら、メガクラウドと比較して50%以上安いGPUクラウドサービス「GPUSOROBAN」がおすすめです。

  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN


まとめ

この記事では、Windowsのローカル環境でllama-cpp-pythonを用いて推論をする方法を紹介しました。

Llama2は無料で使えて商用利用可能な利便性の高いモデルでありながら、ChatGPTと同等以上の性能があります。

CPUでの生成に時間がかかる場合は、GPUの利用を検討してみてください。

Llama2に関する詳細な情報は、以下の記事でまとめて紹介していますので、あわせてご覧ください。


  Llama2とは?使い方・日本語性能・商用利用について解説 | 初心者ガイド この記事では、Llama2について幅広く解説しています。Llama2の性能や安全性、商用利用、日本語対応、様々な環境での使い方などに触れています。 業界最安級GPUクラウド | GPUSOROBAN



MORE INFORMATION

GPUでお困りの方はGPUSOROBANで解決!
お気軽にご相談ください

10日間無料トライアル
詳しい資料はこちら
質問・相談はこちら