Files
2026-07-13 12:24:33 +08:00

256 lines
9.6 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Mooncake
========
.. warning::
This page documents the behavior of LMCache's in-process mode (deprecated). Please consider using :doc:`LMCache MP mode </mp/index>` for better feature support and performance. For the MP mode equivalent of this page, see :doc:`/mp/l2_storage/mooncake_store`.
.. _mooncake-overview:
Overview
--------
`Mooncake <https://github.com/kvcache-ai/Mooncake>`_ is an open-source distributed KV cache storage system designed specifically for LLM inference scenarios.
The system creates a distributed memory pool by aggregating memory space contributed by various client nodes, enabling efficient resource utilization across clusters.
By pooling underutilized DRAM and SSD resources from multiple nodes, the system forms a unified distributed storage service that maximizes resource efficiency.
.. image:: ../../assets/mooncake-store-preview.png
:alt: Mooncake Architecture Diagram
Key Features
~~~~~~~~~~~~
- **Distributed memory pooling**: Aggregates memory contributions from multiple client nodes into a unified storage pool
- **High bandwidth utilization**: Supports striping and parallel I/O transfer of large objects, fully utilizing multi-NIC aggregated bandwidth
- **RDMA optimization**: Built on Transfer Engine with support for TCP, RDMA (InfiniBand/RoCEv2/eRDMA/NVIDIA GPUDirect)
- **Dynamic resource scaling**: Supports dynamically adding and removing nodes for elastic resource management
For detailed architecture information, see the `Mooncake Architecture Guide <https://kvcache-ai.github.io/Mooncake/design/mooncake-store.html>`_.
Quick Start
-----------
Install Mooncake via pip:
.. code-block:: bash
pip install mooncake-transfer-engine
This package includes all necessary components:
- ``mooncake_master``: Master service that manages cluster metadata and coordinates distributed storage operations
- ``mooncake_http_metadata_server``: HTTP-based metadata server used by the underlying transfer engine for connection establishment
- Mooncake Python bindings
For production deployments or custom builds, see the `Build Instructions <https://kvcache-ai.github.io/Mooncake/getting_started/build.html>`_.
Setup and Deployment
~~~~~~~~~~~~~~~~~~~~
**Prerequisites:**
- Machine with at least one GPU for vLLM inference
- RDMA-capable network hardware and drivers (recommended) or TCP network
- Python 3.8+ with pip
- vLLM and LMCache installed
**Step 1: Start Infrastructure Services**
Start the Mooncake master service (with builtin HTTP metadata server):
.. code-block:: bash
# Master service (use -v=1 for verbose logging)
# The flag enables the integrated HTTP metadata server
mooncake_master --enable_http_metadata_server=1
Expected output:
.. code-block:: text
Master service started on port 50051
HTTP metrics server started on port 9003
Master Metrics: Storage: 0.00 B / 0.00 B | Keys: 0 | ...
**Step 2: Create Configuration File**
Create your ``mooncake-config.yaml``:
.. code-block:: yaml
# LMCache Configuration
local_cpu: False
remote_url: "mooncakestore://localhost:50051/"
max_local_cpu_size: 2 # small local buffer
numa_mode: "auto" # reduce tail latency with multi-NUMA/multi-NIC
pre_caching_hash_algorithm: sha256_cbor_64bit
# Mooncake Configuration (via extra_config)
extra_config:
use_exists_sync: true
save_chunk_meta: False # Enable chunk metadata optimization
local_hostname: "localhost"
metadata_server: "http://localhost:8080/metadata"
protocol: "rdma"
device_name: "" # leave empty; autodetect device(s)
global_segment_size: 21474836480 # 20 GiB per worker
master_server_address: "localhost:50051"
local_buffer_size: 0 # rely on LMCache local_cpu as the buffer
mooncake_prefer_local_alloc: true # prefer local segment if available
**Step 3: Start vLLM with Mooncake**
.. code-block:: bash
# If you see persistent misses (no Mooncake hits), make sure
# PYTHONHASHSEED is fixed across processes (e.g., export PYTHONHASHSEED=0).
LMCACHE_CONFIG_FILE="mooncake-config.yaml" \
vllm serve \
meta-llama/Llama-3.1-8B-Instruct \
--max-model-len 65536 \
--kv-transfer-config \
'{"kv_connector":"LMCacheConnectorV1", "kv_role":"kv_both"}'
**Step 4: Verify the Setup**
Test the integration with a sample request:
.. code-block:: bash
curl -X POST "http://localhost:8000/v1/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-3.1-8B-Instruct",
"prompt": "The future of AI is",
"max_tokens": 100,
"temperature": 0.7
}'
**Debugging Tips:**
1. **Enable verbose logging:**
.. code-block:: bash
mooncake_master -v=1
2. **Check service status:**
.. code-block:: bash
# Check if services are running
ps aux | grep mooncake
netstat -tlnp | grep -E "(8080|50051)"
3. **Monitor metrics:**
Access metrics at ``http://localhost:9003`` when master service is running.
Configuration
-------------
**LMCache Parameters:**
.. list-table::
:header-rows: 1
:widths: 25 15 60
* - Parameter
- Default
- Description
* - ``chunk_size``
- 256
- Number of tokens per KV chunk
* - ``remote_url``
- Required
- Mooncake store connection URL (format: ``mooncakestore://host:port/``).
* - ``remote_serde``
- "naive"
- Serialization method for remote storage
* - ``local_cpu``
- False
- Enable/disable local CPU caching (set to False for pure Mooncake evaluation)
* - ``max_local_cpu_size``
- Required
- Maximum local CPU cache size in GB (required even when local_cpu is False)
* - ``numa_mode``
- "auto"
- NUMA binding mode. "auto" is recommended on multiNIC/multiNUMA systems to reduce tail latency.
* - ``pre_caching_hash_algorithm``
- "sha256_cbor_64bit"
- Hash used for pre-caching keying. For crossprocess consistency, fix ``PYTHONHASHSEED`` (e.g., export ``PYTHONHASHSEED=0``).
**Mooncake Parameters (via extra_config):**
.. list-table::
:header-rows: 1
:widths: 25 15 60
* - Parameter
- Default
- Description
* - ``local_hostname``
- Required
- Hostname/IP of the local node for Mooncake client identification
* - ``metadata_server``
- Required
- HTTP metadata server address. When starting master with ``--enable_http_metadata_server=1``, it exposes this endpoint.
* - ``master_server_address``
- Required
- Mooncake master service address (host:port format)
* - ``protocol``
- "rdma"
- Communication protocol ("rdma" for high performance; "tcp" for compatibility)
* - ``device_name``
- ""
- RDMA device specification (e.g., "erdma_0,erdma_1" or "mlx5_0,mlx5_1"). Leave empty for autodetection in most setups.
* - ``global_segment_size``
- 21474836480
- **Memory size contributed by each vLLM worker** in bytes (e.g., 20 GiB recommended)
* - ``local_buffer_size``
- 0
- Local buffer size in bytes used by Mooncake. Behavior depends on ``save_chunk_meta``:
- When ``save_chunk_meta: False`` (recommended), LMCache uses its local CPU backend for zerocopy RDMA, so Mooncake's ``local_buffer_size`` can be ``0``.
- When ``save_chunk_meta: True``, Mooncake uses its own local buffer; set this to a proper value (e.g., several GiB).
- Note: Some RDMA NICs have memory registration limits; registering LMCache's large CPU buffer can fail on constrained devices. In those cases, consider enabling ``save_chunk_meta: True`` and sizing ``local_buffer_size`` instead.
* - ``transfer_timeout``
- 1
- Timeout for transfer operations in seconds
* - ``storage_root_dir``
- ""
- The root directory for persistence (e.g., "/mnt/mooncake")
* - ``save_chunk_meta``
- False
- Whether to save chunk metadata alongside data. Set to ``False`` to enable the optimized zerocopy path in LMCache.
* - ``use_exists_sync``
- False
- Use synchronous existence checks to avoid async scheduling overhead in hot paths.
* - ``mooncake_prefer_local_alloc``
- False
- Prefer allocating on the local segment when possible.
.. important::
**Understanding global_segment_size**: This parameter defines the amount of memory each vLLM worker contributes to the distributed memory pool.
The total cluster memory available for KV cache storage will be: ``number_of_vllm_workers × global_segment_size``.
Adjust this value based on your available system memory and expected cache requirements.
.. tip::
If you consistently get misses (no Mooncake hits), ensure all processes use the same hashing seed: ``export PYTHONHASHSEED=0``. This keeps precaching keys consistent across processes.
.. note::
RDMA device(s) usually do not need to be specified; leaving ``device_name`` empty works for most deployments.
Additional Resources
--------------------
- `Mooncake Store Architecture <https://kvcache-ai.github.io/Mooncake/design/mooncake-store.html>`_
- `Mooncake Store Deployment Guide <https://kvcache-ai.github.io/Mooncake/deployment/mooncake-store-deployment-guide.html>`_
- `Mooncake Store Python API Reference <https://kvcache-ai.github.io/Mooncake/python-api-reference/mooncake-store.html>`_
- `Transfer Engine Documentation <https://kvcache-ai.github.io/Mooncake/design/transfer-engine/index.html>`_
- `Build Instructions <https://kvcache-ai.github.io/Mooncake/getting_started/build.html>`_
- `GitHub Repository <https://github.com/kvcache-ai/Mooncake>`_
- `LMCache Integration Guide <https://kvcache-ai.github.io/Mooncake/getting_started/examples/lmcache-integration.html>`_