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,213 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
|
|
3
|
+
# Standard
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
5
|
+
|
|
6
|
+
# Third Party
|
|
7
|
+
from vllm.config import VllmConfig
|
|
8
|
+
from vllm.distributed.kv_transfer.kv_connector.v1.base import (
|
|
9
|
+
KVConnectorBase_V1,
|
|
10
|
+
KVConnectorMetadata,
|
|
11
|
+
KVConnectorRole,
|
|
12
|
+
)
|
|
13
|
+
from vllm.logger import init_logger
|
|
14
|
+
from vllm.v1.core.sched.output import SchedulerOutput
|
|
15
|
+
import torch
|
|
16
|
+
|
|
17
|
+
# First Party
|
|
18
|
+
from lmcache.integration.vllm.vllm_v1_adapter import LMCacheConnectorV1Impl
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
# Third Party
|
|
22
|
+
from vllm.attention.backends.abstract import AttentionMetadata
|
|
23
|
+
from vllm.forward_context import ForwardContext
|
|
24
|
+
from vllm.v1.core.kv_cache_manager import KVCacheBlocks
|
|
25
|
+
from vllm.v1.request import Request
|
|
26
|
+
|
|
27
|
+
logger = init_logger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class LMCacheConnectorV1Dynamic(KVConnectorBase_V1):
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
vllm_config: "VllmConfig",
|
|
34
|
+
role: KVConnectorRole,
|
|
35
|
+
kv_cache_config: Optional[Any] = None,
|
|
36
|
+
):
|
|
37
|
+
if kv_cache_config is not None:
|
|
38
|
+
super().__init__(
|
|
39
|
+
vllm_config=vllm_config,
|
|
40
|
+
role=role,
|
|
41
|
+
kv_cache_config=kv_cache_config,
|
|
42
|
+
)
|
|
43
|
+
else:
|
|
44
|
+
super().__init__(vllm_config=vllm_config, role=role)
|
|
45
|
+
self._lmcache_engine = LMCacheConnectorV1Impl(vllm_config, role, self)
|
|
46
|
+
|
|
47
|
+
# ==============================
|
|
48
|
+
# Worker-side methods
|
|
49
|
+
# ==============================
|
|
50
|
+
def register_kv_caches(self, kv_caches: dict[str, torch.Tensor]):
|
|
51
|
+
"""
|
|
52
|
+
Initialize with the KV caches. Useful for pre-registering the
|
|
53
|
+
KV Caches in the KVConnector (e.g. for NIXL).
|
|
54
|
+
|
|
55
|
+
Args: kv_caches:
|
|
56
|
+
dictionary of layer names, kv cache
|
|
57
|
+
"""
|
|
58
|
+
self._lmcache_engine.register_kv_caches(kv_caches)
|
|
59
|
+
|
|
60
|
+
def start_load_kv(self, forward_context: "ForwardContext", **kwargs) -> None:
|
|
61
|
+
"""
|
|
62
|
+
Start loading the KV cache from the connector to vLLM's paged
|
|
63
|
+
KV buffer. This is called from the forward context before the
|
|
64
|
+
forward pass to enable async loading during model execution.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
forward_context (ForwardContext): the forward context.
|
|
68
|
+
**kwargs: additional arguments for the load operation
|
|
69
|
+
|
|
70
|
+
Note:
|
|
71
|
+
The number of elements in kv_caches and layer_names should be
|
|
72
|
+
the same.
|
|
73
|
+
|
|
74
|
+
"""
|
|
75
|
+
self._lmcache_engine.start_load_kv(forward_context, **kwargs)
|
|
76
|
+
|
|
77
|
+
def wait_for_layer_load(self, layer_name: str) -> None:
|
|
78
|
+
"""
|
|
79
|
+
Block until the KV for a specific layer is loaded into vLLM's
|
|
80
|
+
paged buffer. This is called from within attention layer to ensure
|
|
81
|
+
async copying from start_load_kv is complete.
|
|
82
|
+
|
|
83
|
+
This interface will be useful for layer-by-layer pipelining.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
layer_name: the name of that layer
|
|
87
|
+
"""
|
|
88
|
+
self._lmcache_engine.wait_for_layer_load(layer_name)
|
|
89
|
+
|
|
90
|
+
def save_kv_layer(
|
|
91
|
+
self,
|
|
92
|
+
layer_name: str,
|
|
93
|
+
kv_layer: torch.Tensor,
|
|
94
|
+
attn_metadata: "AttentionMetadata",
|
|
95
|
+
**kwargs,
|
|
96
|
+
) -> None:
|
|
97
|
+
"""
|
|
98
|
+
Start saving the a layer of KV cache from vLLM's paged buffer
|
|
99
|
+
to the connector. This is called from within attention layer to
|
|
100
|
+
enable async copying during execution.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
layer_name (str): the name of the layer.
|
|
104
|
+
kv_layer (torch.Tensor): the paged KV buffer of the current
|
|
105
|
+
layer in vLLM.
|
|
106
|
+
attn_metadata (AttentionMetadata): the attention metadata.
|
|
107
|
+
**kwargs: additional arguments for the save operation.
|
|
108
|
+
"""
|
|
109
|
+
self._lmcache_engine.save_kv_layer(
|
|
110
|
+
layer_name, kv_layer, attn_metadata, **kwargs
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
def wait_for_save(self):
|
|
114
|
+
"""
|
|
115
|
+
Block until all the save operations is done. This is called
|
|
116
|
+
as the forward context exits to ensure that the async saving
|
|
117
|
+
from save_kv_layer is complete before finishing the forward.
|
|
118
|
+
|
|
119
|
+
This prevents overwrites of paged KV buffer before saving done.
|
|
120
|
+
"""
|
|
121
|
+
self._lmcache_engine.wait_for_save()
|
|
122
|
+
|
|
123
|
+
def get_finished(
|
|
124
|
+
self, finished_req_ids: set[str]
|
|
125
|
+
) -> tuple[Optional[set[str]], Optional[set[str]]]:
|
|
126
|
+
"""
|
|
127
|
+
Notifies worker-side connector ids of requests that have
|
|
128
|
+
finished generating tokens.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
ids of requests that have finished asynchronous transfer
|
|
132
|
+
(requests that previously returned True from request_finished()),
|
|
133
|
+
tuple of (sending/saving ids, recving/loading ids).
|
|
134
|
+
The finished saves/sends req ids must belong to a set provided in a
|
|
135
|
+
call to this method (this call or a prior one).
|
|
136
|
+
"""
|
|
137
|
+
return self._lmcache_engine.get_finished(finished_req_ids)
|
|
138
|
+
|
|
139
|
+
def get_block_ids_with_load_errors(self) -> set[int]:
|
|
140
|
+
"""Return block IDs that failed to load during the last interval."""
|
|
141
|
+
return self._lmcache_engine.get_block_ids_with_load_errors()
|
|
142
|
+
|
|
143
|
+
def shutdown(self):
|
|
144
|
+
"""
|
|
145
|
+
Shutdown the connector. This is called when the worker process
|
|
146
|
+
is shutting down to ensure that all the async operations are
|
|
147
|
+
completed and the connector is cleaned up properly.
|
|
148
|
+
"""
|
|
149
|
+
return self._lmcache_engine.shutdown()
|
|
150
|
+
|
|
151
|
+
# ==============================
|
|
152
|
+
# Scheduler-side methods
|
|
153
|
+
# ==============================
|
|
154
|
+
def get_num_new_matched_tokens(
|
|
155
|
+
self,
|
|
156
|
+
request: "Request",
|
|
157
|
+
num_computed_tokens: int,
|
|
158
|
+
) -> tuple[Optional[int], bool]:
|
|
159
|
+
"""
|
|
160
|
+
Get number of new tokens that can be loaded from the
|
|
161
|
+
external KV cache beyond the num_computed_tokens.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
request (Request): the request object.
|
|
165
|
+
num_computed_tokens (int): the number of locally
|
|
166
|
+
computed tokens for this request
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
the number of tokens that can be loaded from the
|
|
170
|
+
external KV cache beyond what is already computed.
|
|
171
|
+
"""
|
|
172
|
+
return self._lmcache_engine.get_num_new_matched_tokens(
|
|
173
|
+
request, num_computed_tokens
|
|
174
|
+
), False
|
|
175
|
+
|
|
176
|
+
def update_state_after_alloc(
|
|
177
|
+
self, request: "Request", blocks: "KVCacheBlocks", num_external_tokens: int
|
|
178
|
+
):
|
|
179
|
+
"""
|
|
180
|
+
Update KVConnector state after block allocation.
|
|
181
|
+
"""
|
|
182
|
+
self._lmcache_engine.update_state_after_alloc(request, num_external_tokens)
|
|
183
|
+
|
|
184
|
+
def build_connector_meta(
|
|
185
|
+
self, scheduler_output: SchedulerOutput
|
|
186
|
+
) -> KVConnectorMetadata:
|
|
187
|
+
"""
|
|
188
|
+
Build the connector metadata for this step.
|
|
189
|
+
|
|
190
|
+
This function should NOT modify fields in the scheduler_output.
|
|
191
|
+
Also, calling this function will reset the state of the connector.
|
|
192
|
+
|
|
193
|
+
Args:
|
|
194
|
+
scheduler_output (SchedulerOutput): the scheduler output object.
|
|
195
|
+
"""
|
|
196
|
+
return self._lmcache_engine.build_connector_meta(scheduler_output)
|
|
197
|
+
|
|
198
|
+
def request_finished(
|
|
199
|
+
self,
|
|
200
|
+
request: "Request",
|
|
201
|
+
block_ids: list[int],
|
|
202
|
+
) -> tuple[bool, Optional[dict[str, Any]]]:
|
|
203
|
+
"""
|
|
204
|
+
Called when a request has finished, before its blocks are freed.
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
True if the request is being saved/sent asynchronously and blocks
|
|
208
|
+
should not be freed until the request_id is returned from
|
|
209
|
+
get_finished().
|
|
210
|
+
Optional KVTransferParams to be included in the request outputs
|
|
211
|
+
returned by the engine.
|
|
212
|
+
"""
|
|
213
|
+
return self._lmcache_engine.request_finished(request, block_ids)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Standard
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
# Third Party
|
|
6
|
+
from vllm.config import VllmConfig
|
|
7
|
+
from vllm.distributed.kv_transfer.kv_connector.v1.base import (
|
|
8
|
+
KVConnectorBase_V1,
|
|
9
|
+
KVConnectorMetadata,
|
|
10
|
+
KVConnectorRole,
|
|
11
|
+
)
|
|
12
|
+
from vllm.logger import init_logger
|
|
13
|
+
from vllm.v1.core.sched.output import SchedulerOutput
|
|
14
|
+
import torch
|
|
15
|
+
|
|
16
|
+
# First Party
|
|
17
|
+
from lmcache.integration.vllm.vllm_v1_adapter import LMCacheConnectorV1Impl
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
# Third Party
|
|
21
|
+
from vllm.attention.backends.abstract import AttentionMetadata
|
|
22
|
+
from vllm.forward_context import ForwardContext
|
|
23
|
+
from vllm.v1.request import Request
|
|
24
|
+
|
|
25
|
+
logger = init_logger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class LMCacheConnectorV1Dynamic(KVConnectorBase_V1):
|
|
29
|
+
def __init__(self, vllm_config: "VllmConfig", role: KVConnectorRole):
|
|
30
|
+
super().__init__(vllm_config=vllm_config, role=role)
|
|
31
|
+
self._lmcache_engine = LMCacheConnectorV1Impl(vllm_config, role, self)
|
|
32
|
+
|
|
33
|
+
# ==============================
|
|
34
|
+
# Worker-side methods
|
|
35
|
+
# ==============================
|
|
36
|
+
def start_load_kv(self, forward_context: "ForwardContext", **kwargs) -> None:
|
|
37
|
+
"""
|
|
38
|
+
Start loading the KV cache from the connector to vLLM's paged
|
|
39
|
+
KV buffer. This is called from the forward context before the
|
|
40
|
+
forward pass to enable async loading during model execution.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
forward_context (ForwardContext): the forward context.
|
|
44
|
+
**kwargs: additional arguments for the load operation
|
|
45
|
+
|
|
46
|
+
Note:
|
|
47
|
+
The number of elements in kv_caches and layer_names should be
|
|
48
|
+
the same.
|
|
49
|
+
|
|
50
|
+
"""
|
|
51
|
+
self._lmcache_engine.start_load_kv(forward_context, **kwargs)
|
|
52
|
+
|
|
53
|
+
def wait_for_layer_load(self, layer_name: str) -> None:
|
|
54
|
+
"""
|
|
55
|
+
Block until the KV for a specific layer is loaded into vLLM's
|
|
56
|
+
paged buffer. This is called from within attention layer to ensure
|
|
57
|
+
async copying from start_load_kv is complete.
|
|
58
|
+
|
|
59
|
+
This interface will be useful for layer-by-layer pipelining.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
layer_name: the name of that layer
|
|
63
|
+
"""
|
|
64
|
+
self._lmcache_engine.wait_for_layer_load(layer_name)
|
|
65
|
+
|
|
66
|
+
def save_kv_layer(
|
|
67
|
+
self,
|
|
68
|
+
layer_name: str,
|
|
69
|
+
kv_layer: torch.Tensor,
|
|
70
|
+
attn_metadata: "AttentionMetadata",
|
|
71
|
+
**kwargs,
|
|
72
|
+
) -> None:
|
|
73
|
+
"""
|
|
74
|
+
Start saving the a layer of KV cache from vLLM's paged buffer
|
|
75
|
+
to the connector. This is called from within attention layer to
|
|
76
|
+
enable async copying during execution.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
layer_name (str): the name of the layer.
|
|
80
|
+
kv_layer (torch.Tensor): the paged KV buffer of the current
|
|
81
|
+
layer in vLLM.
|
|
82
|
+
attn_metadata (AttentionMetadata): the attention metadata.
|
|
83
|
+
**kwargs: additional arguments for the save operation.
|
|
84
|
+
"""
|
|
85
|
+
self._lmcache_engine.save_kv_layer(
|
|
86
|
+
layer_name, kv_layer, attn_metadata, **kwargs
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
def wait_for_save(self):
|
|
90
|
+
"""
|
|
91
|
+
Block until all the save operations is done. This is called
|
|
92
|
+
as the forward context exits to ensure that the async saving
|
|
93
|
+
from save_kv_layer is complete before finishing the forward.
|
|
94
|
+
|
|
95
|
+
This prevents overwrites of paged KV buffer before saving done.
|
|
96
|
+
"""
|
|
97
|
+
self._lmcache_engine.wait_for_save()
|
|
98
|
+
|
|
99
|
+
def shutdown(self):
|
|
100
|
+
"""
|
|
101
|
+
Shutdown the connector. This is called when the worker process
|
|
102
|
+
is shutting down to ensure that all the async operations are
|
|
103
|
+
completed and the connector is cleaned up properly.
|
|
104
|
+
"""
|
|
105
|
+
return self._lmcache_engine.shutdown()
|
|
106
|
+
|
|
107
|
+
# ==============================
|
|
108
|
+
# Scheduler-side methods
|
|
109
|
+
# ==============================
|
|
110
|
+
def get_num_new_matched_tokens(
|
|
111
|
+
self,
|
|
112
|
+
request: "Request",
|
|
113
|
+
num_computed_tokens: int,
|
|
114
|
+
) -> int:
|
|
115
|
+
"""
|
|
116
|
+
Get number of new tokens that can be loaded from the
|
|
117
|
+
external KV cache beyond the num_computed_tokens.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
request (Request): the request object.
|
|
121
|
+
num_computed_tokens (int): the number of locally
|
|
122
|
+
computed tokens for this request
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
the number of tokens that can be loaded from the
|
|
126
|
+
external KV cache beyond what is already computed.
|
|
127
|
+
"""
|
|
128
|
+
return self._lmcache_engine.get_num_new_matched_tokens(
|
|
129
|
+
request, num_computed_tokens
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def update_state_after_alloc(self, request: "Request", num_external_tokens: int):
|
|
133
|
+
"""
|
|
134
|
+
Update KVConnector state after block allocation.
|
|
135
|
+
"""
|
|
136
|
+
self._lmcache_engine.update_state_after_alloc(request, num_external_tokens)
|
|
137
|
+
|
|
138
|
+
def build_connector_meta(
|
|
139
|
+
self, scheduler_output: SchedulerOutput
|
|
140
|
+
) -> KVConnectorMetadata:
|
|
141
|
+
"""
|
|
142
|
+
Build the connector metadata for this step.
|
|
143
|
+
|
|
144
|
+
This function should NOT modify fields in the scheduler_output.
|
|
145
|
+
Also, calling this function will reset the state of the connector.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
scheduler_output (SchedulerOutput): the scheduler output object.
|
|
149
|
+
"""
|
|
150
|
+
return self._lmcache_engine.build_connector_meta(scheduler_output)
|