lmcache-cli 0.4.5.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lmcache/__init__.py +84 -0
- lmcache/_version.py +24 -0
- lmcache/cli/__init__.py +1 -0
- lmcache/cli/commands/__init__.py +34 -0
- lmcache/cli/commands/base.py +157 -0
- lmcache/cli/commands/bench/__init__.py +557 -0
- lmcache/cli/commands/bench/engine_bench/__init__.py +1 -0
- lmcache/cli/commands/bench/engine_bench/config.py +245 -0
- lmcache/cli/commands/bench/engine_bench/interactive/__init__.py +274 -0
- lmcache/cli/commands/bench/engine_bench/interactive/config.json +10 -0
- lmcache/cli/commands/bench/engine_bench/interactive/schema.py +352 -0
- lmcache/cli/commands/bench/engine_bench/interactive/state.py +327 -0
- lmcache/cli/commands/bench/engine_bench/interactive/terminal.py +291 -0
- lmcache/cli/commands/bench/engine_bench/progress.py +145 -0
- lmcache/cli/commands/bench/engine_bench/request_sender.py +232 -0
- lmcache/cli/commands/bench/engine_bench/stats.py +275 -0
- lmcache/cli/commands/bench/engine_bench/workloads/__init__.py +153 -0
- lmcache/cli/commands/bench/engine_bench/workloads/base.py +122 -0
- lmcache/cli/commands/bench/engine_bench/workloads/long_doc_permutator.py +435 -0
- lmcache/cli/commands/bench/engine_bench/workloads/long_doc_qa.py +281 -0
- lmcache/cli/commands/bench/engine_bench/workloads/multi_round_chat.py +337 -0
- lmcache/cli/commands/bench/engine_bench/workloads/random_prefill.py +178 -0
- lmcache/cli/commands/describe.py +310 -0
- lmcache/cli/commands/kvcache.py +133 -0
- lmcache/cli/commands/mock.py +75 -0
- lmcache/cli/commands/ping.py +113 -0
- lmcache/cli/commands/query/__init__.py +155 -0
- lmcache/cli/commands/query/prompt.py +134 -0
- lmcache/cli/commands/query/request.py +357 -0
- lmcache/cli/commands/server.py +99 -0
- lmcache/cli/commands/tool/__init__.py +63 -0
- lmcache/cli/commands/tool/cache_simulator.py +113 -0
- lmcache/cli/commands/trace/__init__.py +505 -0
- lmcache/cli/commands/trace/dispatch.py +249 -0
- lmcache/cli/commands/trace/driver.py +372 -0
- lmcache/cli/commands/trace/stats.py +289 -0
- lmcache/cli/documents/lmcache.txt +11 -0
- lmcache/cli/main.py +42 -0
- lmcache/cli/metrics/__init__.py +29 -0
- lmcache/cli/metrics/formatter.py +171 -0
- lmcache/cli/metrics/handler.py +94 -0
- lmcache/cli/metrics/metrics.py +161 -0
- lmcache/cli/metrics/section.py +77 -0
- lmcache/connections.py +173 -0
- lmcache/integration/__init__.py +2 -0
- lmcache/integration/base_service_factory.py +165 -0
- lmcache/integration/request_telemetry/__init__.py +1 -0
- lmcache/integration/request_telemetry/base.py +51 -0
- lmcache/integration/request_telemetry/factory.py +113 -0
- lmcache/integration/request_telemetry/fastapi.py +109 -0
- lmcache/integration/request_telemetry/noop.py +35 -0
- lmcache/integration/sglang/__init__.py +2 -0
- lmcache/integration/sglang/sglang_adapter.py +326 -0
- lmcache/integration/sglang/utils.py +39 -0
- lmcache/integration/vllm/__init__.py +1 -0
- lmcache/integration/vllm/lmcache_connector_v1.py +213 -0
- lmcache/integration/vllm/lmcache_connector_v1_085.py +150 -0
- lmcache/integration/vllm/lmcache_mp_connector_0180.py +1072 -0
- lmcache/integration/vllm/tests/test_mm_hash_utils.py +112 -0
- lmcache/integration/vllm/utils.py +433 -0
- lmcache/integration/vllm/vllm_multi_process_adapter.py +1090 -0
- lmcache/integration/vllm/vllm_service_factory.py +339 -0
- lmcache/integration/vllm/vllm_v1_adapter.py +1713 -0
- lmcache/logging.py +107 -0
- lmcache/native_storage_ops.pyi +230 -0
- lmcache/non_cuda_equivalents.py +1424 -0
- lmcache/observability.py +1958 -0
- lmcache/storage_backend/serde/__init__.py +1 -0
- lmcache/storage_backend/serde/cachegen_basics.py +210 -0
- lmcache/storage_backend/serde/cachegen_decoder.py +207 -0
- lmcache/storage_backend/serde/cachegen_encoder.py +394 -0
- lmcache/storage_backend/serde/serde.py +75 -0
- lmcache/tools/__init__.py +1 -0
- lmcache/tools/cache_simulator/README.md +392 -0
- lmcache/tools/cache_simulator/__init__.py +1 -0
- lmcache/tools/cache_simulator/docs/simulate_example.png +0 -0
- lmcache/tools/cache_simulator/docs/sweep_example.png +0 -0
- lmcache/tools/cache_simulator/gen_bench_dataset.py +360 -0
- lmcache/tools/cache_simulator/lru_cache.py +124 -0
- lmcache/tools/cache_simulator/plot_hit_rate.py +231 -0
- lmcache/tools/cache_simulator/simulator.py +795 -0
- lmcache/tools/controller_benchmark/README.md +161 -0
- lmcache/tools/controller_benchmark/__init__.py +1 -0
- lmcache/tools/controller_benchmark/__main__.py +331 -0
- lmcache/tools/controller_benchmark/benchmark.py +660 -0
- lmcache/tools/controller_benchmark/config.py +44 -0
- lmcache/tools/controller_benchmark/constants.py +10 -0
- lmcache/tools/controller_benchmark/handlers/__init__.py +46 -0
- lmcache/tools/controller_benchmark/handlers/admit.py +52 -0
- lmcache/tools/controller_benchmark/handlers/base.py +47 -0
- lmcache/tools/controller_benchmark/handlers/deregister.py +49 -0
- lmcache/tools/controller_benchmark/handlers/evict.py +52 -0
- lmcache/tools/controller_benchmark/handlers/heartbeat.py +56 -0
- lmcache/tools/controller_benchmark/handlers/p2p_lookup.py +47 -0
- lmcache/tools/controller_benchmark/handlers/register.py +56 -0
- lmcache/tools/mp_status_viewer/__init__.py +1 -0
- lmcache/tools/mp_status_viewer/__main__.py +95 -0
- lmcache/usage_context.py +417 -0
- lmcache/utils.py +665 -0
- lmcache/v1/__init__.py +2 -0
- lmcache/v1/api_server/__init__.py +2 -0
- lmcache/v1/api_server/__main__.py +537 -0
- lmcache/v1/basic_check.py +112 -0
- lmcache/v1/cache_controller/__init__.py +9 -0
- lmcache/v1/cache_controller/commands/__init__.py +15 -0
- lmcache/v1/cache_controller/commands/base.py +35 -0
- lmcache/v1/cache_controller/commands/full_sync.py +49 -0
- lmcache/v1/cache_controller/config.py +176 -0
- lmcache/v1/cache_controller/controller_manager.py +535 -0
- lmcache/v1/cache_controller/controllers/__init__.py +11 -0
- lmcache/v1/cache_controller/controllers/full_sync_tracker.py +473 -0
- lmcache/v1/cache_controller/controllers/kv_controller.py +439 -0
- lmcache/v1/cache_controller/controllers/registration_controller.py +282 -0
- lmcache/v1/cache_controller/executor.py +463 -0
- lmcache/v1/cache_controller/frontend/static/css/style.css +201 -0
- lmcache/v1/cache_controller/frontend/static/img/logo.png +0 -0
- lmcache/v1/cache_controller/frontend/static/index.html +234 -0
- lmcache/v1/cache_controller/frontend/static/js/controller_app.js +660 -0
- lmcache/v1/cache_controller/full_sync_sender.py +475 -0
- lmcache/v1/cache_controller/locks.py +149 -0
- lmcache/v1/cache_controller/message.py +828 -0
- lmcache/v1/cache_controller/observability.py +208 -0
- lmcache/v1/cache_controller/utils.py +679 -0
- lmcache/v1/cache_controller/worker.py +665 -0
- lmcache/v1/cache_engine.py +2058 -0
- lmcache/v1/cache_interface.py +19 -0
- lmcache/v1/check/__init__.py +74 -0
- lmcache/v1/check/check_mode_gen.py +86 -0
- lmcache/v1/check/check_mode_test_l2_adapter.py +284 -0
- lmcache/v1/check/check_mode_test_remote.py +155 -0
- lmcache/v1/check/check_mode_test_storage_manager.py +142 -0
- lmcache/v1/check/utils.py +571 -0
- lmcache/v1/compute/__init__.py +2 -0
- lmcache/v1/compute/attention/__init__.py +0 -0
- lmcache/v1/compute/attention/abstract.py +39 -0
- lmcache/v1/compute/attention/flash_attn.py +129 -0
- lmcache/v1/compute/attention/flash_infer_sparse.py +284 -0
- lmcache/v1/compute/attention/metadata.py +85 -0
- lmcache/v1/compute/attention/utils.py +14 -0
- lmcache/v1/compute/blend/__init__.py +7 -0
- lmcache/v1/compute/blend/blender.py +168 -0
- lmcache/v1/compute/blend/metadata.py +34 -0
- lmcache/v1/compute/blend/utils.py +63 -0
- lmcache/v1/compute/models/__init__.py +0 -0
- lmcache/v1/compute/models/base.py +141 -0
- lmcache/v1/compute/models/llama.py +9 -0
- lmcache/v1/compute/models/qwen3.py +24 -0
- lmcache/v1/compute/models/utils.py +68 -0
- lmcache/v1/compute/positional_encoding.py +199 -0
- lmcache/v1/config.py +848 -0
- lmcache/v1/config_base.py +848 -0
- lmcache/v1/distributed/api.py +248 -0
- lmcache/v1/distributed/config.py +321 -0
- lmcache/v1/distributed/error.py +64 -0
- lmcache/v1/distributed/eviction.py +192 -0
- lmcache/v1/distributed/eviction_policy/__init__.py +21 -0
- lmcache/v1/distributed/eviction_policy/factory.py +27 -0
- lmcache/v1/distributed/eviction_policy/lru.py +244 -0
- lmcache/v1/distributed/eviction_policy/noop.py +50 -0
- lmcache/v1/distributed/internal_api.py +170 -0
- lmcache/v1/distributed/l1_manager.py +835 -0
- lmcache/v1/distributed/l2_adapters/__init__.py +67 -0
- lmcache/v1/distributed/l2_adapters/base.py +360 -0
- lmcache/v1/distributed/l2_adapters/config.py +385 -0
- lmcache/v1/distributed/l2_adapters/factory.py +205 -0
- lmcache/v1/distributed/l2_adapters/fs_l2_adapter.py +747 -0
- lmcache/v1/distributed/l2_adapters/fs_native_l2_adapter.py +167 -0
- lmcache/v1/distributed/l2_adapters/mock_l2_adapter.py +516 -0
- lmcache/v1/distributed/l2_adapters/mooncake_store_l2_adapter.py +135 -0
- lmcache/v1/distributed/l2_adapters/native_connector_l2_adapter.py +468 -0
- lmcache/v1/distributed/l2_adapters/native_plugin_l2_adapter.py +199 -0
- lmcache/v1/distributed/l2_adapters/nixl_store_dynamic_l2_adapter.py +831 -0
- lmcache/v1/distributed/l2_adapters/nixl_store_l2_adapter.py +983 -0
- lmcache/v1/distributed/l2_adapters/plugin_l2_adapter.py +210 -0
- lmcache/v1/distributed/l2_adapters/resp_l2_adapter.py +176 -0
- lmcache/v1/distributed/memory_manager.py +179 -0
- lmcache/v1/distributed/storage_controller.py +39 -0
- lmcache/v1/distributed/storage_controllers/__init__.py +43 -0
- lmcache/v1/distributed/storage_controllers/eviction_controller.py +242 -0
- lmcache/v1/distributed/storage_controllers/prefetch_controller.py +830 -0
- lmcache/v1/distributed/storage_controllers/prefetch_policy.py +193 -0
- lmcache/v1/distributed/storage_controllers/store_controller.py +452 -0
- lmcache/v1/distributed/storage_controllers/store_policy.py +213 -0
- lmcache/v1/distributed/storage_manager.py +532 -0
- lmcache/v1/event_manager.py +145 -0
- lmcache/v1/exceptions/__init__.py +16 -0
- lmcache/v1/gpu_connector/__init__.py +126 -0
- lmcache/v1/gpu_connector/gpu_connectors.py +1906 -0
- lmcache/v1/gpu_connector/gpu_ops.py +85 -0
- lmcache/v1/gpu_connector/hpu_connector.py +326 -0
- lmcache/v1/gpu_connector/mock_gpu_connector.py +67 -0
- lmcache/v1/gpu_connector/utils.py +890 -0
- lmcache/v1/gpu_connector/xpu_connectors.py +916 -0
- lmcache/v1/health_monitor/__init__.py +1 -0
- lmcache/v1/health_monitor/base.py +587 -0
- lmcache/v1/health_monitor/checks/__init__.py +1 -0
- lmcache/v1/health_monitor/checks/remote_backend_check.py +304 -0
- lmcache/v1/health_monitor/constants.py +36 -0
- lmcache/v1/internal_api_server/__init__.py +0 -0
- lmcache/v1/internal_api_server/api_registry.py +59 -0
- lmcache/v1/internal_api_server/api_server.py +120 -0
- lmcache/v1/internal_api_server/common/__init__.py +1 -0
- lmcache/v1/internal_api_server/common/env_api.py +22 -0
- lmcache/v1/internal_api_server/common/loglevel_api.py +57 -0
- lmcache/v1/internal_api_server/common/metrics_api.py +29 -0
- lmcache/v1/internal_api_server/common/periodic_thread_api.py +138 -0
- lmcache/v1/internal_api_server/common/run_script_api.py +73 -0
- lmcache/v1/internal_api_server/common/thread_api.py +63 -0
- lmcache/v1/internal_api_server/controller/__init__.py +1 -0
- lmcache/v1/internal_api_server/controller/key_stats_api.py +81 -0
- lmcache/v1/internal_api_server/controller/worker_info_api.py +136 -0
- lmcache/v1/internal_api_server/utils.py +43 -0
- lmcache/v1/internal_api_server/vllm/__init__.py +1 -0
- lmcache/v1/internal_api_server/vllm/backend_api.py +221 -0
- lmcache/v1/internal_api_server/vllm/bypass_api.py +204 -0
- lmcache/v1/internal_api_server/vllm/cache_api.py +895 -0
- lmcache/v1/internal_api_server/vllm/chunk_statistics_api.py +141 -0
- lmcache/v1/internal_api_server/vllm/conf_api.py +147 -0
- lmcache/v1/internal_api_server/vllm/freeze_api.py +172 -0
- lmcache/v1/internal_api_server/vllm/hot_cache_api.py +184 -0
- lmcache/v1/internal_api_server/vllm/inference_api.py +65 -0
- lmcache/v1/internal_api_server/vllm/load_fs_chunks_api.py +320 -0
- lmcache/v1/internal_api_server/vllm/lookup_api.py +145 -0
- lmcache/v1/internal_api_server/vllm/version_api.py +25 -0
- lmcache/v1/kv_layer_groups.py +267 -0
- lmcache/v1/lazy_memory_allocator.py +284 -0
- lmcache/v1/lookup_client/__init__.py +25 -0
- lmcache/v1/lookup_client/abstract_client.py +77 -0
- lmcache/v1/lookup_client/async_lookup_message.py +50 -0
- lmcache/v1/lookup_client/chunk_statistics_lookup_client.py +200 -0
- lmcache/v1/lookup_client/factory.py +251 -0
- lmcache/v1/lookup_client/hit_limit_lookup_client.py +86 -0
- lmcache/v1/lookup_client/lmcache_async_lookup_client.py +407 -0
- lmcache/v1/lookup_client/lmcache_lookup_client.py +285 -0
- lmcache/v1/lookup_client/lmcache_lookup_client_bypass.py +99 -0
- lmcache/v1/lookup_client/mooncake_lookup_client.py +87 -0
- lmcache/v1/lookup_client/record_strategies/__init__.py +77 -0
- lmcache/v1/lookup_client/record_strategies/base.py +327 -0
- lmcache/v1/lookup_client/record_strategies/file_hash.py +130 -0
- lmcache/v1/lookup_client/record_strategies/memory_bloom_filter.py +81 -0
- lmcache/v1/manager.py +539 -0
- lmcache/v1/memory_management.py +2619 -0
- lmcache/v1/metadata.py +114 -0
- lmcache/v1/mp_observability/AGENTS.override.md +21 -0
- lmcache/v1/mp_observability/README.md +204 -0
- lmcache/v1/mp_observability/config.py +340 -0
- lmcache/v1/mp_observability/event.py +100 -0
- lmcache/v1/mp_observability/event_bus.py +313 -0
- lmcache/v1/mp_observability/otel_init.py +145 -0
- lmcache/v1/mp_observability/subscribers/__init__.py +28 -0
- lmcache/v1/mp_observability/subscribers/logging/__init__.py +19 -0
- lmcache/v1/mp_observability/subscribers/logging/l1.py +56 -0
- lmcache/v1/mp_observability/subscribers/logging/l2.py +73 -0
- lmcache/v1/mp_observability/subscribers/logging/lookup_hash.py +209 -0
- lmcache/v1/mp_observability/subscribers/logging/mp_server.py +90 -0
- lmcache/v1/mp_observability/subscribers/logging/sm.py +59 -0
- lmcache/v1/mp_observability/subscribers/metrics/__init__.py +20 -0
- lmcache/v1/mp_observability/subscribers/metrics/l0_lifecycle.py +290 -0
- lmcache/v1/mp_observability/subscribers/metrics/l1.py +55 -0
- lmcache/v1/mp_observability/subscribers/metrics/l1_lifecycle.py +166 -0
- lmcache/v1/mp_observability/subscribers/metrics/l2.py +121 -0
- lmcache/v1/mp_observability/subscribers/metrics/sm.py +69 -0
- lmcache/v1/mp_observability/subscribers/tracing/__init__.py +12 -0
- lmcache/v1/mp_observability/subscribers/tracing/mp_server.py +333 -0
- lmcache/v1/mp_observability/subscribers/tracing/span_registry.py +148 -0
- lmcache/v1/mp_observability/trace/__init__.py +50 -0
- lmcache/v1/mp_observability/trace/codecs.py +255 -0
- lmcache/v1/mp_observability/trace/decorator.py +147 -0
- lmcache/v1/mp_observability/trace/format.py +132 -0
- lmcache/v1/mp_observability/trace/lifecycle.py +83 -0
- lmcache/v1/mp_observability/trace/reader.py +167 -0
- lmcache/v1/mp_observability/trace/recorder.py +300 -0
- lmcache/v1/multiprocess/__init__.py +0 -0
- lmcache/v1/multiprocess/affinity_pool.py +102 -0
- lmcache/v1/multiprocess/blend_server_v2.py +891 -0
- lmcache/v1/multiprocess/config.py +253 -0
- lmcache/v1/multiprocess/custom_types.py +281 -0
- lmcache/v1/multiprocess/futures.py +194 -0
- lmcache/v1/multiprocess/gpu_context.py +511 -0
- lmcache/v1/multiprocess/http_server.py +235 -0
- lmcache/v1/multiprocess/mp_runtime_plugin_launcher.py +130 -0
- lmcache/v1/multiprocess/mq.py +732 -0
- lmcache/v1/multiprocess/protocol.py +86 -0
- lmcache/v1/multiprocess/protocols/README.md +213 -0
- lmcache/v1/multiprocess/protocols/__init__.py +127 -0
- lmcache/v1/multiprocess/protocols/base.py +89 -0
- lmcache/v1/multiprocess/protocols/blend.py +109 -0
- lmcache/v1/multiprocess/protocols/blend_v2.py +57 -0
- lmcache/v1/multiprocess/protocols/controller.py +53 -0
- lmcache/v1/multiprocess/protocols/debug.py +34 -0
- lmcache/v1/multiprocess/protocols/engine.py +146 -0
- lmcache/v1/multiprocess/protocols/observability.py +39 -0
- lmcache/v1/multiprocess/server.py +1134 -0
- lmcache/v1/multiprocess/session.py +190 -0
- lmcache/v1/multiprocess/token_hasher.py +441 -0
- lmcache/v1/offload_server/__init__.py +17 -0
- lmcache/v1/offload_server/abstract_server.py +37 -0
- lmcache/v1/offload_server/message.py +30 -0
- lmcache/v1/offload_server/zmq_server.py +122 -0
- lmcache/v1/periodic_thread.py +579 -0
- lmcache/v1/pin_monitor.py +246 -0
- lmcache/v1/plugin/__init__.py +0 -0
- lmcache/v1/plugin/runtime_plugin_launcher.py +211 -0
- lmcache/v1/protocol.py +317 -0
- lmcache/v1/rpc/__init__.py +17 -0
- lmcache/v1/rpc/transport.py +105 -0
- lmcache/v1/rpc/zmq_transport.py +213 -0
- lmcache/v1/rpc_utils.py +165 -0
- lmcache/v1/server/__init__.py +2 -0
- lmcache/v1/server/__main__.py +170 -0
- lmcache/v1/server/storage_backend/__init__.py +21 -0
- lmcache/v1/server/storage_backend/abstract_backend.py +80 -0
- lmcache/v1/server/storage_backend/local_backend.py +75 -0
- lmcache/v1/server/utils.py +21 -0
- lmcache/v1/standalone/__init__.py +1 -0
- lmcache/v1/standalone/__main__.py +583 -0
- lmcache/v1/standalone/manager.py +80 -0
- lmcache/v1/standalone/standalone_service_factory.py +86 -0
- lmcache/v1/storage_backend/__init__.py +313 -0
- lmcache/v1/storage_backend/abstract_backend.py +445 -0
- lmcache/v1/storage_backend/audit_backend.py +233 -0
- lmcache/v1/storage_backend/batched_message_sender.py +222 -0
- lmcache/v1/storage_backend/cache_policy/__init__.py +45 -0
- lmcache/v1/storage_backend/cache_policy/base_policy.py +87 -0
- lmcache/v1/storage_backend/cache_policy/fifo.py +58 -0
- lmcache/v1/storage_backend/cache_policy/lfu.py +105 -0
- lmcache/v1/storage_backend/cache_policy/lru.py +81 -0
- lmcache/v1/storage_backend/cache_policy/mru.py +61 -0
- lmcache/v1/storage_backend/connector/__init__.py +443 -0
- lmcache/v1/storage_backend/connector/audit_adapter.py +77 -0
- lmcache/v1/storage_backend/connector/audit_connector.py +320 -0
- lmcache/v1/storage_backend/connector/base_connector.py +379 -0
- lmcache/v1/storage_backend/connector/blackhole_adapter.py +21 -0
- lmcache/v1/storage_backend/connector/blackhole_connector.py +37 -0
- lmcache/v1/storage_backend/connector/eic_adapter.py +31 -0
- lmcache/v1/storage_backend/connector/eic_connector.py +757 -0
- lmcache/v1/storage_backend/connector/external_adapter.py +79 -0
- lmcache/v1/storage_backend/connector/fs_adapter.py +51 -0
- lmcache/v1/storage_backend/connector/fs_connector.py +403 -0
- lmcache/v1/storage_backend/connector/infinistore_adapter.py +56 -0
- lmcache/v1/storage_backend/connector/infinistore_connector.py +177 -0
- lmcache/v1/storage_backend/connector/instrumented_connector.py +219 -0
- lmcache/v1/storage_backend/connector/lm_adapter.py +31 -0
- lmcache/v1/storage_backend/connector/lm_connector.py +176 -0
- lmcache/v1/storage_backend/connector/mock_adapter.py +57 -0
- lmcache/v1/storage_backend/connector/mock_connector.py +349 -0
- lmcache/v1/storage_backend/connector/mooncakestore_adapter.py +43 -0
- lmcache/v1/storage_backend/connector/mooncakestore_connector.py +614 -0
- lmcache/v1/storage_backend/connector/redis_adapter.py +181 -0
- lmcache/v1/storage_backend/connector/redis_connector.py +828 -0
- lmcache/v1/storage_backend/connector/s3_adapter.py +59 -0
- lmcache/v1/storage_backend/connector/s3_connector.py +699 -0
- lmcache/v1/storage_backend/connector/sagemaker_hyperpod_adapter.py +233 -0
- lmcache/v1/storage_backend/connector/sagemaker_hyperpod_connector.py +987 -0
- lmcache/v1/storage_backend/connector/valkey_adapter.py +114 -0
- lmcache/v1/storage_backend/connector/valkey_connector.py +627 -0
- lmcache/v1/storage_backend/gds_backend.py +1199 -0
- lmcache/v1/storage_backend/job_executor/__init__.py +0 -0
- lmcache/v1/storage_backend/job_executor/base_executor.py +34 -0
- lmcache/v1/storage_backend/job_executor/pq_executor.py +235 -0
- lmcache/v1/storage_backend/local_cpu_backend.py +810 -0
- lmcache/v1/storage_backend/local_disk_backend.py +656 -0
- lmcache/v1/storage_backend/maru_backend.py +734 -0
- lmcache/v1/storage_backend/naive_serde/__init__.py +50 -0
- lmcache/v1/storage_backend/naive_serde/cachegen_basics.py +133 -0
- lmcache/v1/storage_backend/naive_serde/cachegen_decoder.py +135 -0
- lmcache/v1/storage_backend/naive_serde/cachegen_encoder.py +83 -0
- lmcache/v1/storage_backend/naive_serde/kivi_serde.py +22 -0
- lmcache/v1/storage_backend/naive_serde/naive_serde.py +18 -0
- lmcache/v1/storage_backend/naive_serde/serde.py +37 -0
- lmcache/v1/storage_backend/native_clients/connector_client_base.py +165 -0
- lmcache/v1/storage_backend/native_clients/resp_client.py +35 -0
- lmcache/v1/storage_backend/nixl_storage_backend.py +1400 -0
- lmcache/v1/storage_backend/p2p_backend.py +788 -0
- lmcache/v1/storage_backend/path_sharder.py +117 -0
- lmcache/v1/storage_backend/pd_backend.py +646 -0
- lmcache/v1/storage_backend/plugins/dax_backend.py +1443 -0
- lmcache/v1/storage_backend/plugins/rust_raw_block_backend.py +1361 -0
- lmcache/v1/storage_backend/remote_backend.py +624 -0
- lmcache/v1/storage_backend/resp_client.py +227 -0
- lmcache/v1/storage_backend/storage_backend_listener.py +19 -0
- lmcache/v1/storage_backend/storage_manager.py +1352 -0
- lmcache/v1/system_detection.py +110 -0
- lmcache/v1/token_database.py +551 -0
- lmcache/v1/transfer_channel/__init__.py +83 -0
- lmcache/v1/transfer_channel/abstract.py +285 -0
- lmcache/v1/transfer_channel/mock_memory_channel.py +156 -0
- lmcache/v1/transfer_channel/nixl_channel.py +639 -0
- lmcache/v1/transfer_channel/py_socket_channel.py +260 -0
- lmcache/v1/transfer_channel/transfer_utils.py +63 -0
- lmcache/v1/utils/__init__.py +1 -0
- lmcache/v1/utils/bloom_filter.py +109 -0
- lmcache/v1/utils/cache_utils.py +125 -0
- lmcache_cli-0.4.5.dev0.dist-info/METADATA +185 -0
- lmcache_cli-0.4.5.dev0.dist-info/RECORD +399 -0
- lmcache_cli-0.4.5.dev0.dist-info/WHEEL +5 -0
- lmcache_cli-0.4.5.dev0.dist-info/entry_points.txt +2 -0
- lmcache_cli-0.4.5.dev0.dist-info/licenses/LICENSE +201 -0
- lmcache_cli-0.4.5.dev0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""
|
|
3
|
+
VllmServiceFactory: Creates LMCache service components for vLLM integration.
|
|
4
|
+
|
|
5
|
+
This factory encapsulates all vLLM-specific component creation logic,
|
|
6
|
+
keeping the LMCacheManager agnostic to the serving engine.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
# Standard
|
|
10
|
+
from types import SimpleNamespace
|
|
11
|
+
from typing import TYPE_CHECKING, Optional, Union
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
# Third Party
|
|
15
|
+
from vllm.config import VllmConfig
|
|
16
|
+
|
|
17
|
+
# First Party
|
|
18
|
+
from lmcache.v1.lookup_client.lmcache_async_lookup_client import (
|
|
19
|
+
LMCacheAsyncLookupServer,
|
|
20
|
+
)
|
|
21
|
+
from lmcache.v1.lookup_client.lmcache_lookup_client import LMCacheLookupServer
|
|
22
|
+
from lmcache.v1.manager import LMCacheManager
|
|
23
|
+
|
|
24
|
+
# First Party
|
|
25
|
+
from lmcache.integration.base_service_factory import BaseServiceFactory
|
|
26
|
+
from lmcache.logging import init_logger
|
|
27
|
+
from lmcache.v1.cache_engine import LMCacheEngine, LMCacheEngineBuilder
|
|
28
|
+
from lmcache.v1.config import LMCacheEngineConfig
|
|
29
|
+
from lmcache.v1.health_monitor.base import HealthMonitor
|
|
30
|
+
from lmcache.v1.internal_api_server.api_server import InternalAPIServer
|
|
31
|
+
from lmcache.v1.lookup_client.abstract_client import LookupClientInterface
|
|
32
|
+
from lmcache.v1.metadata import LMCacheMetadata
|
|
33
|
+
from lmcache.v1.offload_server.zmq_server import ZMQOffloadServer
|
|
34
|
+
from lmcache.v1.plugin.runtime_plugin_launcher import RuntimePluginLauncher
|
|
35
|
+
|
|
36
|
+
logger = init_logger(__name__)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class VllmServiceFactory(BaseServiceFactory):
|
|
40
|
+
"""Creates LMCache service components for vLLM integration.
|
|
41
|
+
|
|
42
|
+
Handles role-based component creation:
|
|
43
|
+
- scheduler: lookup client, PrometheusLogger (no engine if bypass disabled)
|
|
44
|
+
- worker: engine, lookup server, offload server
|
|
45
|
+
- DP rank 0: API server, plugin launcher
|
|
46
|
+
- all roles: health monitor (created during post_init)
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
def __init__(
|
|
50
|
+
self,
|
|
51
|
+
lmcache_config: LMCacheEngineConfig,
|
|
52
|
+
vllm_config: "VllmConfig",
|
|
53
|
+
role: str,
|
|
54
|
+
):
|
|
55
|
+
self.lmcache_config = lmcache_config
|
|
56
|
+
self.vllm_config = vllm_config
|
|
57
|
+
self.role = role
|
|
58
|
+
self.metadata: Optional[LMCacheMetadata] = None
|
|
59
|
+
self.lmcache_engine: Optional[LMCacheEngine] = None
|
|
60
|
+
|
|
61
|
+
def get_engine_instance_id(self) -> str:
|
|
62
|
+
# First Party
|
|
63
|
+
from lmcache.integration.vllm.utils import ENGINE_NAME
|
|
64
|
+
|
|
65
|
+
return ENGINE_NAME
|
|
66
|
+
|
|
67
|
+
def get_or_create_metadata(self) -> Optional[LMCacheMetadata]:
|
|
68
|
+
if self.metadata is not None:
|
|
69
|
+
return self.metadata
|
|
70
|
+
|
|
71
|
+
# First Party
|
|
72
|
+
from lmcache.integration.vllm.utils import (
|
|
73
|
+
calculate_draft_layers,
|
|
74
|
+
calculate_local_rank_and_world_size,
|
|
75
|
+
mla_enabled,
|
|
76
|
+
validate_mla_config,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
# Third Party
|
|
81
|
+
from vllm.utils.torch_utils import get_kv_cache_torch_dtype
|
|
82
|
+
except ImportError:
|
|
83
|
+
# Third Party
|
|
84
|
+
from vllm.utils import get_kv_cache_torch_dtype
|
|
85
|
+
|
|
86
|
+
model_config = self.vllm_config.model_config
|
|
87
|
+
parallel_config = self.vllm_config.parallel_config
|
|
88
|
+
cache_config = self.vllm_config.cache_config
|
|
89
|
+
|
|
90
|
+
kv_dtype = get_kv_cache_torch_dtype(
|
|
91
|
+
cache_config.cache_dtype, model_config.dtype
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
use_mla = mla_enabled(model_config)
|
|
95
|
+
validate_mla_config(self.lmcache_config, use_mla)
|
|
96
|
+
|
|
97
|
+
num_layer = model_config.get_num_layers(parallel_config)
|
|
98
|
+
num_draft_layers = calculate_draft_layers(self.vllm_config)
|
|
99
|
+
num_layer += num_draft_layers
|
|
100
|
+
chunk_size = self.lmcache_config.chunk_size
|
|
101
|
+
num_kv_head = model_config.get_num_kv_heads(parallel_config)
|
|
102
|
+
head_size = model_config.get_head_size()
|
|
103
|
+
kv_shape = (
|
|
104
|
+
num_layer,
|
|
105
|
+
1 if use_mla else 2,
|
|
106
|
+
chunk_size,
|
|
107
|
+
num_kv_head,
|
|
108
|
+
head_size,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
logger.info(
|
|
112
|
+
"num_layer: %d, chunk_size: %d, num_kv_head (per gpu): %d, "
|
|
113
|
+
"head_size: %d, hidden_dim (D) for KV (per gpu): %d, "
|
|
114
|
+
"use mla: %s, kv shape: %s, num_draft_layers: %d",
|
|
115
|
+
num_layer,
|
|
116
|
+
chunk_size,
|
|
117
|
+
num_kv_head,
|
|
118
|
+
head_size,
|
|
119
|
+
num_kv_head * head_size,
|
|
120
|
+
use_mla,
|
|
121
|
+
kv_shape,
|
|
122
|
+
num_draft_layers,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Extract engine_id and kv_connector_extra_config from vllm_config
|
|
126
|
+
engine_id = None
|
|
127
|
+
kv_connector_extra_config = None
|
|
128
|
+
if hasattr(self.vllm_config, "kv_transfer_config"):
|
|
129
|
+
kv_transfer_config = self.vllm_config.kv_transfer_config
|
|
130
|
+
if kv_transfer_config is not None:
|
|
131
|
+
engine_id = getattr(kv_transfer_config, "engine_id", None)
|
|
132
|
+
kv_connector_extra_config = getattr(
|
|
133
|
+
kv_transfer_config, "kv_connector_extra_config", None
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
if self.role == "scheduler":
|
|
137
|
+
# Avoid GPU probing for scheduler-only metadata path;
|
|
138
|
+
# scheduler may run on CPU-only control-plane nodes.
|
|
139
|
+
local_worker_id = parallel_config.rank
|
|
140
|
+
local_world_size = parallel_config.world_size
|
|
141
|
+
else:
|
|
142
|
+
local_worker_id, local_world_size = calculate_local_rank_and_world_size(
|
|
143
|
+
self.vllm_config
|
|
144
|
+
)
|
|
145
|
+
self.metadata = LMCacheMetadata(
|
|
146
|
+
model_name=model_config.model,
|
|
147
|
+
world_size=parallel_config.world_size,
|
|
148
|
+
local_world_size=local_world_size,
|
|
149
|
+
worker_id=parallel_config.rank,
|
|
150
|
+
local_worker_id=local_worker_id,
|
|
151
|
+
kv_dtype=kv_dtype,
|
|
152
|
+
kv_shape=kv_shape,
|
|
153
|
+
use_mla=use_mla,
|
|
154
|
+
role=self.role,
|
|
155
|
+
served_model_name=model_config.served_model_name,
|
|
156
|
+
chunk_size=self.lmcache_config.chunk_size,
|
|
157
|
+
engine_id=engine_id,
|
|
158
|
+
kv_connector_extra_config=kv_connector_extra_config,
|
|
159
|
+
)
|
|
160
|
+
return self.metadata
|
|
161
|
+
|
|
162
|
+
def get_or_create_lmcache_engine(self) -> Optional[LMCacheEngine]:
|
|
163
|
+
self._ensure_metadata()
|
|
164
|
+
assert self.metadata is not None
|
|
165
|
+
|
|
166
|
+
# Scheduler without bypass lookup does not need an engine
|
|
167
|
+
if (
|
|
168
|
+
self.role == "scheduler"
|
|
169
|
+
and not self.lmcache_config.enable_scheduler_bypass_lookup
|
|
170
|
+
):
|
|
171
|
+
# Create PrometheusLogger for scheduler without engine
|
|
172
|
+
# First Party
|
|
173
|
+
from lmcache.observability import PrometheusLogger
|
|
174
|
+
|
|
175
|
+
PrometheusLogger.GetOrCreate(
|
|
176
|
+
self.metadata,
|
|
177
|
+
config=self.lmcache_config,
|
|
178
|
+
)
|
|
179
|
+
return None
|
|
180
|
+
|
|
181
|
+
# First Party
|
|
182
|
+
from lmcache.integration.vllm.utils import ENGINE_NAME
|
|
183
|
+
from lmcache.utils import EngineType
|
|
184
|
+
from lmcache.v1.gpu_connector import CreateGPUConnector
|
|
185
|
+
|
|
186
|
+
if curr_engine := LMCacheEngineBuilder.get(ENGINE_NAME):
|
|
187
|
+
self.lmcache_engine = curr_engine
|
|
188
|
+
return curr_engine
|
|
189
|
+
|
|
190
|
+
if self.role == "scheduler":
|
|
191
|
+
tpg = SimpleNamespace()
|
|
192
|
+
tpg.broadcast = lambda tensor, src: tensor
|
|
193
|
+
tpg.broadcast_object = lambda obj, src: obj
|
|
194
|
+
vllm_gpu_connector = None
|
|
195
|
+
else:
|
|
196
|
+
# Third Party
|
|
197
|
+
from vllm.distributed.parallel_state import get_tp_group
|
|
198
|
+
|
|
199
|
+
tpg = get_tp_group()
|
|
200
|
+
# First Party
|
|
201
|
+
from lmcache.integration.vllm.utils import vllm_layout_hints
|
|
202
|
+
|
|
203
|
+
vllm_gpu_connector = CreateGPUConnector(
|
|
204
|
+
self.lmcache_config,
|
|
205
|
+
self.metadata,
|
|
206
|
+
EngineType.VLLM,
|
|
207
|
+
layout_hints=vllm_layout_hints(),
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
engine = LMCacheEngineBuilder.get_or_create(
|
|
211
|
+
ENGINE_NAME,
|
|
212
|
+
self.lmcache_config,
|
|
213
|
+
self.metadata,
|
|
214
|
+
vllm_gpu_connector,
|
|
215
|
+
tpg.broadcast,
|
|
216
|
+
tpg.broadcast_object,
|
|
217
|
+
)
|
|
218
|
+
self.lmcache_engine = engine
|
|
219
|
+
|
|
220
|
+
if (
|
|
221
|
+
self.role == "scheduler"
|
|
222
|
+
and self.lmcache_config.enable_scheduler_bypass_lookup
|
|
223
|
+
):
|
|
224
|
+
assert engine.save_only_first_rank or (
|
|
225
|
+
self.lmcache_config.get_extra_config_value(
|
|
226
|
+
"remote_enable_mla_worker_id_as0", self.metadata.use_mla
|
|
227
|
+
)
|
|
228
|
+
), (
|
|
229
|
+
"enable_scheduler_bypass_lookup is only supported with "
|
|
230
|
+
"save_only_first_rank or remote_enable_mla_worker_id_as0"
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
return engine
|
|
234
|
+
|
|
235
|
+
def _ensure_metadata(self):
|
|
236
|
+
if self.metadata is None:
|
|
237
|
+
self.get_or_create_metadata()
|
|
238
|
+
|
|
239
|
+
def _ensure_engine(self):
|
|
240
|
+
if self.lmcache_engine is None:
|
|
241
|
+
self.get_or_create_lmcache_engine()
|
|
242
|
+
|
|
243
|
+
def maybe_create_prometheus_logger(self):
|
|
244
|
+
# PrometheusLogger is created on-demand within other components
|
|
245
|
+
# (e.g., engine creation for scheduler, health monitor setup).
|
|
246
|
+
return None
|
|
247
|
+
|
|
248
|
+
def maybe_create_lookup_client(self) -> Optional[LookupClientInterface]:
|
|
249
|
+
# Only scheduler needs lookup client
|
|
250
|
+
if self.role != "scheduler":
|
|
251
|
+
return None
|
|
252
|
+
|
|
253
|
+
# First Party
|
|
254
|
+
from lmcache.v1.lookup_client.factory import LookupClientFactory
|
|
255
|
+
|
|
256
|
+
self._ensure_metadata()
|
|
257
|
+
assert self.metadata is not None
|
|
258
|
+
return LookupClientFactory.create_lookup_client(
|
|
259
|
+
self.lmcache_config,
|
|
260
|
+
self.metadata,
|
|
261
|
+
self.lmcache_engine,
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
def maybe_create_lookup_server(
|
|
265
|
+
self,
|
|
266
|
+
) -> Optional[Union["LMCacheLookupServer", "LMCacheAsyncLookupServer"]]:
|
|
267
|
+
# Only worker needs lookup server
|
|
268
|
+
if self.role != "worker":
|
|
269
|
+
return None
|
|
270
|
+
|
|
271
|
+
# First Party
|
|
272
|
+
from lmcache.v1.lookup_client.factory import LookupClientFactory
|
|
273
|
+
|
|
274
|
+
self._ensure_metadata()
|
|
275
|
+
self._ensure_engine()
|
|
276
|
+
assert self.metadata is not None
|
|
277
|
+
assert self.lmcache_engine is not None
|
|
278
|
+
return LookupClientFactory.create_lookup_server(
|
|
279
|
+
self.lmcache_engine,
|
|
280
|
+
self.metadata,
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
def maybe_create_offload_server(self) -> Optional[ZMQOffloadServer]:
|
|
284
|
+
# Only worker needs offload server
|
|
285
|
+
if self.role != "worker":
|
|
286
|
+
return None
|
|
287
|
+
|
|
288
|
+
# Third Party
|
|
289
|
+
from vllm.distributed.parallel_state import (
|
|
290
|
+
get_tensor_model_parallel_rank,
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
self._ensure_engine()
|
|
294
|
+
assert self.lmcache_engine is not None
|
|
295
|
+
return ZMQOffloadServer(
|
|
296
|
+
self.lmcache_engine,
|
|
297
|
+
get_tensor_model_parallel_rank(),
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
def maybe_create_runtime_plugin_launcher(
|
|
301
|
+
self,
|
|
302
|
+
) -> Optional[RuntimePluginLauncher]:
|
|
303
|
+
# First Party
|
|
304
|
+
from lmcache.integration.vllm.utils import is_dp_rank0
|
|
305
|
+
|
|
306
|
+
# Only DP rank 0 needs runtime plugin launcher
|
|
307
|
+
if not is_dp_rank0(self.vllm_config):
|
|
308
|
+
return None
|
|
309
|
+
|
|
310
|
+
worker_id = (
|
|
311
|
+
-1
|
|
312
|
+
if self.lmcache_engine is None or self.metadata is None
|
|
313
|
+
else self.metadata.worker_id
|
|
314
|
+
)
|
|
315
|
+
return RuntimePluginLauncher(
|
|
316
|
+
self.lmcache_config,
|
|
317
|
+
self.role,
|
|
318
|
+
self.vllm_config.parallel_config.tensor_parallel_size,
|
|
319
|
+
worker_id,
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
def maybe_create_internal_api_server(
|
|
323
|
+
self, lmcache_manager: "LMCacheManager"
|
|
324
|
+
) -> Optional[InternalAPIServer]:
|
|
325
|
+
# First Party
|
|
326
|
+
from lmcache.integration.vllm.utils import is_dp_rank0
|
|
327
|
+
|
|
328
|
+
# Only DP rank 0 needs internal API server
|
|
329
|
+
if not is_dp_rank0(self.vllm_config):
|
|
330
|
+
return None
|
|
331
|
+
|
|
332
|
+
return InternalAPIServer(lmcache_manager)
|
|
333
|
+
|
|
334
|
+
def maybe_create_health_monitor(
|
|
335
|
+
self, lmcache_manager: "LMCacheManager"
|
|
336
|
+
) -> Optional[HealthMonitor]:
|
|
337
|
+
return self._create_health_monitor(
|
|
338
|
+
lmcache_manager, self.lmcache_config, self.lmcache_engine
|
|
339
|
+
)
|