Docker を使用した LLM のローカル実行: モデル ランナーのクイックスタート ガイド

AIは急速に最新のアプリケーションの中核的な部分になりつつありますが、大規模言語モデル(LLM)をローカルで実行することは依然として苦痛です。適切なモデルの選択、ハードウェアの癖の回避、パフォーマンスの最適化の間で、構築を開始する前に行き詰まりがちです。同時に、開発、テスト、さらにはオフラインのユースケースのためにLLMをローカルで実行する柔軟性を求める開発者が増えています。そこで、 Docker Model Runner の出番です。

Docker Desktop 440 for macOS on Appleシリコンでベータ版として利用可能になったModel Runnerは、ローカルマシン上でLLMを簡単にプル、実行、実験できるようにします。インフラストラクチャの頭痛の種や複雑なセットアップはありません。Model Runner が最初のベータ リリースで提供しているものは次のとおりです。

  • llama.cppの上に構築された統合エンジンを搭載したローカルLLM推論、OpenAI 互換 API を介して公開されます。
  • 推論エンジンをホストプロセスとして直接実行することにより、AppleシリコンでGPUを高速化します。
  • 標準のOCIアーティファクトとしてパッケージ化された、人気のあるすぐに使用できるモデルのコレクションが増えているため、既存のContainer Registryインフラストラクチャ間での配布と再利用が容易になります。

Docker Model Runner を使用して自分のコンピューターで LLM をローカルに実行する方法については、読み続けてください。

LLM の Docker Model Runner の有効化

Docker Model Runner はデフォルトで有効になっており、Docker Desktop の一部として出荷されます 4。40 は Apple シリコン ハードウェア上の macOS 用です。ただし、無効にした場合は、CLIを使用して1つのコマンドで簡単に有効にできます。

1
docker desktop enable model-runner

デフォルトの設定では、モデルランナーはホスト上のDockerソケットを介してのみアクセスするか、特別な model-runner.docker.internal エンドポイントを介してコンテナにアクセスできます。ホストプロセスからTCP経由で操作する場合(コードベース内のOpenAI SDKを直接指したい場合など)、目的のポートを指定してCLI経由で有効にすることもできます。

1
docker desktop enable model-runner --tcp 12434

コマンドラインインターフェイスCLIの概要

Docker Model Runner CLIは、コンテナの操作と非常によく似ていますが、実行モデルに関してもいくつかの注意点がありますので、確認してみましょう。このガイドでは、非常に小さなモデルを使用して、リソースが限られているハードウェアで実行し、高速で応答性の高いユーザー エクスペリエンスを提供することを確認します。具体的には、2024年にHuggingFaceによって公開されたSmolLMモデルを使用します。

まず、モデルを引っ張ることから始めます。Docker イメージと同様に、特定のタグを省略すると、デフォルトで latest になります。しかし、この例では、具体的に説明しましょう。

1
docker model pull ai/smollm2:360M-Q4_K_M

ここでは、360Mパラメータと4ビット量子化を持つSmolLM2モデルを引っ張っています。Docker によって配布されるモデルのタグは、モデルのメタデータに関して次のスキームに従います。

1
{model}:{parameters}-{quantization}

モデルを引っ張った後、質問をしてみてってみましょう。

1
2
3
docker model run ai/smollm2:360M-Q4_K_M "Give me a fact about whales."
 
Whales are magnificent marine animals that have fascinated humans for centuries. They belong to the order Cetacea and have a unique body structure that allows them to swim and move around the ocean. Some species of whales, like the blue whale, can grow up to 100 feet (30 meters) long and weigh over 150 tons (140 metric tons) each. They are known for their powerful tails that propel them through the water, allowing them to dive deep to find food or escape predators.

