മൂന്ന് പാളികളുള്ള ഒരു പ്രയോറിറ്റി ഷെഡ്യൂളർ, ഓൺ-ഡിവൈസ് ലാംഗ്വേജ് മോഡൽ ലേറ്റൻസി ഒരു സെക്കൻഡിൽ കൂടുതൽ എന്നതിൽ നിന്ന് രണ്ട് പത്തിലൊന്ന് സെക്കൻഡിൽ താഴെയായി കുറയ്ക്കുന്നു. ഫോൺ ബാക്ക്ഗ്രൗണ്ട് ജോലികളിൽ തിരക്കിലാണെങ്കിൽ പോലും ചാറ്റ് ആപ്പുകൾ വേഗത്തിൽ പ്രവർത്തിക്കാൻ ഇത് സഹായിക്കുന്നു. 3 ബില്യൺ പാരാമീറ്റർ മോഡൽ പ്രവർത്തിപ്പിക്കുന്ന ഒരു Tensor G3 ചിപ്പിനായി നിർമ്മിച്ച ഇത്, ബാക്ക്ഗ്രൗണ്ട് ജോലികളെ തടസ്സപ്പെടുത്താതെ ലേറ്റൻസി 1,420 ms-ൽ നിന്ന് 161 ms ആയി കുറയ്ക്കുന്നു.

എന്തുകൊണ്ടാണ് ഓൺ-ഡിവൈസ് LLM-കൾ ബുദ്ധിമുട്ടുന്നത്

ഒരു മൊബൈൽ പ്രോസസറിൽ ഒരു ലാർജ് ലാംഗ്വേജ് മോഡൽ പ്രവർത്തിപ്പിക്കുന്നത് വിഭവങ്ങളുടെ വലിയൊരു പരിമിതിയാണ്. Tensor G3-ൽ, 3 B മോഡൽ ഇതിനകം തന്നെ ന്യൂറൽ പ്രോസസ്സിംഗ് യൂണിറ്റിന്റെ (NPU) ഏകദേശം 85% ഉപയോഗിക്കുന്നു. ഒരു ഉപയോക്താവ് ചാറ്റ് വിൻഡോ തുറക്കുന്ന അതേ സമയം തന്നെ ഒരു ഓഫ്‌ലൈൻ ഇൻഡെക്സർ പോലുള്ള കുറഞ്ഞ പ്രയോറിറ്റിയുള്ള ഒരു ടാസ്ക് പ്രവർത്തിക്കുമ്പോൾ, പ്രതികരണ സമയം ഏകദേശം 140 ms-ൽ നിന്ന് 1,400 ms ആയി ഉയരുന്നു; ഇത് ഉപയോക്താക്കൾക്ക് പെട്ടെന്ന് തന്നെ തിരിച്ചറിയാൻ കഴിയുന്ന പത്തിരട്ടി വേഗത കുറവാണ്.

പ്രശ്നം വേഗത മാത്രമല്ല. മൊബൈൽ ഉപകരണങ്ങൾ UI സ്മൂത്ത്നസ്, ബാറ്ററി ലൈഫ്, കമ്പ്യൂട്ട് ആവശ്യപ്പെടുന്ന ഒന്നിലധികം ആപ്പുകൾ എന്നിവ ഒരേസമയം കൈകാര്യം ചെയ്യേണ്ടതുണ്ട്. ജോലികൾ ലഭിക്കുന്ന ക്രമത്തിൽ മാത്രം പ്രോസസ്സ് ചെയ്യുന്ന ഒരു സാധാരണ ക്യൂ (queue), UIത്തിന് ബാക്ക്ഗ്രൗണ്ട് ജോലികൾക്കായി കാത്തുനിൽക്കേണ്ടി വരുന്ന അവസ്ഥയുണ്ടാക്കുന്നു, ഇത് ഒരു സംഭാഷണ സഹായിയെ (conversational assistant) മന്ദഗതിയിലുള്ള ഒന്നാക്കി മാറ്റുന്നു.

മൂന്ന് പാളികളുള്ള ഷെഡ്യൂളർ എങ്ങനെ പ്രവർത്തിക്കുന്നു

