पाठ 15 / 29

Model Routing और Cascades

आसान अनुरोध सस्ते मॉडलों को और कठिन मज़बूत मॉडलों को भेजें।

हर सवाल को सबसे बड़ा मॉडल नहीं चाहिए

मज़बूत मॉडल छोटे मॉडलों से कई गुना महँगे हैं, पर कई अनुरोध आसान हैं। Cascade पहले सस्ता मॉडल आज़माता है और जब विश्वास संकेत कहे कि सस्ता उत्तर ग़लत हो सकता है (स्व-रिपोर्टेड कम विश्वास, विफल validation, अनिश्चित classifier, नमूनों में असहमति) तब मज़बूत मॉडल को आगे बढ़ाता है। Router इसके बजाय कठिनाई पहले से अनुमानित करके मॉडल चुनता है। दोनों बड़ी लागत-बचत के बदले थोड़ी गुणवत्ता देते हैं, और दोनों संकेत की गुणवत्ता पर निर्भर हैं। System का सिरे-से-सिरे मूल्यांकन करें: अपने test set पर मज़बूत-केवल baseline के विरुद्ध समग्र गुणवत्ता और लागत मापें, और प्रति श्रेणी गुणवत्ता देखें, क्योंकि सस्ता रास्ता ठीक उन्हीं कठिन श्रेणियों में विफल हो सकता है जिनकी आपको परवाह है। Outages के लिए fallbacks रखें: मुख्य मॉडल बंद हो तो दूसरे पर जाएँ।

Cascade बनाम केवल-मज़बूत (अनुकरण), चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यह गढ़ी संख्याओं और seeded random draws वाला अनुकरण है, इसलिए यह प्रभाव का रूप दिखाता है, किसी उत्पाद का माप नहीं। 10,000 अनुकरणित queries के साथ cascade केवल-मज़बूत मॉडल की 43% लागत पर गुणवत्ता 0.902 पाता है, जबकि अकेले मज़बूत मॉडल का 0.971। यह असली समझौता है: आधी से अधिक लागत के बदले लगभग 7 अंक गुणवत्ता। यह स्वीकार्य है या नहीं यह आपके गुणवत्ता लक्ष्य और किन श्रेणियों में हानि है उस पर निर्भर है।

import random
rng = random.Random(42)

N = 10000
# each query has a difficulty in [0,1]; the cheap model solves easy ones, the strong model solves almost all
queries = [rng.random() for _ in range(N)]
cheap_ok  = lambda d: rng.random() < (0.95 if d < 0.6 else 0.35)
strong_ok = lambda d: rng.random() < 0.97
cheap_cost, strong_cost = 1.0, 12.0                         # relative units
def confident(d): return d < 0.55 or rng.random() < 0.25     # imperfect confidence signal from the cheap model

only_strong = sum(strong_ok(d) for d in queries) / N
ok = cost = 0
for d in queries:
    cost += cheap_cost
    if confident(d):
        ok += cheap_ok(d)
    else:
        cost += strong_cost; ok += strong_ok(d)
print(f"strong model only : quality {only_strong:.3f}, cost {strong_cost * N:,.0f}")
print(f"cascade           : quality {ok / N:.3f}, cost {cost:,.0f}  ({cost / (strong_cost * N):.0%} of the strong-only cost)")

Output:

strong model only : quality 0.971, cost 120,000
cascade           : quality 0.902, cost 51,388  (43% of the strong-only cost)

Fallback मॉडल रखें

मुख्य मॉडल बंद हो तो दूसरे पर जाएँ ताकि users को सेवा मिलती रहे।

त्वरित जाँच: Cascade का मूल्यांकन कैसे करना चाहिए?

  • सिरे-से-सिरे, मज़बूत-मॉडल baseline से गुणवत्ता और लागत की तुलना करके, प्रति श्रेणी भी
  • सिर्फ़ उसकी लागत से
  • सिर्फ़ सस्ते मॉडल के score से
  • इसे आँका नहीं जा सकता
Answer

सिरे-से-सिरे, मज़बूत-मॉडल baseline से गुणवत्ता और लागत की तुलना करके, प्रति श्रेणी भी — कठिन श्रेणियों में विफल होता सस्ता रास्ता गंभीर गुणवत्ता हानि छिपा सकता है।