Llama.cpp の HTTPサーバー機能を試す
「Llama.cpp」のHTTPサーバー機能を試したのでまとめました。
1. モデルの準備
今回は、「vicuna-7b-v1.5.ggmlv3.q4_K_M.bin」を使います。
2. ローカルPCでの実行
ローカルPCでの実行手順は、次のとおりです。
(1) Llama.cppのインストールとビルド。
$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
$ make
(2) modelsフォルダにモデルを配置。
今回は、「vicuna-7b-v1.5.ggmlv3.q4_K_M.bin」を使います。
(3) 推論の実行。
./main -m ./models/vicuna-7b-v1.5.ggmlv3.q4_K_M.bin --temp 0.1 -p "User:日本語で回答してください。富士山の高さは? Assistant:"
富士山の高さは3,776メートルです。 [end of text]
M1 Macでは、7Bは13.48トークン/秒、13Bは6.90トークン/秒でした。
3. HTTPサーバーの実行
Llama.cppのHTTPサーバーの実行手順は、次のとおりです。
(1) HTTPサーバーの起動。
$ ./server -m models/vicuna-7b-v1.5.ggmlv3.q4_K_M.bin -c 2048
(2) curlでの動作確認。
$ curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "User:日本語で回答してください。富士山の高さは? Assistant: ","n_predict": 128}'
serverのパラメータは、次のとおりです。
4. OpenAI APIからLlama.cppへの切り替え
OpenAI APIを利用していたコードを、環境変数の変更のみで、Llama.cppに切り替えることができるコード「api_like_oai.py」が提供されています。(completionsのみ)
(1) HTTPサーバーの起動。
$ ./server -m models/vicuna-7b-v1.5.ggmlv3.q4_K_M.bin -c 2048
(2) 「examples/server/api_like_oai.py」の編集。
「api_like_oai.py」のエンドポイントのパス (@app.route()) を、OpenAI APIを利用していたコードの設定 (デフォルトは「/engines/text-davinci-003/」) に応じて追加します。
・completions
@app.route('/chat/completions', methods=['POST'])
@app.route('/v1/chat/completions', methods=['POST'])
↓
@app.route('/engines/text-davinci-003/completions', methods=['POST'])
@app.route('/completions', methods=['POST'])
@app.route('/v1/completions', methods=['POST'])
・chat/completions
@app.route('/chat/completions', methods=['POST'])
@app.route('/v1/chat/completions', methods=['POST'])
↓
@app.route('/engines/text-davinci-003/chat/completions', methods=['POST'])
@app.route('/chat/completions', methods=['POST'])
@app.route('/v1/chat/completions', methods=['POST'])
(3) 「examples/server/api_like_oai.py」の起動。
$ python examples/server/api_like_OAI.py
(4) OpenAI APIの呼び出し元に「openai.api_base = "http://localhost:8081"」を追加。
OpenAI APIキーは使用しないので、空文字を指定しています。
・test.py
import openai
# APIキーの設定
openai.api_base = "http://localhost:8081"
openai.api_key = ""
# 推論
response = openai.Completion.create(
engine="text-davinci-003",
prompt="User:日本語で回答してください。富士山の高さは? Assistant:")
print(response['choices'][0]['text'])
(5) OpenAI APIの呼び出し元の実行。
$ python test.py
富士山の高さは、3,776メートルです