Chunk Statistics Example
This example demonstrates how to use LMCache's chunk statistics feature to track and analyze KV cache chunk reuse patterns.
Overview
Chunk statistics provides insights into cache efficiency by tracking:
- Total chunks processed
- Unique chunks encountered
- Duplicate chunks (cache hits)
- Reuse rate (duplicate/total ratio)
Prerequisites
- LMCache installed with vLLM integration
- A model for testing (e.g.,
/data1/deepseek/DeepSeek-V2-Lite-Chat)
Examples
Example 1: Memory Bloom Filter Strategy
The memory bloom filter strategy uses a probabilistic data structure for efficient duplicate detection with minimal memory overhead.
Configuration
See memory_bloom_filter.yaml for the configuration file.
Running the Example
# Start vLLM with chunk statistics enabled
LMCACHE_CONFIG_FILE=memory_bloom_filter.yaml \
PYTHONHASHSEED=0 \
python3 -m vllm.entrypoints.cli.main serve <model_path> \
--load-format dummy \
-tp 2 \
--trust-remote-code \
--served-model-name vllm_cpu_offload \
--gpu-memory-utilization 0.5 \
--max-num-seqs 64 \
--no-enable-prefix-caching \
--kv-transfer-config '{"kv_connector":"LMCacheConnectorV1","kv_role":"kv_both"}'
Query Statistics
# Get current statistics (default port: 6999 for scheduler)
curl http://localhost:6999/chunk_statistics/status
# Pretty print JSON output
curl http://localhost:6999/chunk_statistics/status | jq .
# Start statistics collection (if not auto-started)
curl -X POST http://localhost:6999/chunk_statistics/start
# Stop statistics collection
curl -X POST http://localhost:6999/chunk_statistics/stop
# Reset statistics
curl -X POST http://localhost:6999/chunk_statistics/reset
Expected Output
{
"enabled": true,
"total_requests": 3,
"timing": {
"lookup_time_seconds": 0.044486284255981445,
"record_statistics_time_seconds": 6.246566772460938e-05,
"check_exit_conditions_time_seconds": 5.7220458984375e-06,
"total_time_seconds": 0.04455447196960449,
"overhead_time_seconds": 6.818771362304688e-05,
"overhead_percentage": 0.1530434782608696
},
"total_chunks": 12,
"unique_chunks": 9,
"duplicate_chunks": 3,
"reuse_rate": 0.25,
"async_queue": {
"enabled": true,
"capacity": 100000,
"current_size": 0,
"max_size_reached": 0,
"full_blocks": 0,
"utilization": 0.0
},
"bloom_filter": {
"size_mb": 11.426279067993164,
"hash_count": 6,
"item_count": 9,
"bits_set": 54,
"fill_rate": 5.633768549952377e-07,
"expected_elements": 10000000,
"false_positive_rate": 0.01
},
"timestamp": 1763026696.7670634,
"auto_exit_enabled": false,
"auto_exit_timeout_hours": 0.0,
"auto_exit_target_unique_chunks": null
}
Example 2: File Hash Strategy
The file hash strategy writes chunk hashes to disk for exact tracking and offline analysis.
Configuration
See file_hash.yaml for the configuration file.
Running the Example
# Start vLLM with file hash strategy
LMCACHE_CONFIG_FILE=file_hash.yaml \
PYTHONHASHSEED=0 \
python3 -m vllm.entrypoints.cli.main serve <model_path> \
--load-format dummy \
-tp 2 \
--trust-remote-code \
--served-model-name vllm_cpu_offload \
--gpu-memory-utilization 0.5 \
--max-num-seqs 64 \
--no-enable-prefix-caching \
--kv-transfer-config '{"kv_connector":"LMCacheConnectorV1","kv_role":"kv_both"}'
Analyze Collected Data
Use the provided Python script to analyze the collected chunk hashes:
# Analyze chunk hashes from default directory
python analyze_chunk_hashes.py --input-dir /tmp/lmcache_chunk_statistics
# Export results to JSON file
python analyze_chunk_hashes.py --input-dir /tmp/lmcache_chunk_statistics --output analysis_results.json
Example 3: Auto-Stop Configuration
This example demonstrates automatic stopping based on time or chunk count.
Configuration
See auto_stop.yaml for the configuration file.
Running the Example
# Statistics will automatically stop after configured time or chunk count
LMCACHE_CONFIG_FILE=auto_stop.yaml \
PYTHONHASHSEED=0 \
python3 -m vllm.entrypoints.cli.main serve <model_path> \
--load-format dummy \
-tp 2 \
--trust-remote-code \
--served-model-name vllm_cpu_offload \
--gpu-memory-utilization 0.5 \
--max-num-seqs 64 \
--no-enable-prefix-caching \
--kv-transfer-config '{"kv_connector":"LMCacheConnectorV1","kv_role":"kv_both"}'
Configuration Options
Memory Bloom Filter Strategy
| Option | Default | Description |
|---|---|---|
chunk_statistics_mem_bf_expected_chunks |
20000000 | Expected number of chunks for capacity planning |
chunk_statistics_mem_bf_false_positive_rate |
0.01 | Target false positive rate (1%) |
File Hash Strategy
| Option | Default | Description |
|---|---|---|
chunk_statistics_file_output_dir |
/tmp/lmcache_chunk_statistics |
Directory for storing chunk hash files |
chunk_statistics_file_rotation_size |
104857600 | File size threshold for rotation (100MB) |
chunk_statistics_file_max_count |
100 | Maximum number of files to keep |
Understanding the Metrics
Reuse Rate
The reuse rate indicates cache efficiency:
- 0.0: No cache reuse (all chunks are unique)
- 0.5: 50% of chunks are duplicates
- 0.9: 90% of chunks are duplicates (high cache efficiency)
Bloom Filter Metrics
- size_mb: Memory used by the bloom filter
- fill_rate: Percentage of bits set in the bloom filter (0.0 to 1.0)
- false_positive_rate: Configured target false positive rate
Async Queue Metrics
- capacity: Maximum queue size
- current_size: Current number of items in queue
- max_size_reached: Peak queue size observed
- full_blocks: Number of times the queue was full
- utilization: Current queue utilization (0.0 to 1.0)
Best Practices
-
Choose the Right Strategy:
- Use
memory_bloom_filterfor real-time monitoring with minimal overhead - Use
file_hashfor exact tracking and offline analysis
- Use
-
Tune Bloom Filter Parameters:
- Set
expected_chunksbased on your workload size - Lower
false_positive_rateincreases memory usage but improves accuracy
- Set
-
Monitor Memory Usage:
- Track
bloom_filter_size_mbto ensure it fits in available memory - Adjust
expected_chunksif memory usage is too high
- Track
-
File Rotation:
- Configure appropriate
file_rotation_sizeto balance file size and count - Set
file_max_countto prevent unlimited disk usage
- Configure appropriate
Troubleshooting
Statistics Not Updating
Problem: Statistics remain at zero or don't update.
Solution:
- Verify
enable_chunk_statisticsis set totrue - Check that statistics collection is started
- Ensure requests are being processed
High Memory Usage
Problem: Bloom filter consuming too much memory.
Solution:
- Reduce
chunk_statistics_mem_bf_expected_chunks - Increase
chunk_statistics_mem_bf_false_positive_rate - Consider switching to
file_hashstrategy
File System Full
Problem: Disk space exhausted with file hash strategy.
Solution:
- Reduce
chunk_statistics_file_max_count - Decrease
chunk_statistics_file_rotation_size - Implement external log rotation