llama.cppをPython で使ってみる


llama.cppはCで書かれたモジュールの集まりなので、C/C++の環境で使うのが筋ですが、Python からでも使えるように、llama-cpp-python というpythonバインディングのバージョンがあります。

Python の仮想環境で使ってみましょう。

使うのは以前と同じで古いPC + Ubuntu 22.04.3 Server LTS です。

 

 

 

 

 

 

 


モデルを準備します。

HuggingFace のサイトからllama-2-7b-chatの量子化済みモデルをダウンロードしてみます。

日本語対応は下段にあります。

検索窓にTheBloke/Llama-2 と入力して検索します。

 

 

 

 

 

 

 

 

 

 

 

 

検索されたページをスクロールダウンして、Provided files を表示。

例えば、llama-2-7b-chat.Q4_K_M.ggufを使う場合は、そこのNameリンクをクリックして対象ページに移動します。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ページの中ほどのdownloadリンクを右クリックしてアドレスをコピーします。

 

 

 

 

 

 

 

 

 

 

 

 

以下のように?download=true が付いていれば削除しておきます。

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

ダウンロードフォルダーを準備してそこにダウンロードします。

 


Pythonの仮想環境の準備をします。

tempというディレクトリを作って、その中にvenvという名の環境を作ります。

 


llama-cpp-pythonパッケージをインストールします。

pythonのコンソールを起動して富士山の標高を尋ねてみます(使っているモデルは日本語対応していないので英語です)。

>python3

Llama.generate: prefix-match hit

llama_print_timings: load time = 9815.43 ms
llama_print_timings: sample time = 16.53 ms / 29 runs ( 0.57 ms per token, 1754.07 tokens per second)
llama_print_timings: prompt eval time = 6441.70 ms / 19 tokens ( 339.04 ms per token, 2.95 tokens per second)
llama_print_timings: eval time = 11783.33 ms / 28 runs ( 420.83 ms per token, 2.38 tokens per second)
llama_print_timings: total time = 18325.51 ms / 47 tokens
{‘id’: ‘chatcmpl-2f40b189-4450-4c34-b7d5-9e15d8c9f36b’, ‘object’: ‘chat.completion’, ‘created’: 1708152825, ‘model’: ‘/home/foo3/models/gguf/llama-2-7b-chat.Q4_K_M.gguf’, ‘choices’: [{‘index’: 0, ‘message’: {‘role’: ‘assistant’, ‘content’: ‘ The height of Mount Fuji is 3,776 meters (12,421 feet) above sea level.‘}, ‘finish_reason’: ‘stop’}], ‘usage’: {‘prompt_tokens’: 29, ‘completion_tokens’: 28, ‘total_tokens’: 57}}
>>>

 


日本語対応のモデルではELYZAが使えます。

ELYZA-japanese-Llama-2-7b-fast-instruct-q4_0.ggufをダウンロードして使ってみます。

少し時間がかかって応答が返ってきました、が、変なウソついてますね。いや、ウソというより勘違い?回答を見れば明らかに富士山が一番高いことが分かっているはずなのですが…….。

llama_print_timings: load time = 13866.18 ms
llama_print_timings: sample time = 20.73 ms / 72 runs ( 0.29 ms per token, 3473.56 tokens per second)
llama_print_timings: prompt eval time = 13866.10 ms / 29 tokens ( 478.14 ms per token, 2.09 tokens per second)
llama_print_timings: eval time = 38278.86 ms / 71 runs ( 539.14 ms per token, 1.85 tokens per second)
llama_print_timings: total time = 52628.99 ms / 100 tokens
{‘id’: ‘chatcmpl-9cf5cda9-b92e-4826-9093-8cd47eefde22’, ‘object’: ‘chat.completion’, ‘created’: 1709128525, ‘model’: ‘/home/foo3/models/gguf/ELYZA-japanese-Llama-2-7b-fast-instruct-q4_0.gguf’, ‘choices’: [{‘index’: 0, ‘message’: {‘role’: ‘assistant’, ‘content’: ‘ 日本で一番高い山は、北海道の「恵庭岳」です。標高は2,741メートルです。次いで、富士山(3,776m)、北岳(3,193m)、立山(3,180m)と続きます。‘}, ‘finish_reason’: ‘stop’}], ‘usage’: {‘prompt_tokens’: 29, ‘completion_tokens’: 71, ‘total_tokens’: 100}}

 

 

 


仮想環境を抜ける

>deactivate

 


 

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*