पाठ 16 / 29
Tail Latency, Timeouts और Hedged Requests
वह धीमा 1% सँभालें जिसे users याद रखते हैं।
औसत धीमे अनुरोध छिपाते हैं
LLM latency की लंबी पूँछ है: अधिकांश calls तेज़ हैं, कुछ कई गुना लंबी (queueing, लंबे आउटपुट, provider की गड़बड़ियाँ)। Users उत्पाद को उसके धीमे क्षणों से आँकते हैं, इसलिए औसत नहीं percentiles (p50, p95, p99) ट्रैक करें। तकनीकें: उचित सीमाओं और शालीन fallback सहित timeouts; अनुभव की गति के लिए streaming; छोटे prompts और आउटपुट; स्वतंत्र चरणों (retrieval और moderation) का समानांतर चलना; और hedged requests: कोई call किसी सीमा (मान लें आपके p90 के पास) तक न लौटे तो दूसरी प्रति भेजें और जो पहले उत्तर दे उसे उपयोग करें, दूसरी रद्द करें। Hedging कुछ अतिरिक्त अनुरोधों (और लागत) की क़ीमत पर पूँछ घटाती है, इसलिए इसे केवल idempotent, लागत-सहनशील calls पर लगाएँ। अनुकरण गढ़ी संख्याओं से प्रभाव दिखाता है।
Hedging पूँछ घटाती है (अनुकरण), चलाकर
मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यह गढ़ी संख्याओं और seeded random draws वाला अनुकरण है, इसलिए यह प्रभाव का रूप दिखाता है, किसी उत्पाद का माप नहीं। Median 1.02 s ही रहता है, पर 1.5 s बाद दूसरी प्रति भेजने पर p99 9.16 s से 2.95 s और p95 2.73 s से 2.25 s हो जाता है। लगभग 17% अतिरिक्त अनुरोध भेजे जाते हैं।
import random
rng = random.Random(5)
def latency(): # mostly fast, with an occasional slow outlier (seconds)
return rng.lognormvariate(0, 0.35) if rng.random() > 0.05 else rng.uniform(6, 10)
def pct(values, p): v = sorted(values); return v[int(p * (len(v) - 1))]
N = 20000
single = [latency() for _ in range(N)]
hedged = [min(latency(), 1.5 + latency()) for _ in range(N)] # send a second copy after 1.5 s; take the first answer
for name, xs in (("single request", single), ("hedged after 1.5 s", hedged)):
print(f"{name:20} p50 {pct(xs, .5):.2f}s p95 {pct(xs, .95):.2f}s p99 {pct(xs, .99):.2f}s")
extra = sum(1 for x in single if x > 1.5) / N
print(f"extra requests sent by hedging: about {extra:.1%}")
Output:
single request p50 1.02s p95 2.73s p99 9.16s hedged after 1.5 s p50 1.02s p95 2.25s p99 2.95s extra requests sent by hedging: about 16.7%
सिर्फ़ idempotent calls पर hedge करें
दुष्प्रभाव वाली कार्रवाई की प्रति भेजने से उसका असर दोहर सकता है।
त्वरित जाँच: सिर्फ़ औसत की जगह p95 और p99 क्यों ट्रैक करें?
- औसत हमेशा ग़लत है
- Percentiles निकालना सस्ता है
- औसत वे धीमे अनुरोध छिपाते हैं जो users नोटिस करते हैं
- Users गति अनदेखी करते हैं
Answer
औसत वे धीमे अनुरोध छिपाते हैं जो users नोटिस करते हैं — पूँछ अनुभव की भरोसेमंदी तय करती है।