このクジラの事実は本当に本当ですか?正直なところ、私には手がかりがありません。私は海洋生物学者ではありません。しかし、これはより広いポイントを説明するための楽しい例です:LLMは時々不正確または予測不可能な情報を生成することがあります。何事もそうですが、特にパラメーターの数が限られている、または量子化値が小さい小さなローカルモデルでは、何が得られるかを確認することが重要です。

では、 docker model run コマンドを実行したとき、 実際には 何が起こったのでしょうか?技術的な基盤を詳しく調べることは、 docker container run コマンドを何年も使用した後に予想されるものとは異なるため、理にかなっています。Model Runner の場合、このコマンドはコンテナをスピンアップしません。代わりに、Docker Desktop を介して Model Runner によってホストされる推論サーバー API エンドポイントを呼び出し、OpenAI 互換の API を提供します。推論サーバーは、 llama.cpp を推論エンジンとして使用し、ネイティブ ホスト プロセスとして実行し、要求されたモデルをオンデマンドで読み込み、受信した要求に対して推論を実行します。その後、別のモデルが要求されるまで、または事前定義された非アクティブ タイムアウト (現在は 5 分) に達するまで、モデルはメモリに残ります。 

これは、ホスト プロセスまたはコンテナー内から特定のモデルと対話する前に docker model run を実行する必要がないことも意味します。Model Runner は、リクエストされたモデルをオンデマンドで透過的に読み込みます。これは、事前にプルされ、ローカルで利用可能であると仮定します。 

他のプロセスのモデルとの対話といえば、アプリケーションコード内からModel Runnerと統合する方法を見てみましょう。

GenAI開発を楽しむ

Model Runner は、OpenAI エンドポイントを http://model-runner.docker.internal/engines/v1コンテナの場合、および http://localhost 未満: ホストプロセスの場合は /engines/v112434 (デフォルトのポート 12434で TCP ホストアクセスを有効にしている場合)。このエンドポイントを使用して、OpenAI と互換性のあるクライアントまたはフレームワークをフックできます。 

この例では、Javaと LangChain4jを使用しています。私はホスト上で直接Javaアプリケーションを開発して実行するので、CLIの使用例ですでに見たDockerモデルのアドレス指定スキームに従って、Model Runner OpenAIエンドポイントを baseUrl として設定し、使用するモデルを指定するだけです。 

そして、それだけで十分です、かなり簡単ですよね?

このコードを機能させるには、モデルが既にローカルに存在する必要があることに注意してください。

1
2
3
4
5
6
7
OpenAiChatModel model = OpenAiChatModel.builder()
        .baseUrl("http://localhost:12434/engines/v1")
        .modelName("ai/smollm2:360M-Q4_K_M")
        .build();
 
String answer = model.chat("Give me a fact about whales.");
System.out.println(answer);

他のモデルを探す

さて、あなたはおそらくSmolLMモデルを使用したいだけではないでしょうから、現在Model Runnerで使用できる他のモデルは何か疑問に思うかもしれません。最も簡単な方法は、 Docker Hub の ai/ 名前空間を確認することです。

Docker Hubでは、ローカルのユースケースに適した最も人気のあるモデルの厳選されたリストを見つけることができます。これらは、さまざまなハードウェアとパフォーマンスのニーズに合わせて、さまざまなフレーバーで提供されます。また、モデルリポジトリの概要ページにあるモデルカードにも、それぞれの詳細が記載されています。

Docker を使用した LLM のローカル実行
Docker 2 を使用した LLM のローカル実行

次は何ですか?

もちろん、これはDocker Model Runnerで何ができるかを初めて見たに過ぎません。私たちはさらに多くの機能を開発しており、あなたがそれを使って何を構築するかを見るのが待ちきれません。実践的なガイダンスについては、Model Runner を使用した LLM のローカル実行に関する最新の YouTube チュートリアル をご覧ください。また、ブログでは、Model Runnerの機能を拡張し続ける中で、より多くのアップデート、ヒント、詳細な情報を共有していきますので、ぜひご注目ください

リソース