स्टेप 12 · Long context
4k से 1M tokens तक जाना सिर्फ एक ट्रिक नहीं है। यह चार ट्रिक्स हैं, और हर एक की अपनी कीमत होती है।
60 सेकंड में
स्टेप 12 · Long context
4k से 1M tokens तक जाना सिर्फ एक ट्रिक नहीं है। यह चार ट्रिक्स हैं, और हर एक की अपनी कीमत होती है।
- 1
रुकावट 1 · Compute और memory
Sequence length के साथ attention quadratic तरीके से बढ़ता है, और KV cache इसके साथ linearly बढ़ता है। 1M tokens पर, दोनों बहुत भारी पड़ते हैं। - 2
रुकावट 2 · मॉडल ने इसे कभी देखा ही नहीं है
4k sequences पर train की गई position encodings का मतलब अपने-आप 100k पर समझ नहीं आता। मॉडल पूरे आत्मविश्वास के साथ बकवास करने लगता है। - 3
रुकावट 3 · इसके पास जो है, यह उसका इस्तेमाल नहीं कर पाता
भले ही 200k की window काम कर रही हो, बहुत लंबे inputs के बीच में retrieval की क्वालिटी अक्सर गिर जाती है। एक बड़ी window होने का मतलब यह नहीं है कि attention उस पर सही ढंग से बंटा हुआ है।
तकनीकें
| तकनीक | क्या ठीक करता है | कीमत |
|---|---|---|
| FlashAttention | खुद attention की memory | कुछ नहीं — इसे हमेशा इस्तेमाल करें |
| GQA / MQA | KV cache का साइज़ | क्वालिटी में बहुत मामूली कमी |
| RoPE scaling (NTK, YaRN) | Position extrapolation | थोड़ी continued training की ज़रूरत होती है |
| Sliding-window attention | Quadratic लागत | सटीक long-range attention खो देता है |
| Attention sinks | Streaming स्थिरता | Architectural बदलाव |
| KV cache quantisation | Serving memory | Accuracy में थोड़ी कमी |
| Ring / sequence parallel | लंबी sequences पर training | जटिलता, interconnect पर दबाव |
Context extension असल में कैसे काम करता है
def yarn_scaled_frequencies(head_dim, orig_max, target_max, base=10000.0):
"""Interpolate low-frequency dimensions, leave high-frequency ones alone."""
scale = target_max / orig_max
inv = 1.0 / (base ** (torch.arange(0, head_dim, 2).float() / head_dim))
wavelen = 2 * math.pi / inv
low, high = orig_max / 32, orig_max / 4 # boundary wavelengths
# short wavelengths (local detail) keep their original frequency
# long wavelengths (global position) get interpolated by the scale factor
ratio = ((orig_max / wavelen) - low) / (high - low)
ratio = ratio.clamp(0, 1)
return inv / (scale * (1 - ratio) + ratio)
# then continue training on long documents for a few billion tokens --
# scaling the frequencies alone is not enough on its ownईमानदारी से टेस्ट करें
- Needle in a haystack — किसी लंबे दस्तावेज़ में एक तथ्य छुपाएं और कई अलग-अलग गहराइयों व लंबाइयों पर उसके बारे में पूछें। यह बुनियादी बात है, और इसे पास करना आसान है।
- Multi-needle — कई तथ्य जिन्हें आपस में जोड़ना ज़रूरी होता है। यह काफी कठिन है, और असली इस्तेमाल का कहीं बेहतर अंदाज़ा देता है।
- Full-document reasoning — एक ऐसा सवाल जिसके जवाब के लिए ज़्यादातर input की ज़रूरत होती है। यहीं पर long-context के दावे अक्सर फेल हो जाते हैं।
- लंबाई पर Latency और लागत — 500k-token का प्रॉम्प्ट प्रोसेस करना हर बार धीमा और महंगा होता है।
और देखें और पढ़ें
लैब
एक ऐसा context extension जो सचमुच काम करता है, ईमानदारी से टेस्ट किया गया।
समस्या
# Single needle passes easily. These are the tests that discriminate.
def multi_needle(doc, facts, question): ... # answer requires 3+ facts combined
def full_doc(doc, question): ... # answer requires most of the inputआपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1Needle-in-a-haystack 100% पर है और यूज़र्स कह रहे हैं कि long-context काम नहीं कर रहा। दोनों बातों का मिलान करें।दिखाएं
अक्सर पूछे जाने वाले सवाल
क्या मैं बस एक बड़ी max length सेट कर सकता हूँ?
आप नंबर सेट कर सकते हैं, और मॉडल उस सीमा से आगे फर्राटेदार बकवास पैदा करेगा जिसके लिए उसे train किया गया था। असली context extension के लिए frequency scaling के साथ-साथ सचमुच लंबे दस्तावेज़ों पर continued training की ज़रूरत होती है।
लंबे inputs के बीच में क्वालिटी क्यों गिर जाती है?
यह बार-बार देखा गया है और पूरी तरह से समझाया नहीं गया है। Training डेटा में long-range dependencies के बहुत कम उदाहरण होते हैं, और बहुत ज़्यादा दूरी पर position encodings कम स्पष्ट रूप से काम करती हैं। सुधार के उपाय मदद करते हैं; लेकिन यह असर पूरी तरह खत्म नहीं हुआ है।
Serving में long context की क्या लागत आती है?
KV cache, context length गुणा batch size के हिसाब से बढ़ता है। यह अक्सर इस बात पर सबसे बड़ी रुकावट बनता है कि एक GPU कितने यूज़र्स को serve कर सकता है, और यही वजह है कि GQA और cache quantisation इतने मायने रखते हैं।
क्या यहाँ state-space models बेहतर हैं?
उनका inference लीनियर टाइम में होता है और state का साइज़ तय रहता है, जो लंबी sequences के लिए बहुत आकर्षक है। फिलहाल वे कुछ सटीक recall खो देते हैं, यही वजह है कि attention layers को बीच-बीच में जोड़ने वाले hybrid मॉडल्स लोकप्रिय हैं।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।