0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker Offload & Composeでマルチエージェントをクラウド上に一発起動する

Posted at

Docker Desktop 4.43系(2025/7/3リリース)で、AIモデル・エージェント・MCPツールをcompose.yamlに宣言してdocker compose up一発で起動できるようになりましたね。

ComposeをNVIDIA L4 GPU付きクラウドにそのまま載せ替えるDocker Offloadもβ提供が始まり、貧弱ノートPCでも大規模モデルを回せる環境が整ってきました。

今回は、公式サンプルdocker/compose-for-agentsのA2A Multi‑Agent Fact Checkerを元に、Composeだけでマルチエージェントを動かす手順を紹介します。また、Docker OffloadでのCompose起動もやってみたので、それだけでもご覧ください。

なお、一部の画像はDocker Captains向け公式コンテンツキット(Docker Offload Content Kit)から引用しています。

サンプルの構成

A2A Multi‑Agent Fact Checkerは、Google ADK (Agent Development Kit)とA2Aプロトコルで3つのエージェント(Auditor/Critic/Reviser)を協調させて、与えられた主張を調査・検証・推敲して最終結論を返すようなマルチエージェントのサンプルです。

  • Auditor(監査役): 主張を受け取った後にタスクを分割し、サブタスクをCriticとReviser へ振り分け、最終回答をUIへ返す
  • Critic(批評家): DuckDuckGo MCPツールで外部検索を実行し、主張を裏付ける証拠を集める
  • Reviser(推敲者): Criticが集めた証拠とAuditorの草案を読み込んで、整合性チェックと文章推敲を行う

外部検索はMCP Gatewayが仲介し、推論モデルはGemma 3 4B‑Q4をDocker Model Runnerでホストします。

スクリーンショット 2025-07-20 21.41.42.png

compose.yamlの要点

以下がcompose.yamlの全文です。

compose.yaml
services:
  # Auditor Agent coordinates the entire fact-checking workflow
  auditor-agent-a2a:
    build:
      target: auditor-agent
    ports:
      - "8080:8080"
    environment:
      - CRITIC_AGENT_URL=http://critic-agent-a2a:8001
      - REVISER_AGENT_URL=http://reviser-agent-a2a:8001
    depends_on:
      - critic-agent-a2a
      - reviser-agent-a2a
    models:
       agents:
         endpoint_var: MODEL_RUNNER_URL
         model_var: MODEL_RUNNER_MODEL

  critic-agent-a2a:
    build:
      target: critic-agent
    environment:
      - MCPGATEWAY_ENDPOINT=http://mcp-gateway:8811/sse
    depends_on:
      - mcp-gateway
    models:
       gemma3:
         # specify which environment variables to inject into the container
         endpoint_var: MODEL_RUNNER_URL
         model_var: MODEL_RUNNER_MODEL

  reviser-agent-a2a:
    build:
      target: reviser-agent
    environment:
      - MCPGATEWAY_ENDPOINT=http://mcp-gateway:8811/sse
    depends_on:
      - mcp-gateway
    models:
       gemma3:
         endpoint_var: MODEL_RUNNER_URL
         model_var: MODEL_RUNNER_MODEL

  mcp-gateway:
    # mcp-gateway secures your MCP servers
    image: docker/mcp-gateway:latest
    use_api_socket: true
    command:
      - --transport=sse
      - --servers=duckduckgo
      # add an MCP interceptor to log the responses
      - --interceptor
      - after:exec:echo RESPONSE=$(cat) >&2

models:
  # declare LLM models to pull and use
  gemma3:
    model: ai/gemma3:4B-Q4_0
    context_size: 10000 # 3.5 GB VRAM
    #context_size: 131000 # 7.6 GB VRAM

トップレベルmodels

Compose(2.38以降)に追加された新機能で、LLMイメージをOCI Artifactとして宣言します。Docker Model Runnerが自動でOCI ArtifactをプルしてAPI エンドポイントを発行します。

各サービスのmodels

各サービスが「どのモデルを使うか」「エンドポイントURL/モデル名をどの環境変数に渡すか」を記述します。

起動時に以下を注入してくれるので、アプリ側では環境変数を読むだけで済みます。

