vLLM は、高速スループットのLLMサービスを必要とする開発者にとって、急速に定番の推論エンジンとなっています。私たちはLinux上のNVIDIA GPU用Docker Model RunnerにvLLMを導入し、その後WSL2を通じてWindowsに拡張しました。
しかし、今日はそれが変わります。Docker Model Runnerは現在、Apple SiliconのMetal GPUを用いてmacOSにvLLM推論をもたらす新しいバックエンドである vllm-metalをサポートしています。もしMシリーズチップを搭載したMacをお持ちなら、同じOpenAI互換API、 Claude Codeのようなツール用のAnthropic互換APIで、MLXモデルをvLLM上で実行し、すべて同じDockerワークフローで動作させることが可能です。
VLLM-メタルとは何ですか?
vllm-metalは、Apple Siliconに高性能なLLM推論をもたらすvLLM用のプラグインです。DockerとvLLMプロジェクトの共同開発により、MLX、Appleの機械学習フレームワーク、PyTorchを単一の計算経路に統合し、vLLMの既存のエンジン、スケジューラ、OpenAI互換APIサーバーに直接接続しています。
アーキテクチャはレイヤー化されており、vLLMのコア(エンジン、スケジューグラ、トークナイザー、API)は上位で変更されずに維持されます。MetalPlatform、MetalWorker、MetalModelRunnerからなるプラグインレイヤーがApple Siliconの特有処理を担当します。その下では、MLXが実際の推論を駆動し、PyTorchがモデルの読み込みと重み変換を担当します。この全スタックはAppleのGPUフレームワークであるMetal上で動作しています。
+-------------------------------------------------------------+
| vLLM Core |
| Engine | Scheduler | API | Tokenizers |
+-------------------------------------------------------------+
|
v
+-------------------------------------------------------------+
| vllm_metal Plugin Layer |
| +-----------+ +-----------+ +------------------------+ |
| | Platform | | Worker | | ModelRunner | |
| +-----------+ +-----------+ +------------------------+ |
+-------------------------------------------------------------+
|
v
+-------------------------------------------------------------+
| Unified Compute Backend |
| +------------------+ +----------------------------+ |
| | MLX (Primary) | | PyTorch (Interop) | |
| | - SDPA | | - HF Loading | |
| | - RMSNorm | | - Weight Conversion | |
| | - RoPE | | - Tensor Bridge | |
| | - Cache Ops | | | |
| +------------------+ +----------------------------+ |
+-------------------------------------------------------------+
|
v
+-------------------------------------------------------------+
| Metal GPU Layer |
| Apple Silicon Unified Memory Architecture |
+-------------------------------------------------------------+
図 1:VLLMメタルの高レベルアーキテクチャ図。クレジット: vllm-metal
Apple Siliconで特に効果的なのは、統一メモリです。CPUとGPUメモリ間でデータをコピーしなければならないディスクリートGPUとは異なり、Apple Siliconは単一のメモリプールを共有しています。VLLM-Metalはゼロコピーテンソル演算でこれを活用しています。効率的なKVキャッシュ管理のためのページ付き注意機能とグループ検索注意サポートと組み合わせることで、メモリ無駄を抑えつつ長いシーケンスを扱うことが可能になります。
vllm-metalは 、Hugging Faceでmlxコミュニティが公開したMLXモデルを動かしています。これらのモデルはMLXフレームワーク専用に構築されており、Metal GPUアクセラレーションを最大限に活用しています。Docker Model RunnerはバックエンドがインストールされるとMLXモデルを自動的にvllmメタルにルーティングし、それ以外は組み込みのMLXバックエンドにフォールバックします。
VLM-メタルの仕組み
VLLM-Metalはホスト上でネイティブに動作します。これは、Metal GPUへのアクセスには直接ハードウェアアクセスが必要であり、コンテナ内のMetalにはGPUパススルーがないため必要です。
バックエンドをインストールすると、Docker Model Runner:
- HubからDockerイメージを取得し、その中に自己完結型のPython 3が含まれています。vllm-metalとすべての依存関係が事前にパッケージ化された環境12 。
- それを'~/.docker/model-runner/vllm-metal/'に抽出します。
- 「vllm_metal」モジュールをインポートしてインストールを検証します。
互換性のあるモデルのリクエストが入ると、Docker Model RunnerのスケジューラはTCP経由で通信するvllmメタルサーバープロセスを起動し、標準のOpenAI APIを提供します。モデルはDockerの共有モデルストアから読み込まれ、そこには「docker model pull」で引き取るすべてのモデルが含まれています。
どのモデルがVLM-Metalに対応していますか?
VLM-MetalはMLX形式のセーフテンサーモデルに対応しています。Hugging Faceのmlxコミュニティは、Apple Silicon向けに最適化された量子化されたモデルの大規模なコレクションを維持しています。試してみるのが良い例です:
- https://huggingface.co/mlx-community/Llama-3。2-1B-インストラクター -4ビット
- https://huggingface.co/mlx-community/Mistral-7B-インディストラクト-v0。3-4ビット
- https://huggingface.co/mlx-community/Qwen3-Coder-Next-4ビット
Docker Model Runner を使ったvLLM Everywhereを使えます
vllm-metalにより、Docker Model Runnerは現在、3つの主要プラットフォームでvLLMをサポートしています。
|
プラットホーム |
バックエンド |
GPU |
|---|---|---|
|
リナックス |
VLM |
NVIDIA(CUDA) |
|
Windows(WSL2) |
VLM |
NVIDIA(CUDA) |
|
マック |
VLLM-メタル |
アップルシリコン(金属) |
同じDockerモデルコマンドはプラットフォームに関係なく動作します。モデルを引いて、実行してください。Docker Model Runnerはあなたのプラットフォームに適したバックエンドを選択します。
今すぐ始める
Docker Desktop 4のアップデート。Macなら62 以降で、バックエンドをインストールしてください:
docker model install-runner --backend vllm-metal
詳しくは Docker Model Runnerのドキュメント をご覧ください。貢献、フィードバック、バグ報告については、GitHubの docker/model-runner リポジトリをご覧ください。
還元:vllm-metalがオープンソースになった
Dockerでは、AI開発を加速する最良の方法はオープンに構築することだと考えています。だからこそ、DockerがvLLMコミュニティにvllmメタルプロジェクトを提供したことを誇りを持って発表します。もともとはDockerのエンジニアによってmacOS上のModel Runnerを動かすために開発されましたが、現在は vLLMのGitHub組織の下に置かれています。これにより、エコシステム内のすべての開発者がApple Silicon上で高性能推論の恩恵を受け、貢献できることが保証されます。また、リク・シュン・ユアン、リッキー・チェン、張然然ららも重要な貢献をしています。
599ドルのAI開発リグ
長い間、高スループットのvLLM開発は大きなGPUコストによって制限されてきました。始めるには、通常RTX 4090 (1ドル、700+)やエンタープライズグレードのA100/H100 カード(10ドル、000+)を備えた専用のLinuxボックスが必要です。
VLM-Metalは数学を変えます
今では、M4チップを搭載したベース価格599Mac Miniが実用的なvLLM開発環境となります。Apple Siliconは ユニファイドメモリを使用しているため、その 16GB(またはアップグレードされた 32GB/64GB)のRAMはGPUが直接アクセスできます。これにより、以下のことができます:
- 現地で開発・テストを行う: コーディングに使う同じマシンでvLLMベースのアプリケーションを構築しましょう。
- プロダクションミラーリング: Mac MiniでH100 クラスターで使うのと同じOpenAI互換APIを本番環境で使うのと同じAPIを使いましょう。
- エネルギー効率: 離散型GPUの消費電力(と発熱)のごく一部で推論を実行しましょう。
VLM-Metalはllama.cppと比べてどうですか?
私たちはLlama 3を使って両方のバックエンドをベンチマークしました。2 1Apple Silicon上のDocker Model Runnerを通じて提供される、同等の 4ビット量子化を持つB Instruct。
|
llama.cpp |
vLLM-メタル |
|
|---|---|---|
|
モデル |
ナマ/ラマ3。2-1B-インストラクター-GGUF:Q4_0 |
mlx-community/llama-3。2-1インディシチュート-4ビット |
|
フォーマット |
GGUF(Q4_0) |
セーフテンソル(MLX 4ビット) |
スループット(トークン/秒、ウォールクロック)
|
max_tokens |
llama.cpp |
vLLM-メタル |
スピードアップ |
|---|---|---|---|
|
128 |
333。3 |
251。5 |
1。3x |
|
512 |
345。1 |
279。0 |
1。3x |
|
1024 |
338。5 |
275。4 |
1。2x |
|
2048 |
339。1 |
279。5 |
1。2x |
各構成は3異なるプロンプ9ト(データポイントあたりの総リクエスト数)で3回実行されました。
スループットはcompletion_tokens/wall_clock_timeで測定され、両方のバックエンドに一貫して適用されます。
主な観察:
- llama.cppは常に~1。2xすべての出力長でvLLM-Metalよりも高速です。
- llama.cppスループットは非常に安定しています(~333-345 tok/s max_tokensに関係なく)、一方vLLM-Metalは個々の実行間でばらつきが大きい(134-343 tok/s)を示します。
- 両方のバックエンドはスケールが良いです。どちらのバックエンドも出力長が長くなるにつれて著しい劣化は見られません。
- 量子化手法は異なり(GGUF Q4_0 と MLX 4-bit)、これはエンジン単独ではなくフルスタック、エンジン+量子化のベンチマークとなります。
これらの結果に使われるベンチマークスクリプトは GitHubのGistとして利用可能です。
参加方法
Docker Model Runnerの強みはコミュニティにあり、成長の余地は常にあります。参加するには:
- リポジトリに星をつける: Docker Model Runnerリポジトリに星をつけてサポートを示してください。
- アイデアを寄せてください: 問題を作成したり、プルリクエストを提出したりしてください。皆さんのアイデアを楽しみにしています!
- 広めよう: DockerでAIモデルを動かすことに興味がある友人や同僚に伝えましょう。
私たちは Docker Model Runner のこの新しい章に非常に興奮しており、一緒に何を構築できるかを見るのが待ちきれません。さあ、仕事に取り掛かりましょう!
詳細情報
- 関連投稿をお読みください: OpenCode with Docker Model Runner for Private AI Coding
- Docker Model Runner の一般提供に関するお知らせを確認する
- 当社のModel Runner GitHubリポジトリをご覧ください
- シンプルなHello GenAIアプリケーションから始めましょう