Docker Model Runnerでローカル環境にLLM APIサーバーを建てる
この記事は
Docker Model Runnerを使って、ローカル環境(Mac)上にOpenAI API互換のAPIサーバーを簡単に構築する方法です。
Docker Model Runnerとは
Docker Desktopの機能の一つで、ローカル環境で簡単にLLMを実行できます。Docker Desktop 4.40から使えます。
2025/04/07現在、Apple SilliconのMacでしか使えないようです。Mac miniのM2 ProモデルおよびMacbook AirのM3モデルで動作確認しています。いずれもメモリーは16Gバイトです。
使用方法
Model Runnerを有効化する
私の場合はDocker Desktopを4.40にアップグレードしただけで使えるようになりました。
$ docker model status
Docker Model Runner is running
もし使えない場合には設定画面の以下の項目にチェックが入っているか確認してください。
モデルをダウンロードする
docker model pull イメージ名
でモデルをダウンロードできます。mistralの場合は以下のようになります。
docker model pull ai/mistral
使用可能なモデルは以下で確認できます。
試しにコンソールで実行してみる
コンソールでdocker model run モデル名
を実行すると、インタラクティブなチャットを実行することができます。
$ docker model run ai/mistral
Interactive chat mode started. Type '/bye' to exit.
> こんにちは。あなたは誰ですか?
こんにちは!私はAIであり、ここではお尋ねを受け、お答えしています。私はあなたの質問や問題を解決するために、何かを教えることを目的としています。何かお尋ねおいしいと思っていますか?
> /bye
Chat session ended.
curlでAPIを発行してみる
Docker Model RunnerはOpenAI互換のAPIサーバー機能を持っています。ローカルホストからcurlで接続してみましょう。
ポート番号を設定する
まずはホストの待受ポート番号を設定します。今回は9080番を使用することにします。
設定画面からポート番号を入力しましたが、なぜかNaNと表示されて入力できませんでした。
ポートを入力できない
なので以下のコマンドラインから設定します。
$ docker desktop enable model-runner --tcp 9080
すると、設定画面にもポートが設定されていました。
APIにアクセスする
先ほどのように、まずはターミナルからmodelを実行します。
$ docker model run ai/mistral
Interactive chat mode started. Type '/bye' to exit.
この状態で、9080番に対し、curlを実行します。
以下のようなシェルスクリプトを作りました。
#!/bin/sh
curl http://localhost:9080/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/mistral",
"messages": [
{
"role": "system",
"content": "あなたは高校の物理学の教師です。分かりやすく物理学を教えます"
},
{
"role": "user",
"content": "相対性理論について、日本語で200字以内で教えてください"
}
]
}'
実行した結果は以下のようになりました。
OpenAI互換のエンドポイントとしては以下が用意されているようです。
GET /engines/llama.cpp/v1/models
GET /engines/llama.cpp/v1/models/{namespace}/{name}
POST /engines/llama.cpp/v1/chat/completions
POST /engines/llama.cpp/v1/completions
POST /engines/llama.cpp/v1/embeddings
ちなみにllama.cppの部分は省略することも可能でhttp://localhost:9080/engines/v1/chat/completions
でもアクセスできました。
別コンテナからアクセスする場合
ちなみにホスト上ではなく、ホスト上の他のコンテナからアクセスする場合にはtcpの設定は不要でhttp://model-runner.docker.internal/
でアクセスできます。
Discussion