Continuum C++ API
Unified runtime for token + tensor execution
Loading...
Searching...
No Matches
layer_cache.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <cstdint>
7#include <mutex>
8#include <optional>
9#include <string>
10#include <unordered_map>
11#include <vector>
12
13namespace continuum::runtime {
14
16 std::string model_id;
17 std::string decode_hash;
18 std::int32_t prefix_len = 0;
19 std::int32_t layer_id = 0;
20 std::uint64_t arch_version = 0;
21 std::uint64_t token_hash = 0;
22 std::string cache_namespace;
23
30};
31
33 std::size_t operator()(const LayerCheckpointKey& k) const {
34 auto h = std::hash<std::string>{}(k.model_id);
35 h ^= std::hash<std::string>{}(k.decode_hash) + 0x9e3779b97f4a7c15ULL + (h << 6) + (h >> 2);
36 h ^= std::hash<std::int32_t>{}(k.prefix_len) + 0x9e3779b97f4a7c15ULL + (h << 6) + (h >> 2);
37 h ^= std::hash<std::int32_t>{}(k.layer_id) + 0x9e3779b97f4a7c15ULL + (h << 6) + (h >> 2);
38 h ^= std::hash<std::uint64_t>{}(k.arch_version) + 0x9e3779b97f4a7c15ULL + (h << 6) + (h >> 2);
39 h ^= std::hash<std::uint64_t>{}(k.token_hash) + 0x9e3779b97f4a7c15ULL + (h << 6) + (h >> 2);
40 h ^= std::hash<std::string>{}(k.cache_namespace) + 0x9e3779b97f4a7c15ULL + (h << 6) + (h >> 2);
41 return h;
42 }
43};
44
47 // Tokens the cached state was computed over; reuse requires these to be a
48 // prefix of the query tokens, otherwise the state belongs to another prompt.
49 std::vector<std::int32_t> tokens;
50 std::string model_id;
51 std::string decode_hash;
52 std::int32_t layer_id = 0;
53 std::int32_t prefix_len = 0;
54 std::uint64_t arch_version = 0;
55 std::int64_t last_access_ns = 0;
56 std::size_t estimated_bytes = 0;
57 std::string cache_namespace;
58};
59
67 public:
68 explicit LayerKVCacheIndex(std::size_t max_entries = 4096,
69 std::size_t max_bytes = 256 * 1024 * 1024);
70
71 struct LookupResult {
73 std::int32_t layer_id = 0;
74 std::int32_t prefix_len = 0;
75 bool found = false;
76 };
77
78 LookupResult find_deepest(const std::string& model_id,
79 const std::string& decode_hash,
80 const std::vector<std::int32_t>& tokens,
81 std::int32_t total_layers,
82 std::uint64_t arch_version,
83 const std::string& cache_namespace = {}) const;
84
85 void insert(LayerCheckpoint checkpoint);
86 void invalidate_model(const std::string& model_id);
87 void invalidate_arch(std::uint64_t arch_version);
88 void clear();
89
90 std::size_t size() const;
92 std::size_t max_entries() const { return max_entries_; }
94 std::size_t max_bytes() const { return max_bytes_; }
96 std::size_t estimated_bytes() const;
97
98 private:
99 void evict_if_needed();
100
101 mutable std::mutex mu_;
102 // Mutable so a const lookup can refresh LRU recency on a hit.
103 mutable std::unordered_map<LayerCheckpointKey, LayerCheckpoint, LayerCheckpointKeyHash> entries_;
104 std::size_t max_entries_;
105 std::size_t max_bytes_;
106 std::size_t current_bytes_ = 0;
107 mutable std::uint64_t clock_ = 0;
108};
109
110} // namespace continuum::runtime
Definition layer_cache.hpp:66
void invalidate_model(const std::string &model_id)
void invalidate_arch(std::uint64_t arch_version)
LayerKVCacheIndex(std::size_t max_entries=4096, std::size_t max_bytes=256 *1024 *1024)
std::size_t max_bytes() const
Byte budget passed at construction.
Definition layer_cache.hpp:94
void insert(LayerCheckpoint checkpoint)
std::size_t estimated_bytes() const
Sum of the resident checkpoints' estimated_bytes.
std::size_t max_entries() const
Capacity in entries passed at construction.
Definition layer_cache.hpp:92
LookupResult find_deepest(const std::string &model_id, const std::string &decode_hash, const std::vector< std::int32_t > &tokens, std::int32_t total_layers, std::uint64_t arch_version, const std::string &cache_namespace={}) const
Definition checkpoint.hpp:12
Definition backend.hpp:16
Definition layer_cache.hpp:32
std::size_t operator()(const LayerCheckpointKey &k) const
Definition layer_cache.hpp:33
Definition layer_cache.hpp:15
std::uint64_t arch_version
Definition layer_cache.hpp:20
std::int32_t prefix_len
Definition layer_cache.hpp:18
std::string decode_hash
Definition layer_cache.hpp:17
std::int32_t layer_id
Definition layer_cache.hpp:19
std::string cache_namespace
Definition layer_cache.hpp:22
bool operator==(const LayerCheckpointKey &o) const
Definition layer_cache.hpp:24
std::string model_id
Definition layer_cache.hpp:16
std::uint64_t token_hash
Definition layer_cache.hpp:21
Definition layer_cache.hpp:45
std::size_t estimated_bytes
Definition layer_cache.hpp:56
std::int32_t prefix_len
Definition layer_cache.hpp:53
std::string decode_hash
Definition layer_cache.hpp:51
std::int32_t layer_id
Definition layer_cache.hpp:52
std::vector< std::int32_t > tokens
Definition layer_cache.hpp:49
backend::BackendState state
Definition layer_cache.hpp:46
std::string cache_namespace
Definition layer_cache.hpp:57
std::uint64_t arch_version
Definition layer_cache.hpp:54
std::int64_t last_access_ns
Definition layer_cache.hpp:55
std::string model_id
Definition layer_cache.hpp:50
std::int32_t prefix_len
Definition layer_cache.hpp:74
backend::BackendState state
Definition layer_cache.hpp:72
std::int32_t layer_id
Definition layer_cache.hpp:73
bool found
Definition layer_cache.hpp:75