- temperature=0 पर भी GPT-4 और GPT-3.5-turbo एक ही input के लिए हर बार अलग output देते हैं; यह ऐसा असामान्य व्यवहार है जो पारंपरिक dense decoder models में नहीं दिखता
- अब तक non-determinism का कारण CUDA floating-point operations की instability को माना जाता रहा है, लेकिन केवल इससे पूरी बात समझ में नहीं आती
- Sparse MoE architecture की batched inference संरचना में, एक ही batch के अलग-अलग sequence के tokens expert buffer की जगह के लिए प्रतिस्पर्धा करते हैं, जिससे non-determinism पैदा होता है
- 30 बार दोहराए गए call के प्रयोग में GPT-4 ने दूसरे models की तुलना में बहुत अधिक unique outputs बनाए, जिससे इस hypothesis को अनुभवजन्य समर्थन मिला
- मॉडल sequence स्तर पर नहीं बल्कि सिर्फ batch स्तर पर deterministic है — यही GPT-4 API reliability समस्या की मुख्य वजह है
समस्या — temperature=0 होने पर भी output हर बार अलग क्यों है
- GPT-4/GPT-3.5-turbo का temperature=0.0 पर भी non-deterministic होना पहले से ही व्यापक रूप से जाना जाता है
- dense decoder-only models में temp=0 का मतलब greedy sampling होता है, और इससे पूरी determinism आनी चाहिए
- क्योंकि अगला token का logits केवल input sequence और model weights का pure function होना चाहिए
- OpenAI World Tour developer roundtable में technical team का जवाब
- आशय यह था: "ईमानदारी से कहें तो हम भी उलझन में हैं। यह system bug हो सकता है या optimized floating-point computation की non-determinism हो सकती है"
- यह व्यवहार 2 साल पहले से चर्चा में है, फिर भी ठीक नहीं हुआ — यही बात सवाल खड़े करती है
- reliability पर ज़ोर देने वाली OpenAI के पास जानबूझकर non-determinism बनाए रखने का कारण नहीं दिखता, इसलिए शुरू में इसे hardware की अनिवार्य सीमा मानना सबसे संभावित व्याख्या लगा
नई hypothesis — Soft MoE paper में मिला सुराग
- Soft MoE paper के section 2.2 में एक निर्णायक कड़ी मिली
- capacity constraints के तहत सभी Sparse MoE तरीके tokens को fixed-size groups में route करते हैं और group के भीतर balance को enforce या encourage करते हैं
- जब किसी group में अलग-अलग sequence/input के tokens शामिल होते हैं, तो वे expert buffer की खाली जगह के लिए एक-दूसरे से प्रतिस्पर्धा करते हैं
- नतीजतन model sequence स्तर पर non-deterministic और केवल batch स्तर पर deterministic होता है, और कुछ input sequences दूसरे inputs की final prediction को प्रभावित करते हैं
- GPT-4 का Mixture of Experts model होना पहले से सार्वजनिक जानकारी है
- GPT-4 को 2022 की दूसरी तिमाही से पहले train किया गया था, और Sparse MoE उससे भी पहले मौजूद था
- प्रस्तुत मुख्य hypothesis
- GPT-4 API ऐसे backend पर host है जो batched inference चलाता है
- दूसरे factors का कुछ असर हो सकता है, लेकिन API non-determinism का ज़्यादातर हिस्सा इस वजह से है कि Sparse MoE architecture sequence-wise determinism enforce नहीं कर पाता
सत्यापन — यह hardware समस्या नहीं है
- hypothesis की जाँच के लिए GPT-4 से सीधे test script लिखवाई गई
- chat models (gpt-4, gpt-3.5-turbo) और completion models (text-davinci-003/001, davinci-instruct-beta, davinci) पर एक ही prompt को temperature=0 के साथ बार-बार call करके unique outputs की संख्या गिनी गई
- script बनाते समय आए मुद्दे
- OpenAI API response बहुत धीमे थे; 3.5 turbo call में भी लगभग 10 सेकंड की delay आई, इसलिए timestamp logging जोड़कर यह पक्का किया गया कि गलती local नहीं थी
- कुछ completion models response को जल्दी काट रहे थे, इसलिए EOS token पर logit bias लगाकर सुधार किया गया
- chat model के
<|im_end|>token (100265) पर वैसा bias नहीं लगाया जा सका, क्योंकि API ने maximum 100257 से ऊपर key error लौटाया- चूंकि ज़्यादातर completions max token length तक पहुँच रही थीं और chat models पहले से ही कहीं अधिक non-deterministic थे, इसलिए इसे मुख्य समस्या नहीं माना गया
अनुभवजन्य परिणाम
- 3 trials, N=30, max_tokens=128 में unique outputs (औसत/30)
- gpt-4: 12, 11, 12 — औसत 11.67
- gpt-3.5-turbo: 4, 4, 3 — औसत 3.67
- text-davinci-003: 3, 2, 4 — औसत 3.00
- text-davinci-001: 2, 2, 2 — औसत 2.00
- davinci-instruct-beta: 1, 1, 1 — deterministic, output repeated loop में collapse हुआ
- davinci: 1, 1, 1 — deterministic, output repeated loop में collapse हुआ
- logit_bias समस्या मिलने से पहले max_tokens=256 पर परिणाम
- gpt-4: 30, gpt-3.5-turbo: 9, text-davinci-003: 5, text-davinci-001: 2
परिणामों की व्याख्या
- GPT-4 में unique outputs की संख्या असामान्य रूप से अधिक थी, यानी लंबे outputs में यह व्यवहारिक रूप से लगभग हमेशा non-deterministic है
- बाकी models, जो repeated loop में collapse नहीं हुए, उनमें भी कुछ स्तर की non-determinism थी; यह उस सार्वजनिक दावे से मेल खाता है कि GPU computation instability कुछ randomness पैदा करती है
- बचे हुए सवाल
- text-davinci-001 से gpt-3.5-turbo तक randomness धीरे-धीरे क्यों बढ़ती है, इसका साफ़ स्पष्टीकरण नहीं है
- यह भी पूरी तरह खारिज नहीं किया जा सकता कि GPT-4 की मजबूत non-determinism का कारण MoE नहीं बल्कि केवल parameters की बहुत बड़ी संख्या हो; हालांकि GPT-4 से तेज़ Turbo का davinci से अधिक non-deterministic होना इस व्याख्या से टकराता है
निहितार्थ
हम बहुत पीछे हैं
- अगर non-determinism Sparse MoE की batched inference में निहित गुण है, तो इस क्षेत्र के लोगों के लिए यह लगभग स्वाभाविक रूप से स्पष्ट होना चाहिए
- अधिकांश GPT-4 users को API instability की वजह न पता होना यह संकेत देता है कि या तो hypothesis ग़लत है, या MoE models को समझने वाले लोग इतने कम हैं कि यह व्याख्या सार्वजनिक चर्चा तक नहीं पहुँच पाई
- Google Deepmind को यह पता था और उसने paper में इसे एक गुजरती हुई पंक्ति जितनी मामूली बात की तरह लिखा, जिससे dense models पर काम करने वाली अन्य संस्थाओं की तुलना में Deepmind के बारे में अधिक आशावादी होने का आधार मिलता है
GPT-3.5-Turbo भी शायद MoE है
- यह अफ़वाह मौजूद है कि 3.5-turbo, GPT-4 जैसी ही architecture साझा करता है, बस parameter count बहुत कम है
- Turbo के प्रदर्शन तक पहुँचने के लिए मौजूदा स्थिति में 70B parameters चाहिए; OpenAI के traffic scale और speed को देखते हुए इसे single dense model से समझाना मुश्किल है
- API में Turbo ही दूसरा ऐसा model है जिसमें logprobs सार्वजनिक रूप से सीमित हैं
- पहले कहा जाता था कि ऐसा distillation accuracy बढ़ने से रोकने के लिए है, लेकिन Orca जैसे उदाहरणों के बाद यह तर्क कमज़ोर लगता है
- OpenAI ने सार्वजनिक रूप से कहा है कि वह ChatCompletions में logprobs integrate करने पर काम कर रही है; इससे "distillation रोकना" की तुलना में यह व्याख्या अधिक मजबूत लगती है कि "मॉडल मूलतः इतना random है कि stable engineering कठिन हो जाती है"
निष्कर्ष
- OpenAI GPT models का temperature=0 पर non-deterministic होना सबको पता है
- आम तौर पर इसका कारण CUDA-optimized floating-point computation की inaccuracy को माना जाता है
- यहाँ प्रस्तुत दूसरी hypothesis: Sparse MoE model की batched inference ही GPT-4 API non-determinism की मूल वजह है, और यह पुरानी व्याख्या से अधिक साफ़ बैठती है
- अनुभवजन्य रूप से दिखाया गया कि GPT-4 (और कुछ 3.5 models) की API calls, अन्य OpenAI models की तुलना में कहीं अधिक non-deterministic हैं
- speed, non-determinism, और logprobs हटाए जाने के आधार पर GPT-3.5-turbo के भी MoE होने की संभावना जताई गई है
1 टिप्पणियां
Hacker News की राय
floating-point errors आम तौर पर deterministic होते हैं, इसलिए वही calculation दो बार चलाने पर bit-level तक वही result आना चाहिए
result तभी अलग होता है जब कोई दूसरी state या entropy source हो—जैसे buffer को ठीक से zero-initialize न करना, race condition होना, या rounding mode flags को consistent तरीके से set न करना
AI/ML ecosystem में जल्दबाज़ी में लिखे जा रहे code की quality देखकर लगता है कि ये तीनों, और शायद उससे भी ज़्यादा, हो रहा होगा
इस मामले में GPU parallelism की वजह से numbers जोड़ने का order non-deterministic होता है, और उसके result थोड़े अलग हो सकते हैं
जिन systems को आप ठीक से नहीं जानते, उन पर लिखे code को देखकर दूसरों के code को नीचा दिखाने से बचना बेहतर है
CPU में भी parallel processing की वजह से ऐसा हो सकता है, लेकिन CPU के ज़्यादातर individual instructions deterministic होते हैं, जबकि CUDA non-deterministic primitive operations देता है
यह deterministic counterparts से तेज़ होने के कारण intentional design है, और समस्या यह है कि इसे खराब code से बने bug की तरह पेश किया गया
उदाहरण के लिए addition या multiplication जैसे कुछ floating-point operations associative नहीं होते, इसलिए reduction खत्म करने के execution order के हिसाब से result बदल जाता है
parallel situations में performance के कारण कुछ implementations reduction order को non-deterministic बनाते हैं, इसलिए final result भी non-deterministic हो जाता है
सिर्फ
GetTimeOfDay()call से भी ऐसा हो सकता है, और कई processors के बीच clock frequency drift से भीhttps://forumgeom.fau.edu/FG2012volume12/FG201216.pdf
पता नहीं मैंने referenced paper के excerpt को ठीक से समझा या नहीं
क्या इसका मतलब यह है कि अधिक efficient inference का कुछ हिस्सा पूरी तरह अलग inputs, जैसे किसी दूसरे user के input से आए tokens को mix करने पर निर्भर करता है? और संयोग से उसी batch में आए दूसरे inputs के आधार पर ‘experts’ allocation ratio बदलता है, और final completion result भी बदल जाता है?
अगर ऐसा है, तो यह सिर्फ non-determinism introduce नहीं करता, बल्कि same expert allocation के लिए compete करने वाली concurrent requests की संख्या पर response quality भी निर्भर हो सकती है
उदाहरण के लिए Hindi translation/interpretation में अच्छा system component India के peak hours में उसी capability के लिए simultaneously compete करने वाले inputs बढ़ने से worse results दे सकता है
यह समय के साथ quality घटने जैसा महसूस होने की एक और explanation भी हो सकती है। पहले कोई specific test reliably pass होता था क्योंकि related expert पर congestion कम था, और अब concurrent usage बढ़ने से वही test उस expert की पर्याप्त effort नहीं पा रहा हो सकता
अगर कोई sub-expert किसी area में शुरुआत में impressively अच्छा करता है, तो उस area का usage अधिक उस पर जुट सकता है, और नए congestion के कारण imitation uses को अब वही expert allocation नहीं मिलता, जिससे initial impressive performance गिरने का दलदल भी बन सकता है
अगर effect strong है और OpenAI इसे जानते हुए भी public नहीं कर रहा था, तो इसे एक bait product की तरह देखा जा सकता है: पहले कम congested Mixture-of-Experts system की non-representative excellence से users को attract करना, फिर ज़्यादा congested system की lower-quality results देना
शायद batches को अलग तरह से group किया जा रहा है। जैसे 10 के batch को 5-5 के 2 groups में बाँटते समय मेरा prompt पहले group में जाता है या दूसरे में, उसके हिसाब से answer बदलता है; और batch के अंदर same position में हो तो same answer मिलता है
same batch, यानी sequences और order same हों तो पूरा batch deterministic है, लेकिन batch को mix करने पर वह determinism खो जाता है
अभी भी reliability कई business-critical workflows में LLM के व्यापक adoption को रोकने वाली key obstacles में से एक है
अगर GPT-4 के fundamentally non-deterministic और unstable होने की अफवाह सच है, तो ज्यादातर enterprises के लिए बेहतर होगा कि वे specific domain के लिए similar performance वाले open-source LLM को fine-tune करें
domain-specific models हमेशा general-purpose models से बेहतर performance देते हैं, इसलिए उस तरफ performance gain भी अधिक है
अगर GPT-3.5 MoE model है, तो क्या यह open-source side के लिए काफी hopeful signal नहीं है?
अगर अच्छा open-source MoE model आ जाए, चाहे वह existing decoder model की variation जैसा ही क्यों न हो, तो इसका मतलब होगा कि बहुत कम resources से बहुत ज़्यादा काम किया जा सकता है
पता नहीं MoE model को scratch से train करना ज़रूरी है या नहीं
FLOPs:memory ratio घटाने का तरीका, जैसे Soft MoE, CPU या कम से कम Apple Silicon पर inference को भी ज़्यादा meaningful बना सकता है
अगर batch के अंदर sequences एक-दूसरे की routing को affect कर सकते हैं, तो यह अजीब और implement करने में कठिन side-channel attacks की संभावना जैसा लगता है
वाकई शानदार काम। कई कारणों से मैं MoE का कड़ा विरोध करता रहा हूं, लेकिन Substack पोस्ट या अफवाहों को दोहराने के बजाय विश्वसनीय सबूत पहली बार देखा है
मुझे बिल्कुल पता नहीं था कि GPT-4 non-deterministic है, और मैं इसे रोज़ करीब 2 घंटे इस्तेमाल करता हूं
समझ आता है कि सरसरी तौर पर देखने पर इसे नोटिस करना मुश्किल क्यों था। याद में “feel” मिलता-जुलता रहता है और यह मिलती-जुलती vocabulary बहुत इस्तेमाल करता है, लेकिन format पूरी तरह अलग होता है और कुछ key words समान रहते हुए synonym phrases जैसे बदल जाते हैं
लिंक किए गए gist example को देखें तो non-deterministic output सच में काफी मिलता-जुलता है: https://gist.github.com/152334H/047827ad3740627f4d37826c867a...
randomness सीमित होनी चाहिए, इसलिए यह हिस्सा कम-से-कम चौंकाने वाला नहीं है
लगता है OpenAI कभी न कभी इस randomness को घटाने का तरीका निकाल लेगा। ChatCompletions में logprobs फिर से जोड़ने का उनका public promise भी है, इसलिए यह और plausible लगता है
अगर आप वही input देकर API को बार-बार call करते हुए program develop कर रहे हों, तो non-determinism को miss करना मुश्किल है
जो व्यक्ति इसे इतना ज्यादा इस्तेमाल करता है, उसने इस हफ्ते आए features के bundle समेत क्या insights पाए होंगे, इसमें दिलचस्पी है
MoE का मतलब Mixture of Experts, यानी विशेषज्ञों का मिश्रण है
लेख के बीच के आसपास ही acronym को लगभग संयोग से expand किया गया है, और लगता है intended readers विशेषज्ञों के मिश्रण को समझने वाले लोग हैं; मैं उनमें नहीं था
GPT-3.0 के davinci-instruct-beta models 2021 की शुरुआत से ही non-deterministic logprobs return कर रहे थे
यह अनुमान है, और CUDA में खुद भी non-determinism bugs अक्सर होते हैं
text-davinci-001औरtext-davinci-002को FeedMe और SFT से train किया गया था, औरtext-davinci-003RLHF थाmodel खुद भी higher temperature पर ज्यादा variance दिखाता है
davinciऔरcode-davinci-002के बारे में क्या?“ये tokens अक्सर expert buffer में उपलब्ध slots के लिए एक-दूसरे से compete करते हैं” — तो जब मैं लंबा code मांगता हूं, ChatGPT अक्सर function की जगह सिर्फ placeholder डाल देता है, क्या इसकी वजह भी यही है?
“ये tokens अक्सर expert buffer में उपलब्ध slots के लिए एक-दूसरे से compete करते हैं” — तो क्या इसका मतलब है कि load ज्यादा होने पर results बदल जाते हैं?
कभी-कभी output quality बदलती महसूस होती है, क्या उसे भी high load से explain किया जा सकता है?
MoE का मतलब Mixture of Experts है