catch-img

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

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


目次[非表示]

  1. 1.Llama2とは
  2. 2.Macのローカル環境Llama2を動かす(llama-cpp-python)
  3. 3.LLama 2 のモデル一覧
  4. 4.実行環境
  5. 5.Homebrewのインストール
  6. 6.必要なパッケージのインストール
  7. 7.Condaのインストール
  8. 8.Conda環境でPythonの実行環境の作成
  9. 9.llama-cpp-pythonのインストール
  10. 10.モデルのダウンロード
  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社が開発した大規模言語モデル(LLM)で、OpenAI社のChatGPTに匹敵するの性能を持っています。


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

llama2


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


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


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

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


Llama.cppとはMacBookでLlamaを実行することを目指して開発されたランタイムです。

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


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


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


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


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


LLama 2 のモデル一覧

「Llama.cpp」を利用するには、「Llama 2」モデルをGGUF形式に変換する必要がありますが、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を使用しました。

  • MacBook Pro
  • チップ Apple M1 Pro
  • メモリ 16GB


Homebrewのインストール

Macの環境でターミナルを開きます。

まだインストールしていない場合はHomebrewをインストールします。

ターミナルに次のコマンドをコピペしてEnterを押すとHomebrewインストールが実行されます。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

llama-cpp-python-mac


ターミナルで次のコマンドを実行します。

export PATH="$PATH:/opt/homebrew/bin/"

llama-cpp-python-mac


インストール完了およびPATHが通っているか確認します。

brew --version

llama-cpp-python-mac


必要なパッケージのインストール

ターミナルで次のコマンドを実行し、必要なパッケージをインストールします。

brew install wget git cmake


Condaのインストール

Metal GPUをサポートするMacOS向けのCondaバージョンをダウンロードして、インストールします。

wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh

llama-cpp-python-mac


condaのパスを通します。

export PATH=~/miniforge3/bin:$PATH


condaのパスが通ったか確認します。

conda --version

llama-cpp-python-mac


condaがインストールされた環境をシェルに統合します。

conda init


シェルを再起動します。

source ~/ .zshrc


Conda環境でPythonの実行環境の作成

conda仮想環境でPythonの実行環境を作成します。

conda create -n llama python=3.9.16



作成したconda仮想環境(llama)に切り替えます。

conda activate llama

llama-cpp-python-mac

(base)が(llama)に変更になったら、conda仮想環境の切り替えが完了です。


llama-cpp-pythonのインストール

conda環境で次のコマンドを実行し、Metal GPUサポートを有効にして、llama-cpp-pythonをインストールします。

CMAKE_ARGS="-DLLAMA_METAL=on" pip install -U llama-cpp-python --no-cache-dir


モデルのダウンロード

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


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

llama-cpp-mac


モデルを格納するディレクトリに移動します。

cd ~/llama.cpp/models


先程コピーしたURLを使って、モデルをダウンロードします。

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


モデルのファイル名の末尾に[?download=true]が付いている場合はこの部分を除外する形で、ファイル名を変更してください。


llama-cpp-pythonのモデル設定

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

python



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

from llama_cpp import Llama



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

llm = Llama(model_path="./llama-2-7b-chat.Q4_K_M.gguf", chat_format="llama-2")


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

プロンプトの実行

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

プロンプトでは、瞑想の達人に瞑想のコツについて質問しています。

llm.create_chat_completion(
      messages = [
          {"role": "system", "content": "you are a master of meditation."},
          {
              "role": "user",
              "content": "Please tell me the points when meditating."
          }
      ]
)

llama-cpp-python-mac


生成結果

