(Yes, I realize it's probably more than 4MB, but it's still an outrageously high markup. They could do their own caching, not tell you they're doing it, and keep the difference and make even more money)
(Yes, I realize it's probably more than 4MB, but it's still an outrageously high markup. They could do their own caching, not tell you they're doing it, and keep the difference and make even more money)
Size of KV cache = 2 * (num_layers) * (num_kv_heads * dim_head) * seq_length * precision
8-bit Gemma 27B KV cache = 2 * (46) * (16 * 144) * 1e6 * 1 byte ≈ 200 GB
Note that this doesn't take further optimizations into account that Google might be using.Formula: https://developer.nvidia.com/blog/mastering-llm-techniques-i...
Gemma 27B config: https://huggingface.co/google/gemma-2-27b/blob/main/config.j...
Is it a lot for caching in L1 on a chip somewhere? No that'd be wildly cheap.
Is it a lot for "caching" on a tape somewhere? Yes.
So where on this scale does keeping it quick to get to gpu memory lie?
> That's two million times more expensive than the storage cost of standard S3 (
You're not comparing to s3 at all.
Google can search the entire Internet in a fraction of a second, they can keep a million tokens within a few dozen milliseconds of a GPU for less than a dollar an hour.
If you use the Elasticache pricing, which is $0.125/gb per hour, it's still eight times more expensive. So even if a million tokens is a full gigabyte of data, it's still almost an order of magnitude more expensive than an in-memory cache adjacent to the inference boxes.
When your managed cache costs right times as much as a general purpose managed cache _in the cloud_, you've jumped the shark on pricing.
> If you use the Elasticache pricing, which is $0.125/gb per hour, it's still eight times more expensive. So even if a million tokens is a full gigabyte of data
Is it a gigabyte of data and is it fast enough?
You've guessed 4mb and 1gb. What's the actual data size here? What speed do you need to get it into the GPU ram?
The entire point here is to lower latency and costs so it has to be close and fast.
Guessing at sizes isn't helping anything here.
> A token is 32-bit integer.
No, in transformer, token is a vector, for larger models it is probably something like 6k-12k floats, assuming larger model sizes. Assume 8-bit precision, a token is more like 6-12kB, per token.
So assume 100k tokens, you will end up with 554MB for input tokens, ALONE.
Depending on your model architecture, the memory could vary, but from my observation, the runtime memory increase is at least on the same magnitude with the initial amount of memory usage upon loading the model, and this is for a moderate context length (<32k), and will grow linearly, if we don't count the n*n KV matrices.
So you are easily looking at caching 10~100GB of data, in a very hot state, and that is going to be very expensive indeed.