പുതിയ ഷെഡ്യൂളർ ഇൻഫറൻസ് പൈപ്പ്‌ലൈനിൽ ഏകോപിപ്പിച്ച മൂന്ന് ഘടകങ്ങൾ ഉൾപ്പെടുത്തുന്നു:

  1. Priority Queue – സ്റ്റാറ്റിക് ഇംപോർട്ടൻസ് ലെവൽ അനുസരിച്ച് വരുന്ന ജോലികളെ ക്രമീകരിക്കുന്ന ഒരു min-heap.
  2. Preemption Controller – ഉയർന്ന പ്രയോറിറ്റിയുള്ള ഒരു റിക്വസ്റ്റ് വരുമ്പോൾ, നിലവിലുള്ള കുറഞ്ഞ പ്രയോറിറ്റിയുള്ള ജോലികളെ ഒഴിവാക്കുന്നതിന് പകരം അവ താൽക്കാലികമായി നിർത്തിവെക്കുന്നു.
  3. Token Budget Governor – ആപ്പിന്റെ ലൈഫ്സൈക്കിൾ സ്റ്റേറ്റ് അടിസ്ഥാനമാക്കി ഒരു ജോലിക്കായി ഉപയോഗിക്കാവുന്ന ടോക്കണുകളുടെ എണ്ണം പരിമിതപ്പെടുത്തുന്നു.

ഇവ ഒത്തുചേർന്ന് ഒരു ഫോർഗ്രൗണ്ട് ചാറ്റ് റിക്വസ്റ്റിനെ ക്യൂവിന്റെ മുൻനിരയിലേക്ക് എത്തിക്കുന്നു, അതേസമയം ബാക്ക്ഗ്രൗണ്ട് ജോലികൾ വിഭവങ്ങൾ ലഭ്യമാകുമ്പോൾ വീണ്ടും തുടങ്ങാൻ പാകത്തിൽ താൽക്കാലികമായി നിർത്തിവെക്കുന്നു.

പ്രയോറിറ്റി തട്ടുകളും പ്രീഎംപ്ഷനും

ഏതൊക്കെ ജോലികൾ തടസ്സപ്പെടുത്താം എന്ന് നാല് തട്ടുകൾ നിർണ്ണയിക്കുന്നു:

Tier Description
Foreground Chat നിർണ്ണായകമായ UI ഇടപെടൽ
Inline Suggestion ഓട്ടോകംപ്ലീറ്റ് ശൈലിയിലുള്ള സൂചനകൾ
Background Summary കാലാകാലങ്ങളിൽ ഉള്ള ഉള്ളടക്ക സംഗ്രഹം
Offline Indexing ബൾക്ക് ഡാറ്റാ പ്രോസസ്സിംഗ്

ഷെഡ്യൂളർ ഒരിക്കലും ഒരു കുറഞ്ഞ പ്രയോറിറ്റിയുള്ള ജോലിയും പാതിവഴിയിൽ ഉപേക്ഷിക്കുന്നില്ല. പകരം, അത് മോഡലിന്റെ കീ-വാല്യൂ (KV) കാഷെ—ഇന്റർമീഡിയറ്റ് അറ്റൻഷൻ റിസൾട്ടുകൾ സൂക്ഷിക്കുന്ന ഒരു ഘടന—സ്നാപ്പ്ഷോട്ട് എടുത്ത് ജോലിയെ നിർത്തിവെക്കുന്നു. ഉയർന്ന പ്രയോറിറ്റിയുള്ള റിക്വസ്റ്റ് പൂർത്തിയായ ശേഷം, കൺട്രോളർ ആ സ്നാപ്പ്ഷോട്ട് പുനഃസ്ഥാപിക്കുകയും ബാക്ക്ഗ്രൗണ്ട് ടാസ്കിനെ എവിടെയാണോ നിർത്തിയത് അവിടെ നിന്ന് തുടരാൻ അനുവദിക്കുകയും ചെയ്യുന്നു. ഈ “pause-and-resume” രീതി, ജോലിയെ ആദ്യം മുതൽ തുടങ്ങേണ്ടി വരുമ്പോൾ ഉണ്ടാകുന്ന വലിയ റീ കമ്പ്യൂട്ടേഷൻ ഒഴിവാക്കുന്നു.

പാർഷ്യൽ KV-cache eviction പാഴാകുന്നത് കുറയ്ക്കുന്നു. സ്റ്റാറ്റിക് സിസ്റ്റം പ്രോംപ്റ്റ് കാഷെയിൽ തന്നെ നിലനിൽക്കുന്നു, എന്നാൽ ഡൈനാമിക് ആയ സംഭാഷണങ്ങൾ മാത്രമേ ഒഴിവാക്കപ്പെടുകയുള്ളൂ. ഇതിന്റെ ഫലമായി, ഒരു പോസിനുശേഷം മോഡലിനെ വീണ്ടും പ്രീഫിൽ ചെയ്യുന്നതിനുള്ള ചിലവ് 40%–60% വരെ കുറയുന്നു.

