Introduction
llama を試してみて思うのは、コンソールベースで動作しているため、プロダクトでは使いにくい点。
実際の ChatGPT みたいに API で提供していたら使いやすいので、そういうものがないかを調べてみた。
What options are there?
Python Bindings for llama.cpp
llama.cpp の Python バインディングである Python Bindings for llama.cpp。
Python をつかったサーバーモジュールが提供されている。
(実は、llama.cpp にもサーバーアプリケーションは存在するが、こちらのが導入は簡単)
現時点で Python 3.8 以上が必要。
Install
1 | python -m pip install pip --upgrade |
GPU を使う場合は少し手間がかかる
Windows
--verbose
をつけることで、CUDA が適切に設定されているかなどのビルド状況を可視化できる。
1 | set CMAKE_ARGS=-DLLAMA_CUBLAS=on |
Run
何はともかくモデルファイルが必要。
モデルファイルは HuggingFace からダウンロードする。
公式の llama のモデルではなく、GGUF 形式にしたモデルが必要。
GGUF への変換は convert.py で実行できる。
1 | curl -LO https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf |
こんな感じでサーバーが起動する。
GPU を有効にしてインストールし、GPU を使いたい場合は --n_gpu_layers
を使用する。
数値は 0 が既定値で、-1
を指定するとモデルの全てのレイヤーを GPU に乗せる。
1 | $ python -m llama_cpp.server --model llama-2-7b-chat.Q4_K_M.gguf --n_gpu_layers -1 |
また、Swagger のインターフェースもある。
http://localhost:8000/docs にアクセスすることで下記のようなページが見える。
そのため、curl
を使って質問を投げることができる
Windows
1 | $ curl http://localhost:8000/v1/chat/completions -X POST -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"messages\": [ { \"content\": \"What is the capital of France?\", \"role\": \"user\" } ] }" |
Linux
1 | curl -X POST http://localhost:8000/v1/chat/completions -H 'accept: application/json' -H 'Content-Type: application/json' -d '{ "messages": [ { "content": "What is the capital of France?", "role": "user" } ] }' |
Note
複数クライアントからの同時実行はサポートされていない。
Is the server can be run with multiple states? #257
メモリにロードしたモデルに対して forward/backward するのが DeepLearning なのでそれは当然。