Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

EngineCoreClient サマリー

深度: [SHALLOW] 確信度: [VERIFIED] 最終更新: 2026-02-09

概要

EngineCoreClientはフロントエンドプロセス(AsyncLLM / LLM)とバックエンドプロセス(EngineCore)間のプロセス間通信を抽象化するコンポーネントである。ZeroMQソケットとmsgpackシリアライゼーションを使用し、EngineCoreRequestの送信とEngineCoreOutputsの受信を効率的に行う。

アーキテクチャ

フロントエンドプロセス            バックエンドプロセス
┌───────────────────┐            ┌───────────────────┐
│  AsyncMPClient    │            │  EngineCore       │
│                   │            │                   │
│  input_socket     ├──ROUTER──→│  (ZMQ受信)        │
│  (zmq.ROUTER)     │  msgpack   │                   │
│                   │            │                   │
│  output_socket    │←──PULL────┤  (ZMQ送信)        │
│  (zmq.PULL)       │  msgpack   │                   │
│                   │            │                   │
│  outputs_queue    │            │                   │
│  (asyncio.Queue)  │            │                   │
└───────────────────┘            └───────────────────┘

主要コンポーネント

コンポーネント用途ファイル
EngineCoreClient (ABC)抽象インターフェースtarget/vllm/vllm/v1/engine/core_client.py:63
MPClientマルチプロセスクライアント基底target/vllm/vllm/v1/engine/core_client.py:442
AsyncMPClient非同期マルチプロセスクライアント(AsyncLLM用)target/vllm/vllm/v1/engine/core_client.py:822
SyncMPClient同期マルチプロセスクライアント(LLM用)target/vllm/vllm/v1/engine/core_client.py
DPAsyncMPClientデータ並列(外部LB)target/vllm/vllm/v1/engine/core_client.py
DPLBAsyncMPClientデータ並列(内部LB)target/vllm/vllm/v1/engine/core_client.py
MsgpackEncoderリクエストのシリアライズtarget/vllm/vllm/v1/serial_utils.py
MsgpackDecoderレスポンスのデシリアライズtarget/vllm/vllm/v1/serial_utils.py

主要メソッド

EngineCoreClient (ABC)

メソッド説明
make_client()ファクトリ。設定に応じた適切なサブクラスを返す
make_async_mp_client()AsyncLLM用ファクトリ。DP構成も考慮
add_request()EngineCoreRequestを送信
get_output()EngineCoreOutputsを受信
abort_requests()リクエストキャンセル

AsyncMPClient

メソッド説明
_ensure_output_queue_task()L856ZMQ出力受信タスクを起動
get_output_async()L902asyncio.Queueから出力を取得
_send_input()L913EngineCoreRequestをZMQで送信
_send_input_message()L925ZMQ multipart送信(zero-copy対応)

ファクトリ選択ロジック

参照: target/vllm/vllm/v1/engine/core_client.py:99 (make_async_mp_client)

make_async_mp_client(vllm_config, executor_class, ...)
  ├─ data_parallel_size > 1 の場合:
  │   ├─ external_lb → DPAsyncMPClient
  │   └─ internal_lb → DPLBAsyncMPClient
  └─ それ以外 → AsyncMPClient

設定

パラメータデフォルト説明
parallel_config.data_parallel_size1データ並列数。>1でDP系クライアントを使用
parallel_config.data_parallel_external_lb外部ロードバランサ使用フラグ

呼び出しフロー

[送信パス]
AsyncLLM.add_request()
  → engine_core.add_request_async(request)
    → AsyncMPClient._send_input(REQUEST, request)
      → MsgpackEncoder.encode(request)
      → input_socket.send_multipart(msg, copy=False)
        → ZMQ ROUTER → バックエンドプロセス

[受信パス]
process_outputs_socket() [バックグラウンドタスク]
  → output_socket.recv_multipart()
    → MsgpackDecoder.decode(frames) → EngineCoreOutputs
    → outputs_queue.put_nowait(outputs)

AsyncLLM._run_output_handler()
  → engine_core.get_output_async()
    → outputs_queue.get() → EngineCoreOutputs

設計上の特徴

  • プロセス分離: EngineCoreが別プロセスで動作するため、GILの影響を受けずスケジューリングとGPU実行を並行可能
  • msgpackシリアライゼーション: msgspec.Structarray_like形式でコンパクトなバイナリ表現
  • zero-copy: ZMQ copy=False でメモリコピーを最小化。テンソルバッキングバッファの追跡(add_pending_message
  • weakref: 出力タスクがクライアントへの循環参照を持たないようweakrefを使用

関連ドキュメント