Google-ന്റെ Gemma-4 31B മോഡൽ AWS Inferentia2 inf2.24xlarge-ലേക്ക് പോർട്ട് ചെയ്തപ്പോൾ, CPU റഫറൻസുമായി കൃത്യമായ ടോക്കൺ-ഫോർ-ടോക്കൺ പൊരുത്തം (match) ലഭിച്ചു—എങ്കിലും ഓരോ വാചകവും അർത്ഥശൂന്യമായിരുന്നു. "പൊരുത്തപ്പെടുക" (matching) എന്നതും "പ്രവർത്തിക്കുക" (working) എന്നതും തമ്മിലുള്ള ഈ വ്യത്യാസം, വലിയ LLM-들을 Amazon-ന്റെ കസ്റ്റം ഇൻഫറൻസ് ചിപ്പുകളിലേക്ക് മാറ്റാൻ ശ്രമിക്കുന്നവർക്കുള്ള ഒരു മുന്നറിയിപ്പാണ്.
ടോക്കൺാടി ടോക്കൺ പൊരുത്തപ്പെടുന്നത് മാത്രം എന്തുകൊണ്ട് മതിയാകുന്നില്ല
ഡെവലപ്പർ ഇൻഫറൻഷ്യ ഉപകരണത്തിൽ നിന്നുള്ള ഓരോ ഔട്ട്പുട്ട് ടോക്കണും മോഡലിന്റെ CPU റണ്ണിൽ നിന്നുള്ള ടോക്കണുമായി താരതമ്യം ചെയ്തു. സ്ട്രീമുകൾ ഒരേപോലെയായിരുന്നു, അതിനാൽ ഹാർഡ്വെയർ റഫറൻസ് ഇംപ്ലിമെന്റേഷൻ കൃത്യമായി പുനർനിർമ്മിച്ചതായി തോന്നി. എന്നാൽ യഥാർത്ഥത്തിൽ, രണ്ട് സ്ട്രീമുകളും ചാറ്റ് ടെംപ്ലേറ്റ് ഇല്ലാത്തതും തെറ്റായ ടേൺ മാർക്കറുകൾ നൽകപ്പെട്ടതുമായ ഒരു മോർഫ്ഡ് പ്രോംപ്റ്റിലേക്കാണ് (malformed prompt) പോയിരുന്നത്. ടെംപ്ലേറ്റ് ഇല്ലാത്തതിനാൽ മോഡൽ ഒരു ഇൻഫിനിറ്റ് ലൂപ്പിൽ അകപ്പെടുകയും അർത്ഥശൂന്യമായ കാര്യങ്ങൾ പുറത്തുവിടുകയും ചെയ്തു. ഹാർഡ്വെയർ അതിന്റെ ജോലി കൃത്യമായി ചെയ്തു—റഫറൻസ് കോഡിലുള്ള ഒരു ബഗ്ഗ് അത് അതേപടി പുനർനിർമ്മിച്ചു.
പാഠം ലളിതമാണ്: SEQ_MATCH (sequential token equality) എന്നാൽ കൃത്യത (correctness) എന്നല്ല അർത്ഥം. റഫറൻസ് ഇംപ്ലിമെന്റേഷൻ തകരാറിലാണെങ്കിൽ, ഹാർഡ്വെയർ അതിന്റെ കൃത്യമായ പകർപ്പ് അതേ പരാജയം തന്നെ ഏറ്റെടുക്കും. വാലിഡേഷൻ ടോക്കൺ തലത്തിലുള്ള പൊരുത്തത്തിന് അപ്പുറത്തേക്ക് പോകണം; ശരിയായി ഫോർമാറ്റ് ചെയ്ത ഇൻപുട്ടുകൾ ഉപയോഗിച്ച് എൻഡ്-ടു-എൻഡ് ഫങ്ഷണൽ പരിശോധനകൾ ആവശ്യമാണ്.
പാരാമീറ്ററുകളായി വേഷം മാറുന്ന ബഫറുകൾ
ലോഡ് ഫേസിൽ മോഡൽ ലോഡർ layer_scalar എന്ന ഘടകത്തെ ഒഴിവാക്കി. PyTorch മോഡൽ ഡെഫനിഷനിൽ ഈ ഒബ്ജക്റ്റിനെ ഒരു പാരാമീറ്റർ എന്നതിന് പകരം ഒരു ബഫർ (buffer) ആയിട്ടാണ് കോഡ് രേഖപ്പെടുത്തിയത്. ബഫറുകൾ എന്നത് ട്രെയിനിംഗ് സമയത്ത് അപ്ഡേറ്റ് ചെയ്യാത്ത സ്റ്റാറ്റിക് ടെൻസറുകളാണ് (static tensors), കൂടാതെ പല ലോഡറുകളും ഇവയെ Neuron-അനുയോജ്യമായ ഫോർമാറ്റുകളിലേക്ക് മാറ്റുമ്പോൾ അവഗണിക്കാറുണ്ട്. ഇത് ഒഴിവാക്കിയത് പല ലെയറുകളുടെയും സ്കെയിലിംഗ് ഫാക്ടറുകളെ ഡിഫോൾട്ട് മൂല്യങ്ങളിൽ തന്നെ നിലനിർത്താൻ കാരണമായി, ഇത് മുഴുവൻ നെറ്റ്വർക്കിന്റെയും ഗണിതക്രിയകളെ (math) തെറ്റിച്ചു. യാതൊരു പിശകും (error) കാണിച്ചില്ല; മോഡൽ കംപൈൽ ചെയ്യുകയും ഇൻഫറൻസ് പൈപ്പ്ലൈൻ പ്രവർത്തിക്കുകയും ചെയ്തു, പക്ഷേ ഗണിതപരമായ ഫലങ്ങൾ തെറ്റായിരുന്നു.
ഇൻഫറൻഷ്യയിലേക്ക് വലിയ മോഡലുകൾ മാറ്റുന്നവർ, ഓരോ നോൺ-പാരാമീറ്റർ ടെൻസറും (non-parameter tensor) പരിശോധിക്കേണ്ടതാണ്. ഒരു ടെൻസർ പഠിക്കേണ്ട (learned) ഒന്നല്ലെങ്കിൽ പോലും, ശരിയായ ഫോർവേഡ്-പാസ് കമ്പ്യൂട്ടേഷന് അത് അത്യാവശ്യമായിരിക്കാം. ബഫറുകൾ ഉൾപ്പെട്ടിട്ടുണ്ടോ എന്ന് നേരിട്ട് പരിശോധിക്കുന്നത് തിരിച്ചറിയാൻ പ്രയാസമുള്ള സൈലന്റ് സ്കെയിൽ പിശകുകൾ (silent scale errors) ഒഴിവാക്കാൻ സഹായിക്കും.
സ്പോട്ട് ഇൻസ്റ്റൻസ് അസ്ഥിരതയും 39 മിനിറ്റ് നീണ്ട കംപൈലും
ഒരു സ്പോട്ട് ഇൻസ്റ്റൻസിൽ 31-ബില്യൺ പാരാമീറ്റർ ഉള്ള മോഡൽ പ്രവർത്തിപ്പിക്കുന്നത് ലാഭകരമായി തോന്നാം, എന്നാൽ ഈ ലാഭം പ്രവചനാതീതമായ റീക്ലൈം ഇവന്റുകൾക്കൊപ്പം (reclaim events) വരുന്നു. മോഡലിനെ Neuron-അനുയോജ്യമായ കോഡിലേക്ക് മാറ്റാൻ എടുത്ത ഏകദേശം 39 മിനിറ്റ് കംപൈൽ സമയം, AWS ഇൻസ്റ്റൻസ് തിരിച്ചുവിളിച്ചപ്പോൾ നഷ്ടപ്പെട്ടു. തടസ്സങ്ങളെ അതിജീവിക്കാൻ അവർ മൂന്ന് ഘട്ടങ്ങളുള്ള ഒരു സുരക്ഷാ സംവിധാനം നിർമ്മിച്ചു:
- ModelBuilder മെമ്മറി ഉപയോഗം 384 GB ഹോസ്റ്റ് പരിധിക്കുള്ളിൽ നിലനിർത്തുകയും, റീസ്റ്റാർട്ട് ചെയ്യാൻ നിർബന്ധിതമാക്കുന്ന ക്രാഷുകൾ ഒഴിവാക്കുകയും ചെയ്തു.
- റ〉 (raw weight files), കംപൈൽ ചെയ്ത “neffs” (Neuron executable files) എന്നിവയുടെ തൽക്ഷണ S3 മിററിംഗ് (Immediate S3 mirroring) വഴി, പുതിയൊരു ഇൻസ്റ്റൻസിന് പഴയ ഇൻസ്റ്റൻസ് എവിടെയാണോ നിർത്തിയത് അവിടെ നിന്ന് തന്നെ തുടങ്ങാൻ കഴിഞ്ഞു.
- ലഭ്യമായ സ്പോട്ട് കപ്പാസിറ്റിക്കായി AWS റീജിയനുകൾ പരിശോധിക്കാനും ഒരു പുതിയ ഇൻസ്റ്റൻസ് ലഭ്യമാകുന്ന ഉടൻ അത് ആരംഭിക്കാനും ഒരു multi-region poller ഉപയോഗിച്ചു.
ഈ ഘട്ടങ്ങൾ ഒരു ദുർബലമായ കംപൈൽ പ്രക്രിയയെ സ്പോട്ട് മാർക്കറ്റിലെ മാറ്റങ്ങളെ അതിജീവിക്കാൻ ശേഷിയുള്ള ഒരു കരുത്തുറ്റ പൈപ്പ്ലൈനായി മാറ്റി.
മിക്സഡ് അറ്റൻഷൻ ലേഔട്ടുകളിലെ ഷാർഡിംഗ് കുരുക്കുകൾ
Gemma-4 31B രണ്ട് അറ്റൻഷൻ കോൺഫിഗറേഷനുകൾ ഉപയോഗിക്കുന്നു. ചില ലെയറുകൾ നാല് കീ-വാല്യൂ (KV) ഹെഡുകൾ ഉപയോഗിക്കുമ്പോൾ, മറ്റ് ചിലവ വ്യത്യസ്ത എണ്ണം ഉപയോഗിക്കുന്നു. ഒരു ലെയറിലെ KV ഹെഡ് എണ്ണം കൃത്യമായി വിഭജിക്കാൻ കഴിയാത്ത സാഹചര്യത്തിൽ, മോഡലിനെ എട്ട് പാരലൽ റാങ്കുകളിലായി തുല്യമായി വിഭജിക്കുന്നത് (sharding) പരാജയപ്പെടും. 4 ഹെഡുകളുള്ള ഒരു ലെയറിനെ എട്ട് റാങ്കുകളിലായി ഷാർഡ് ചെയ്യാൻ ശ്രമിക്കുന്നത് ഓരോ റാങ്കും പകുതി ഹെഡ് കൈകാര്യം ചെയ്യാൻ നിർബന്ധിതമാക്കും—ഇതൊരു ഗണിതശാസ്ത്രപരമായ അസാധ്യമായ കാര്യമാണ്, ഇത് ഷേപ്പ് മിസ്മാച്ചുകൾക്കും (shape mismatches) റൺടൈം എററുകൾക്കും കാരണമാകും.
ഇതിനുള്ള പരിഹാരം, ഗ്ലോബലി ഷാർഡ് ചെയ്ത ലെയറുകളെ (globally-sharded layers - അനുയോജ്യമായ ഹെഡ് എണ്ണമുള്ളവ) എല്ലാ റാങ്കുകളിലും പുനർനിർമ്മിക്കുകയും (replicate), ഹെഡ് എണ്ണം കൃത്യമായി വിഭജിക്കാൻ കഴിയുന്ന “സ്ലൈഡിംഗ്” ലെയറുകളെ മാത്രം ഷാർഡ് ചെയ്യുകയും ചെയ്യുക എന്നതായിരുന്നു. ഈ ഹൈബ്രിഡ് സ്ട്രാറ്റജി ടെൻസർ-പാരലൽ കാര്യക്ഷമത നിലനിർത്തുന്നതോടൊപ്പം KV ഹെഡുകളുടെ നിയമവിരുദ്ധമായ വിഭജനം ഒഴിവാക്കുകയും, മുൻപത്തെ ശ്രമങ്ങളെ തടസ്സപ്പെടുത്തിയ ടെൻസർ-പാരലലൈസേഷൻ പിശകുകൾ ഇല്ലാതാക്കുകയും ചെയ്തു.
ചുരുക്കത്തിൽ
ഒരു ഭീമൻ LLM ഇൻഫറൻഷ്യയിലേക്ക് പോർട്ട് ചെയ്യുന്നത് വെറുമൊരു കംപൈൽ-ആൻഡ്-റൺ പ്രക്രിയയല്ല. ടോക്കൺ തുല്യതയ്ക്ക് അപ്പുറം കർശനമായ ഫങ്ഷണൽ ടെസ്റ്റിംഗും, ഓരോ ടെൻസറും—പാരാമീറ്റർ ആകട്ടെ ബഫർ ആകട്ടെ—ശരിയായി കൈകാര്യം ചെയ്യപ്പെടുന്നുണ്ടെന്ന് കൃത്യമായി പരിശോധിക്കേണ്ടതും, സ്പോട്ട് ഇൻസ്റ്റൻസ് റീക്ലൈമേഷൻ മുൻകൂട്ടി കാണുന്ന ഒരു ഡിപ്ലോയ്മെന്റ് സ്ട്രാറ്റജിയും ഇതിന് ആവശ്യമാണ്. അവസാനമായി, ഷാർഡിംഗ് മോഡലിന്റെ ആന്തരിക അറ്റൻഷൻ ജിയോമെട്രിയെ (attention geometry) മാനിക്കണം; അല്ലാത്തപക്ഷം, വേഗത വാഗ്ദാനം ചെയ്യുന്ന പാരലലിസം നിശബ്ദമായ പരാജയത്തിന്റെ ഉറവിടമായി മാറും.
