llama.cppで「Umievo-itr012-Gleipnir-7B」をサーバー起動する方法(GoogleColab)

AI・機械学習

はじめに

本記事では、純粋なC/C++で実装された言語モデル推論ツールである「llama.cpp」を、Google Colab上でサーバーとして起動し、HTTPリクエストを送信して推論を行う方法を初心者向けに解説します。

今回は、4つの強力な日本語AIモデルを進化的アルゴリズムでマージした「Umievo-itr012-Gleipnir-7B」モデルを使用します。
このモデルは、Japanese-Starling-ChatV-7B、Ninja-v1-RP-expressive-v2、Vecteus-v1、Japanese-Chat-Umievo-itr004-7bの4つのモデルを組み合わせたもので、ElyzaTasks100ベンチマークで平均点が3.91(Llama3-70Bによる自動評価を3回行った平均点)という高い性能を示しています。

umiyuki/Umievo-itr012-Gleipnir-7B · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

プログラミング初心者の方でも、この記事を読めば問題なくllama.cppサーバーの環境構築から実行までできるようになります。ではさっそく始めていきましょう!

環境構築

まずはGoogle Colabの環境構築から行います。下記の手順に沿って進めてください。

1. モデルのダウンロード

以下のコマンドを実行し、使用するモデルファイルをダウンロードします。今回は例として「umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf」モデルを使用します。

!huggingface-cli download  mmnga/umiyuki-Umievo-itr012-Gleipnir-7B-gguf umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf --local-dir .

huggingface-cliコマンドを使用して、指定したリポジトリ(mmnga/umiyuki-Umievo-itr012-Gleipnir-7B-gguf)からモデルファイル(umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf)をダウンロードし、カレントディレクトリ(--local-dir .)に保存します。

2. llama.cppのクローン

続いて、以下のコマンドでllama.cppリポジトリをクローンします。

!git clone https://github.com/ggerganov/llama.cpp.git
%cd llama.cpp
!make -j

まずgit cloneコマンドでllama.cppのGitリポジトリをクローンし、%cd llama.cppでllama.cppディレクトリに移動します。
そしてmake -jコマンドでllama.cppをビルドします。-jオプションは並列ビルドを有効にするためのものです。

これで環境構築は完了です。次はllama.cppサーバーを起動し、リクエストを送信していきます。

llama.cppサーバーの起動とリクエスト送信

1. llama-serverの起動

以下のコマンドを実行し、バックグラウンドでllama-serverを起動します。

!nohup ./llama-server -m ../umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf --port 8181 > output.log &
  • nohupコマンドを使用することで、プロセスをバックグラウンドで実行できます。
  • ./llama-serverはllama-serverの実行ファイルを指定しています。
  • -mオプションで使用するモデルファイルのパスを指定します。今回は先ほどダウンロードした「umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf」を使用します。
  • --portオプションでllama-serverが利用するポート番号を指定します。ここでは8181番ポートを使用しています。
  • 最後に> output.log &で標準出力をoutput.logファイルにリダイレクトし、バックグラウンドで実行します。

2. リクエストの送信

llama-serverが起動したら、以下のコマンドでHTTPリクエストを送信し、モデルからの応答を得ます。

!curl --request POST \
    --url http://localhost:8181/completion \
    --header "Content-Type: application/json" \
    --data '{"prompt": "User:日本語で回答してください。富士山の高さは? Assistant: ","n_predict": 128}'
  • curlコマンドを使用してHTTPリクエストを送信します。
  • --request POSTでPOSTメソッドを指定し、--urlオプションでリクエスト送信先のURLを指定します。今回はローカルホストの8181番ポートにリクエストを送信します。
  • --headerオプションでリクエストのContent-Typeヘッダを指定します。llama-serverはJSONデータを受け取るため、application/jsonを指定します。
  • --dataオプションでリクエストのJSONデータを指定します。ここではプロンプト(prompt)と予測トークン数(n_predict)を指定しています。

リクエストを送信すると、llama-serverがモデルを使用して推論を行い、結果をレスポンスとして返してくれます。

CPU

