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
ダウンロードフォルダーを準備してそこにダウンロードします。
1 2 3 4 5 6 |
cd ~/ mkdir -p models/hf models/gguf cd ~/models/gguf wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf |
Pythonの仮想環境の準備をします。
1 |
sudo apt install python3.10-venv |
tempというディレクトリを作って、その中にvenvという名の環境を作ります。
1 2 3 4 5 6 |
mkdir temp cd temp python3 -m venv venv source venv/bin/activate |
llama-cpp-pythonパッケージをインストールします。
1 |
pip3 install llama-cpp-python |
pythonのコンソールを起動して富士山の標高を尋ねてみます(使っているモデルは日本語対応していないので英語です)。
>python3
1 2 3 4 5 6 7 8 9 |
from llama_cpp import Llama llm = Llama(model_path="/home/foo3/models/gguf/llama-2-7b-chat.Q4_K_M.gguf", chat_format="llama-2") llm.create_chat_completion( messages = [ {"role": "system", "content": " What is the height of Mount Fuji?"} ] ) |
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をダウンロードして使ってみます。
1 2 3 4 5 6 7 8 |
from llama_cpp import Llama llm = Llama(model_path="/home/foo3/models/gguf/ELYZA-japanese-Llama-2-7b-fast-instruct-q4_0.gguf", chat_format="llama-2") llm.create_chat_completion( messages = [ {"role": "system", "content": "日本で一番高い山はどこですか?"} ] ) |
少し時間がかかって応答が返ってきました、が、変なウソついてますね。いや、ウソというより勘違い?回答を見れば明らかに富士山が一番高いことが分かっているはずなのですが…….。
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
Leave a Reply