見出し画像

llama-cpp-python 使ってみた

llama.cpp立ち上げて使ってたんですけど
llama-cpp-pythonの方が使いやすそうなので使ってみることにします。
Metalを有効にインストール

# Metal ( MPS )でインストールするには、インストールする前に `LLAMA_METAL = on`環境変数を設定します:
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python

コード↓

from llama_cpp import Llama

llm = Llama(
      model_path="../LLMModels/ArrowPro-7B-KUJIRA.Q8_0.gguf",
      #n_gpu_layers=-1, # Uncomment to use GPU acceleration
      # seed=1337, # Uncomment to set a specific seed
      # n_ctx=2048, # Uncomment to increase the context window
)
output = llm(
      "地球環境についてあなたの考えをお聞かせください", # Prompt
      max_tokens=2048, # Generate up to 32 tokens, set to None to generate up to the end of the context window
      #stop=["Q:", "\n"], # Stop generating just before the model would generate a new question
      echo=True # Echo the prompt back in the output
) # Generate a completion, can also call create_completion
print(output)

llama_print_timings: total time = 35737.53 ms / 512 tokens
{'id': 'cmpl-2c3d1146-1f26-4c31-8b6c-68eb3d1c852a', 'object': 'text_completion', 'created': 1717340983, 'model': '../LLMModels/ArrowPro-7B-KUJIRA.Q8_0.gguf', 'choices': [{'text': '地球環境についてあなたの考えをお聞かせください。 | トレンドノート\n更新日: 2018年7月13日\n地球環境は、私たち人類にとって非常に重要な問題の一つです。温暖化、大気や水質の汚染、生物多様性の喪失、資源の枯渇など、さまざまな環境問題があります。これらの問題に取り組むためには、個人から企業、そして国際社会まで、様々なレベルでの協力と持続可能性への配慮が必要です。\n私たち一人ひとりができることとしては、以下のような取り組みがあります:\n1. 省エネルギーの推進:電気製品の使用を控えたり、LED照明への切り替え、高効率家電の利用などでエネルギー消費を減らす。\n2. リサイクルと廃棄物削減:できるだけ再利用可能な物を使い、ゴミの分別を正しく行い、廃棄物を減らすように心がける。\n3. 緑化活動への参加:街中や自宅での植樹活動に参加し、二酸化炭素の吸収源となる森林を守り育てる。\n4. 公共交通機関の利用促進:車から公共交通機関への切り替えでCO2排出量を減らす。\n5. 食品ロスの削曉:賞', 'index': 0, 'logprobs': None, 'finish_reason': 'length'}], 'usage': {'prompt_tokens': 29, 'completion_tokens': 484, 'total_tokens': 513}}

アウトプット

14.33 tokens per second.

 nglを有効にしてみる

from llama_cpp import Llama

llm = Llama(
      model_path="../LLMModels/ArrowPro-7B-KUJIRA.Q8_0.gguf",
      n_gpu_layers=-1, # Uncomment to use GPU acceleration
      # seed=1337, # Uncomment to set a specific seed
      # n_ctx=2048, # Uncomment to increase the context window
)
output = llm(
      "地球環境についてあなたの考えをお聞かせください", # Prompt
      max_tokens=2048, # Generate up to 32 tokens, set to None to generate up to the end of the context window
      #stop=["Q:", "\n"], # Stop generating just before the model would generate a new question
      echo=True # Echo the prompt back in the output
) # Generate a completion, can also call create_completion
print(output)

