# Context Window और KV Cache — Large Language Models

Source: https://www.geekswithgeeks.com/hi/llms/t-context

> समझें कि context लंबाई सीमित क्यों है और caching generation कैसे तेज़ करती है।

## स्मृति ही सीमा है

**Context window** अधिकतम tokens (prompt और बना आउटपुट मिलाकर) है जिन्हें मॉडल एक साथ देख सकता है। Attention हर token की तुलना हर पिछले से करता है, इसलिए सीधी लागत लंबाई के वर्ग से बढ़ती है। दोबारा गणना से बचने को serving systems हर पिछले token की keys और values **KV cache** में रखते हैं, ताकि हर नया token सिर्फ़ अपनी गणना करे। Cache GPU स्मृति लेता है जो अनुक्रम लंबाई, परतों, heads और एक साथ users की संख्या के साथ बढ़ती है, और लंबे contexts व ऊँचे throughput में अक्सर सीमा बन जाती है।

## स्मृति अंकगणित, चलाकर

मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। Weights अकेले fp16 में प्रति parameter 2 bytes लेते हैं: 7B मॉडल के लिए 14 GB। KV-cache पंक्ति उदाहरण configuration (32 परतें, 8 KV heads, head आकार 128, fp16) उपयोग करती है: एक 8192-token अनुक्रम को लगभग 1.07 GB चाहिए। असली मॉडल अलग होते हैं; सूत्र ही मुख्य बात है।

```python
def params_gb(params_b, bytes_per):
    return params_b * 1e9 * bytes_per / 1e9

for name, b in (("7B", 7), ("13B", 13), ("70B", 70)):
    print(name, "fp16", params_gb(b, 2), "GB | int8", params_gb(b, 1), "GB | 4-bit", params_gb(b, 0.5), "GB")

# KV cache: 2 (K and V) * layers * kv_heads * head_dim * bytes * tokens
layers, kv_heads, head_dim, bytes_per, tokens = 32, 8, 128, 2, 8192
kv = 2 * layers * kv_heads * head_dim * bytes_per * tokens
print("KV cache for one 8192-token sequence:", round(kv / 1e9, 3), "GB")

```

Output:

```
7B fp16 14.0 GB | int8 7.0 GB | 4-bit 3.5 GB
13B fp16 26.0 GB | int8 13.0 GB | 4-bit 6.5 GB
70B fp16 140.0 GB | int8 70.0 GB | 4-bit 35.0 GB
KV cache for one 8192-token sequence: 1.074 GB
```

## लंबा context मुफ़्त नहीं

बड़ी window पैसे और latency लेती है, और बहुत लंबे prompts के बीच दबे ब्योरों पर मॉडल कम भरोसे से ध्यान देते हैं। जो प्रासंगिक है भेजें, सब कुछ नहीं।

**Quiz:** KV cache क्या रखता है?

- [ ] User का password
- [x] पिछले tokens की keys और values, ताकि दोबारा गणना न हो
- [ ] प्रशिक्षण डेटा
- [ ] Tokenizer नियम

*Answer:* पिछले tokens की keys और values, ताकि दोबारा गणना न हो. पिछली keys और values cache करने से हर नया token बनाना सस्ता होता है।
