Categories: AI技術

llama-serverのコマンドの使い方|ローカルLLMサーバーを始める手順

llama.cppを使ったllama-serverコマンドは、ローカル環境で大規模言語モデル(LLM)を手軽に動かしたい方に最適なツールです。この記事では、llama-serverの基本的なコマンドの使い方や、サーバー起動手順、実際にリクエストを送る方法までを分かりやすく解説します

llama-serverとは

llama-serverは、llama.cppプロジェクトが提供するLLMサーバー機能です。ローカルPC上でLLMモデルを動かし、HTTPリクエストでテキスト生成や会話ができるようになります。サーバーを立てることで、モデルの読み込みを一度だけ行い、複数回の推論を効率よく実行できます。

llama.cppとは

llama.cppは、Meta(旧Facebook)社が開発した大規模言語モデル(LLM)であるLlamaやLlama2の重みファイルを、C/C++で効率的に動作させるための軽量な推論エンジンです。

llama.cppのインストール方法はこちらを参照

llama-serverの主なコマンドオプション

llama-serverの主なコマンドラインオプションは以下の通りです。

  • -m, –model FNAME
    モデルファイルのパスを指定します。例:models/7B/ggml-model.gguf
  • –port N
    サーバーが待ち受けるポート番号を指定します。例:--port 8181
  • -t, –threads N
    推論に使うスレッド数を指定します。
  • -c, –ctx-size N
    プロンプトの最大長(トークン数)を指定します。
  • –lora FNAME
    LoRAアダプターのパスを指定します(必要に応じて)。

その他にも、CPU/GPUのリソース割り当てや、バッチ処理のスレッド数など、細かな設定が可能です。

llama-serverの起動手順

1.ターミナルでコマンドを実行

./llama-server -m ./models/モデル名.gguf --port 8181 

これでサーバーが指定ポート(例:8181)で起動します。

2.バックグラウンド実行(任意)

nohup ./llama-server -m ./models/モデル名.gguf --port 8181 > output.log &

この方法で、サーバーをバックグラウンドで動かせます。

リクエストの送信方法

サーバーが起動したら、curlコマンドやPostman、Node.jsなどからHTTPリクエストを送信できます。

例:curlでリクエストを送る場合

curl --request POST \
  --url http://localhost:8181/completion \
  --header "Content-Type: application/json" \
  --data '{"prompt": "富士山の高さは?", "n_predict": 128}'

このようにして、LLMに質問を投げて結果を受け取れます。

Pythonでリクエストを送る場合

Pythonでリクエストを送るには、requestsライブラリを使います。

import requests

url = "http://localhost:8181/completion"
headers = {"Content-Type": "application/json"}
data = {"prompt": "富士山の高さは?", "n_predict": 128}

response = requests.post(url, headers=headers, json=data)
print(response.json())

このスクリプトは、curlコマンドと同様のリクエストをPythonで実行し、サーバーのレスポンスをJSON形式で取得します。


もしサーバーがOpenAI互換エンドポイント(例:/v1/chat/completions)をサポートしている場合、以下のようにopenaiパッケージも利用できます。

import openai

client = openai.OpenAI(
    base_url="http://localhost:8181/v1",  # 互換エンドポイントが有効な場合
    api_key="dummy"  # 適当な文字列でOK
)

completion = client.chat.completions.create(
    model="gpt-3.5-turbo",  # 実際はローカルLLMが使われる
    messages=[
        {"role": "system", "content": "あなたはAIアシスタントです。"},
        {"role": "user", "content": "富士山の高さは?"}
    ]
)

print(completion.choices[0].message.content)

/v1/chat/completionsエンドポイントが利用可能な場合のみ有効です。通常の/completionエンドポイントにはrequestsを使います。

よく使うオプション一覧

オプション説明
-m, –modelモデルファイルのパス
–portサーバー待ち受けポート
-t, –threads推論に使うスレッド数
-c, –ctx-sizeプロンプトの最大長(トークン数)
–loraLoRAアダプターのパス

まとめ(結論)

llama-serverコマンドを使えば、ローカル環境でLLMサーバーを簡単に起動でき、API経由でテキスト生成や会話が可能です。モデルファイルやポート番号、スレッド数などのオプションを活用し、用途に合わせて柔軟に設定しましょう

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村