ടൈമറുകൾ ഇല്ലാതെ ടോക്കൺ ബഡ്ജറ്റുകൾ നിയന്ത്രിക്കുക

ഒരു ജോലി എപ്പോൾ CPU അല്ലെങ്കിൽ NPU സമയം വിട്ടുകൊടുക്കണം എന്ന് ഊഹിക്കാൻ പല സംവിധാനങ്ങളും ടൈമറുകളെയാണ് ആശ്രയിക്കുന്നത്. ടൈമറുകൾ കൃത്യമല്ല; അവ UI-യെ തടസ്സപ്പെടുത്തുകയോ അല്ലെങ്കിൽ ചിപ്പിന്റെ ശേഷി പൂർണ്ണമായി ഉപയോഗിക്കാതിരിക്കുകയോ ചെയ്തേക്കാം. ഷെഡ്യൂളർ ടൈമറുകൾക്ക് പകരം ആൻഡ്രോയിഡിലെ ProcessLifecycleOwner ഉപയോഗിക്കുന്നു, ഇത് ആപ്പ് ഫോർഗ്രൗണ്ടിലാണോ ബാക്ക്ഗ്രൗണ്ടിലാണോ എന്ന് കൃത്യമായി സൂചിപ്പിക്കുന്ന ലൈഫ്സൈക്കിൾ ഇവന്റുകൾ നൽകുന്നു.

  • ON_RESUME – ആപ്പിന് പൂർണ്ണമായ കമ്പ്യൂട്ട് ബഡ്ജറ്റ് ലഭിക്കുന്നു, ഇത് നിലവിലുള്ള ഫോർഗ്രൗണ്ട് ജോലികൾ തടസ്സമില്ലാതെ പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു.
  • ON_STOP – ആപ്പ് ബാക്ക്ഗ്രൗണ്ട് ടാസ്കുകളെ സാധാരണ ടോക്കൺ ബഡ്ജറ്റിന്റെ ഏകദേശം 25% ആയി കുറയ്ക്കുന്നു, ഇത് പെട്ടെന്നുണ്ടാകുന്ന ഏതെങ്കിലും UI റിക്വസ്റ്റുകൾക്കായി അധിക ശേഷി (headroom) നിലനിർത്തുന്നു.

വിഭവങ്ങളുടെ വിതരണം ലൈഫ്സൈക്കിൾ ഇവന്റുകളുമായി ബന്ധിപ്പിക്കുന്നതിലൂടെ, സിസ്റ്റം അനാവശ്യമായ സമയക്രമങ്ങൾക്ക് പകരം യഥാർത്ഥ ഉപയോക്തൃ പെരുമാറ്റത്തിനനുസരിച്ച് പ്രതികരിക്കുന്നു.

പ്രകടന നേട്ടങ്ങളും വിട്ടുവീഴ്ചകളും

സാധാരണമായ first-come-first-served ക്യൂ ഉപയോഗിക്കുമ്പോൾ, ഒരു ബാക്ക്ഗ്രൗണ്ട് ടാസ്ക് ഫോർഗ്രൗണ്ട് ചാറ്റ് ലേറ്റൻസി ഏകദേശം 1,420 ms ആയി ഉയർത്തുന്നു. പ്രയോറിറ്റി ഷെഡ്യൂളർ സജീവമാകുമ്പോൾ, അതേ ചാറ്റ് റിക്വസ്റ്റ് ഏകദേശം 161 ms-ൽ പൂർത്തിയാകുന്നു, ഇത് പത്തിരട്ടി മെച്ചപ്പെടുത്തലിലൂടെ സുഗമമായ ഉപയോക്തൃ അനുഭവം തിരികെ നൽകുന്നു.

നിർത്തിവെച്ച ഒരു ജോലി വീണ്ടും തുടങ്ങുന്നത് അതിന്റെ ആകെ പ്രവർത്തന സമയത്തിൽ ഏകദേശം 22% വർദ്ധനവ് ഉണ്ടാക്കുന്നു. ബാക്ക്ഗ്രൗണ്ട് ജോലികൾ നിർണ്ണായകമല്ലാത്തതിനാൽ, പ്രത്യേകിച്ച് UI വേഗത്തിൽ പ്രവർത്തിക്കുമ്പോൾ, ഈ വിട്ടുവീഴ്ച സ്വീകാര്യമാണ്.