{"content":"富士山の高さは、3,776メートルです。富士山は日本最高峰の山で、世界遺産にも登録されています。","id_slot":0,"stop":true,"model":"../umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf","tokens_predicted":53,"tokens_evaluated":27,"generation_settings":{"n_ctx":8192,"n_predict":-1,"model":"../umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf","seed":4294967295,"temperature":0.800000011920929,"dynatemp_range":0.0,"dynatemp_exponent":1.0,"top_k":40,"top_p":0.949999988079071,"min_p":0.05000000074505806,"tfs_z":1.0,"typical_p":1.0,"repeat_last_n":64,"repeat_penalty":1.0,"presence_penalty":0.0,"frequency_penalty":0.0,"penalty_prompt_tokens":[],"use_penalty_prompt_tokens":false,"mirostat":0,"mirostat_tau":5.0,"mirostat_eta":0.10000000149011612,"penalize_nl":false,"stop":[],"n_keep":0,"n_discard":0,"ignore_eos":false,"stream":false,"logit_bias":[],"n_probs":0,"min_keep":0,"grammar":"","samplers":["top_k","tfs_z","typical_p","top_p","min_p","temperature"]},"prompt":"User:日本語で回答してください。富士山の高さは? Assistant: ","truncated":false,"stopped_eos":true,"stopped_word":false,"stopped_limit":false,"stopping_word":"","tokens_cached":79,"timings":{"prompt_n":27,"prompt_ms":13900.257,"prompt_per_token_ms":514.8243333333334,"prompt_per_second":1.9424101295393317,"predicted_n":53,"predicted_ms":37726.265,"predicted_per_token_ms":711.816320754717,"predicted_per_second":1.4048568020184347}}CPU times: user 404 ms, sys: 53.8 ms, total: 458 ms
Wall time: 51.7 s

GPU

{"content":"富士山の高さは、3,776メートルです。","id_slot":0,"stop":true,"model":"../umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf","tokens_predicted":21,"tokens_evaluated":27,"generation_settings":{"n_ctx":8192,"n_predict":-1,"model":"../umiyuki-Umievo-itr012-Gleipnir-7B-Q4_K_M.gguf","seed":4294967295,"temperature":0.800000011920929,"dynatemp_range":0.0,"dynatemp_exponent":1.0,"top_k":40,"top_p":0.949999988079071,"min_p":0.05000000074505806,"tfs_z":1.0,"typical_p":1.0,"repeat_last_n":64,"repeat_penalty":1.0,"presence_penalty":0.0,"frequency_penalty":0.0,"penalty_prompt_tokens":[],"use_penalty_prompt_tokens":false,"mirostat":0,"mirostat_tau":5.0,"mirostat_eta":0.10000000149011612,"penalize_nl":false,"stop":[],"n_keep":0,"n_discard":0,"ignore_eos":false,"stream":false,"logit_bias":[],"n_probs":0,"min_keep":0,"grammar":"","samplers":["top_k","tfs_z","typical_p","top_p","min_p","temperature"]},"prompt":"User:日本語で回答してください。富士山の高さは? Assistant: ","truncated":false,"stopped_eos":true,"stopped_word":false,"stopped_limit":false,"stopping_word":"","tokens_cached":47,"timings":{"prompt_n":27,"prompt_ms":11601.427,"prompt_per_token_ms":429.6824814814815,"prompt_per_second":2.327299908881899,"predicted_n":21,"predicted_ms":12795.433,"predicted_per_token_ms":609.3063333333333,"predicted_per_second":1.6412105788057345}}CPU times: user 247 ms, sys: 35.4 ms, total: 283 ms
Wall time: 37.7 s

おわりに

本記事では、llama.cppをGoogle Colab上でサーバーとして起動し、HTTPリクエストを送信して推論を行う方法を初心者向けに解説しました。
少しでもプログラミング初心者の方の理解に役立てば幸いです。ぜひ、実際にllama.cppサーバーを動かしてみて、色々なモデルで推論を試してみてください。

📒Google Colabノートブック

Google Colab

参考サイト

GitHub - ggerganov/llama.cpp: LLM inference in C/C++
LLM inference in C/C++. Contribute to ggerganov/llama.cpp development by creating an account on GitHub.
Weave と Elyza-tasks-100 で ローカルLLMを評価する|npaka
「Weave」と「Elyza-tasks-100」で ローカルLLMの評価を試したので、まとめました。 1. Weave と Elyza-tasks-100 「Weave」は、LLMアプリケーションの記録、実験、評価のためのツールです。「Weights & Biases」が提供する機能の1つになります。「評価関数...
https://note.com/_4piken/n/n6bf08e547f1e
Google Colab で Llama-2-70B-chat-GGUF を試す。|npaka
「Google Colab」で「Llama-2-70B-chat-GGUF」を試したので、まとめました。 1. Llama-2-70B-chat-GGUF 「TheBloke/Llama-2-70B-chat-GGUF」を利用します。2023年9月12日現在、70Bは「Llama 2」の最大パラメータモデルになり...
mmnga/umiyuki-Umievo-itr012-Gleipnir-7B-gguf · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

コメント

タイトルとURLをコピーしました