llama_print_timings: total time = 12455.46 ms / 511 tokens
{'id': 'cmpl-263f417e-048f-4d11-b499-40abb9727a0c', 'object': 'text_completion', 'created': 1717341481, 'model': '../LLMModels/ArrowPro-7B-KUJIRA.Q8_0.gguf', 'choices': [{'text': '地球環境についてあなたの考えをお聞かせください。 | スタディザインコラボ、キャリア教育プログラムの開発を通じて、私たちは次世代を担う子どもたちが環境問題に関心を持ち、解決策を見つける力を養えるよう支援しています。教育の現場では、環境学習やフィールドワークなどを取り入れることで、より実践的かつ体験的な学びを提供しています。\n地球環境に対する私たちの取り組みは、単にCO2排出量の削減や再生可能エネルギーの普及だけではありません。もっと幅広い視野で取り組む必要があります。それには、以下のような取り組みが考えられます。\n1. 教育と啓発活動:次世代を担う子どもたちに対して、環境保護や持続可能性についての教育を充実させることが重要です。キャリア教育プログラムを通じて、環境問題への意識を高める取り組みをしています。\n2. 技術革新の促進:環境に優しい技術の研究開発を支援し、それらを実用化することで、社会全体の持続可能性を高めることができます。\n3. 政策提言:環境保護に関する政策や法律の立案・改正に参加し、より効果的な環', 'index': 0, 'logprobs': None, 'finish_reason': 'length'}], 'usage': {'prompt_tokens': 29, 'completion_tokens': 483, 'total_tokens': 512}}

41.0261845006 token per seconds

やはりGPUの方が早いっぽい

あとllama-cpp-python使ってる途中で
ARM64バイナリ利用した方が性能上がることが書いてあったから試してみることにした

ARM64バイナリを利用する手順

  1. Miniforgeのインストール: Miniforgeは、ARM64アーキテクチャ向けに最適化されたCondaディストリビューションです。以下の手順でMiniforgeをインストールします。

wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh
  1. シェルの再起動: インストールが完了したら、シェルを再起動します。これにより、Condaの設定が反映されます。

  2. Condaのバージョン確認: 以下のコマンドを実行して、Condaが正しくインストールされていることを確認します。

conda --version
  1. 新しいPython環境の作成: ARM64に最適化されたPython環境を作成します。

conda create -n myenv python=3.10
  1. 環境のアクティベート: 作成した環境をアクティベートします。

conda activate venv
  1. 必要なパッケージのインストール: ARM64バイナリで利用可能なパッケージをインストールします。例えば、NumPyをインストールする場合は以下のようにします。

conda install numpy


condaを使う場合新しくvenvフォルダがプロジェクトに追加されるわけじゃなくて

conda info --envs

で確認することになるのでプロジェクトごとにvenvの名前変える必要があると思った

llama_print_timings: total time = 12407.04 ms / 511 tokens
{'id': 'cmpl-7822f38d-5a7c-45e3-8032-0c8768b56dd7', 'object': 'text_completion', 'created': 1717343033, 'model': '../LLMModels/ArrowPro-7B-KUJIRA.Q8_0.gguf', 'choices': [{'text': '地球環境についてあなたの考えをお聞かせください。 | タイヤのグリップ力とは?\nタイヤのグリップ力とは、タイヤが路面に対して発揮する最大の力のことであり、走行時の車両の安定性や操縦性を左右する重要な要素の一つです。グリップ力は、タイヤの接地面にある溝や、ゴムの材質、構造などによって決まります。高性能タイヤでは、より多くの溝や特殊なゴム素材を使用することで、高いグリップ力を実現しています。\n地球環境に配慮したタイヤ選びも重要です。例えば、低燃費タイアやエコタイヤと呼ばれるものは、省エネルギー性能が高く、長距離走行時の燃料消費を抑えることができます。また、長寿命であれば交換頻度が少なくて済み、その分の廃棄物削減にもつながります。さらに、環境に配慮した製造過程を経たエコタイヤは、ライフサイクル全体での環境負荷を低減することが期待されています。\n地球環境について考えるとき、私たち一人ひとりが日常生活の中で小さな努力を重ねることが大切です。タイヤ選びにおいても、省エネルギーで長持ちするものを選ぶ', 'index': 0, 'logprobs': None, 'finish_reason': 'length'}], 'usage': {'prompt_tokens': 29, 'completion_tokens': 483, 'total_tokens': 512}}

41.186294233 token per seconds

あんま変わらないな

やり方合ってるかな??

出力的に
ストリーミングじゃなくて
一気に来るから
あれ?止まった?
と思った次の瞬間にどっとテキストが降ってくる感じ

AITuberで使う場合は
ちょっとした間ができてしまうかも
しかし今回はtoken数を2048にしているから出力で重くなってる

実際に使うときは入力が増えて
出力はむしろ少なくしたい

実用レベルのレイテンシであって欲しいな!


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