export MODEL_RUNNER_URL=http://model-runner:12434
export MODEL_RUNNER_MODEL=gemma3

MCP Gateway

docker/mcp-gatewayイメージがDuckDuckGo MCP Serverをフォークして、CriticエージェントとSSEで通信します。--interceptorでレスポンスをそのままstderrに流す設定もワンライナーで追加されています。

依存関係

以前からのComposeと同様に、depends_onを使って起動順序を固定しています。Auditor → Critic/Reviser → MCP Gateway の順に立ち上がるので、接続待ちのリトライロジックを書かずに済みます。

ローカルで動かす

docker compose up --buildで起動します。

[+] Running 8/9
 ✔ reviser-agent-a2a                  Built                                                                                                                              0.0s
 ✔ critic-agent-a2a                   Built                                                                                                                              0.0s
 ✔ auditor-agent-a2a                  Built                                                                                                                              0.0s
 ⠴ gemma3 Configuring                                                                                                                                                   76.5s
 ✔ Network a2a_default                Created                                                                                                                            0.0s
 ✔ Container a2a-mcp-gateway-1        Created                                                                                                                            2.0s
 ✔ Container a2a-reviser-agent-a2a-1  Created                                                                                                                            0.1s
 ✔ Container a2a-critic-agent-a2a-1   Created                                                                                                                            0.1s
 ✔ Container a2a-auditor-agent-a2a-1  Created

Gemma 3 4B‑Q4は量子化済みなので、自環境(MacBook Air M2)でも起動しました。

スクリーンショット 2025-07-21 9.03.26.png

ブラウザで http://localhost:8080 を開いて、How far is the Moon from the Earth?と入力すると、CriticがDuckDuckGoで検索して、Reviserが推敲したうえでAuditorが最終回答を返してくれました。

スクリーンショット 2025-07-21 9.19.19.png

Docker Offloadを使う

より大きなモデル(Gemma 27B Q4)を試す場合、ローカルGPUが足りなくなるような場面があります。そのときは Docker Offloadを有効にして、モデル定義を上書きするだけでL4 GPU付きクラウドに載せ替えられます。

Docker Offloadの有効化

まずは、公式サイトからβアクセスの申し込みをします(今回はDocker Captain特典のEarly Accessで使っています)。

Beta featuresタブで「Enable Docker Offload」と「Enable Docker Offload GPU Support」にチェックを入れます。

スクリーンショット 2025-07-21 9.30.46.png

左上にトグルが出てくるので、これをクラウドアイコンに切り替えるとDocker Offloadが起動します(docker offload startでも可)。

スクリーンショット 2025-07-21 9.32.18.png

compose.offload.yamlを用意

Docker Offloadで起動する場合のモデル指定を、compose.offload.yamlに記述します。

compose.offload.yaml
models:
  gemma3:
    # pre-pull the model on Docker Model Runner
    model: ai/gemma3-qat:27B-Q4_K_M	
    context_size: 10000 # 18.6 GB VRAM
    # context_size: 80000 # 28.37 GB VRAM
    # context_size: 131000 # 35.5 GB VRAM

Composeを動かす

docker compose -f compose.yaml -f compose.offload.yaml up --buildを実行すると、compose.offload.yamlの記述(トップレベルmodels)をcompose.yamlに上書きする形で、クラウド上でComposeが起動します。

スクリーンショット 2025-07-21 9.36.22.png

スクリーンショット 2025-07-21 9.36.39.png

Docker Offloadは300 GPU 分の無料クレジットが付与されて、超過分は1 GPU 分あたり0.015 USDで課金されます 。終了後はdocker offload stopを忘れずに実行します。

スクリーンショット 2025-07-21 10.08.05.png

感想

ComposeとOffloadの組み合わせを今回試してみましたが、モデル・ツール・エージェントを一括管理できるのと、ローカルでもクラウドでも同じコマンドで動かせるのはやっぱり便利ですね。AIエージェントまわりの進化が凄まじいのでもっといい方法があるかもしれないのですが、その場合は教えていただけるとうれしいです。

Docker Offloadに興味がある場合は、まずはクレジット内でいろいろ試してみてください。

参考

Docker Brings Compose to the AI Agent Era
Docker Offload usage and billing

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?