llama_print_timings:        load time =   13685.71 ms
llama_print_timings:      sample time =      41.48 ms /   474 runs   (    0.09 ms per token, 11428.30 tokens per second)
llama_print_timings: prompt eval time =   13685.57 ms /    38 tokens (  360.15 ms per token,     2.78 tokens per second)
llama_print_timings:        eval time =   31598.62 ms /   473 runs   (   66.80 ms per token,    14.97 tokens per second)
llama_print_timings:       total time =   45988.96 ms
{'id': 'chatcmpl-83338560-9f10-44e1-8fa3-3f1492cebe19', 'object': 'chat.completion', 'created': 1703925584, 'model': './llama-2-7b-chat.Q4_K_M.gguf', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': '  
Ah, a seeker of inner peace and tranquility! As a master of meditation, I am delighted to share with you the key points to keep in mind while meditating:
\n1.Find a quiet and comfortable place: Look for a place where you can sit comfortably without any distractions or interruptions. You can use a cushion or a chair, whichever feels more supportive for your body.
\n2.Set an intention: Before starting your meditation, set an intention for what you want to achieve. This could be as simple as feeling more relaxed or as specific as working on a particular issue. Having a clear intention will help you stay focused during your meditation practice.
\n3.Close your eyes: Closing your eyes can help you focus your attention inward and block out distractions. It also helps to create a sense of privacy and intimacy with yourself, allowing you to explore your inner world more deeply.
\n4.Focus on the breath: Bring your attention to your breath, feeling the sensation of the air moving in and out of your body. Try to focus on the sensation of each breath without getting caught up in thoughts or distractions. If your mind wanders, gently bring it back to the breath without judgment.
\n5. When the mind wanders, don't chase it: It's normal for the mind to wander during meditation, but when you notice this happening, don't try to catch or chase the thoughts. Instead, gently bring your attention back to the breath or a mantra (a word or phrase that helps you stay focused).
\n6.Be patient with yourself: Meditation is a practice that takes time and patience. Don't get discouraged if your mind wanders a lot or if you feel like you're not doing it "right." Every meditation is an opportunity to cultivate greater awareness and understanding of yourself, so be kind and patient with yourself as you explore this inner journey.
\n7. Start small and build up: If you're new to meditation, start with short sessions (5-10 minutes) and gradually increase the duration as you become more comfortable with the practice. 
This'}, 'finish_reason': 'length'}], 'usage': {'prompt_tokens': 38, 'completion_tokens': 474, 'total_tokens': 512}}


日本語翻訳

{'id': 'chatcmpl-83338560-9f10-44e1-8fa3-3f1492cebe19'、'object': 'chat.completion'、'created': 1703925584、'model': './llama-2-7b-chat. Q4_K_M.gguf', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': ' 
ああ、内なる平和と静けさを求める人よ! 瞑想の達人として、瞑想中に留意すべき重要なポイントを皆さんと共有できることを嬉しく思います。
\n1. 静かで快適な場所を探す:気を散らしたり邪魔されたりすることなく、快適に座れる場所を探します。 クッションまたは椅子のどちらでも体をサポートできる方を使用できます。
\n2. 意図を設定する: 瞑想を開始する前に、達成したいことについての意図を設定します。 これは、よりリラックスした気分になるという単純な場合もあれば、特定の問題に取り組むというような具体的な場合もあります。 明確な意図があると、瞑想の練習中に集中力を維持するのに役立ちます。
\n3. 目を閉じる:目を閉じると、注意を自分の内側に集中させ、気が散るのを防ぐことができます。 また、プライバシーと自分自身への親密感を生み出すのにも役立ち、自分の内なる世界をより深く探求できるようになります。
\n4. 呼吸に集中する:呼吸に注意を向け、空気が体に出入りする感覚を感じます。 思考や気を散らすことなく、それぞれの呼吸の感覚に集中してください。 心がさまよった場合は、判断せずにそっと呼吸を戻してください。
\n5. 心がさまようときは、追いかけないでください。瞑想中に心がさまようのは普通のことですが、そのようなことが起こっていることに気づいたら、その思考を捕まえたり追いかけたりしないでください。 代わりに、ゆっくりと呼吸やマントラ (集中力を維持するのに役立つ単語やフレーズ) に注意を戻します。
\n6. 自分自身に忍耐強くなりなさい:瞑想は時間と忍耐を必要とする行為です。 心が頻繁にさまよったり、自分のやり方が「正しく」できていないように感じても、落胆しないでください。 すべての瞑想は、自分自身についての認識と理解を深めていく機会です。この内なる旅を探求する際には、自分に優しく辛抱強くいてください。
\n7. 小さなことから始めて徐々に増やしていきます。瞑想が初めての場合は、短いセッション (5 ~ 10 分) から始めて、練習に慣れてきたら徐々に時間を延ばしてください。 
This'}, 'finish_reason': 'length'}]、'usage': {'prompt_tokens': 38, 'completion_tokens': 474, '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


まとめ

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

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

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


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


MORE INFORMATION

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

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