ഞാൻ Speculative Decoding ബെഞ്ച്മാർക്ക് ചെയ്തു — a = 3.5 മതിയാവില്ലായിരുന്നു

Speculative Decoding (SD) ഒരു ലളിതമായ ഗണിത നിയമത്തെ ആശ്രയിച്ചിരിക്കുന്നു: a > 1 + α + β

അക്സെപ്റ്റൻസ് ലെങ്ത് (acceptance length - a), 1-ഉം കമ്പ്യൂട്ട് റേഷ്യോയും (compute ratio - α), വെരിഫിക്കേഷൻ ഓവർഹെഡും (verification overhead - β) കൂട്ടിയ തുകയേക്കാൾ കൂടുതലായിരിക്കണം. അങ്ങനെയാണെങ്കിൽ SD വിജയിക്കും. അല്ലെങ്കിൽ അത് പരാജയപ്പെടും.

ഞാൻ ഒരു യഥാർത്ഥ മെഷീനിൽ ഈ സിദ്ധാന്തം പരീക്ഷിച്ചു. 64GB RAM ഉള്ള 12th Gen Intel CPU ആണ് ഞാൻ ഉപയോഗിച്ചത്. ഒരു ചെറിയ Qwen2.5-0.5B ഡ്രാഫ്റ്റ് മോഡലിനെ (draft model) വലിയൊരു Qwen2.5-1.5B ടാർഗെറ്റ് മോഡലുമായി (target model) ഞാൻ ജോഡി ചേർത്തു.

ഫലങ്ങൾ അത്ഭുതപ്പെടുത്തുന്നതായിരുന്നു. സാധാരണ ജനറേഷനേക്കാൾ (raw generation) 49% മുതൽ 62% വരെ സാവധാനത്തിലായിരുന്നു SD.

ടാസ്ക്കുകൾ അനുസരിച്ച് അക്സെപ്റ്റൻസ് ലെങ്ത് (a) എങ്ങനെ മാറുന്നു എന്ന് താഴെ നൽകുന്നു:

• JSON (Structured): a = 3.50. ഡ്രാഫ്റ്റ് മോഡൽ ഫോർമാറ്റ് കൃത്യമായി പ്രവചിച്ചു. • Code (Semi-structured): a = 3.00. നല്ലതാണ്, പക്ഷേ പേരിടുന്ന രീതികളിൽ (naming patterns) വ്യത്യാസമുണ്ടായിരുന്നു. • Story (Creative): a = 2.11. വാക്കുകൾ തിരഞ്ഞെടുക്കുന്നതിൽ ഡ്രാഫ്റ്റ് മോഡൽ ബുദ്ധിമുട്ടി.

"a" ഉയർന്ന നിലയിലായിരുന്നിട്ടും, CPU-വിൽ SD പരാജയപ്പെട്ടു. എന്തുകൊണ്ട്?

ഏറ്റവും വലിയ പ്രശ്നം 'സീറോ-അക്സെപ്റ്റ് റേറ്റ്' (zero-accept rate) ആയിരുന്നു. 15% മുതൽ 30% വരെ റൗണ്ടുകളിൽ പൂജ്യം ടോക്കണുകൾ മാത്രമാണ് അക്സെപ്റ്റ് ചെയ്തത്.

ഈ റൗണ്ടുകളിൽ, ഡ്രാഫ്റ്റ് മോഡൽ പ്രവർത്തിക്കുന്നു, ടാർഗെറ്റ് മോഡൽ അത് പരിശോധിക്കുന്നു, പക്ഷേ നിങ്ങൾക്ക് പുതിയതായി ഒന്നും ലഭിക്കുന്നില്ല. ഒരു ടോക്കൺ ലഭിക്കാൻ നിങ്ങൾ രണ്ട് തവണ പ്രവർത്തിപ്പിക്കേണ്ടി വന്നു. ഇത് ഒരേ ഔട്ട്‌പുട്ടിനായി SD-യുടെ ചിലവ് 2 മടങ്ങ് വർദ്ധിപ്പിക്കുന്നു.

SD ഒരു GPU ഒപ്റ്റിമൈസേഷൻ (GPU optimization) ആണെന്ന് ഇത് വ്യക്തമാക്കുന്നു.

ഒരു GPU-വിൽ, ഡ്രാഫ്റ്റ് മോഡലിന് ചിലവ് ഏതാണ്ട് ഒന്നുമില്ല. കമ്പ്യൂട്ട് റേഷ്യോ (α) വളരെ കുറവാണ്. എന്നാൽ ഒരു CPU-വിൽ, ഡ്രാഫ്റ്റ് മോഡൽ മെമ്മറി ബാൻഡ്‌വിഡ്ത്തിനായുള്ള (memory bandwidth) മത്സരത്തിൽ ഏർപ്പെടുന്നു. അത് സൗജന്യമല്ല. അതിനാൽ CPU-വിൽ ഈ സമവാക്യം പരാജയപ്പെടുന്നു.

നിങ്ങൾ ഒരു CPU-വിൽ SD ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, അത് ഒഴിവാക്കുക. കണക്കുകൾ അനുകൂലമല്ല.

നിങ്ങളുടെ ഡിപ്ലോയ്‌മെന്റുകൾക്കായി ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ:

  • നിങ്ങളുടെ സ്വന്തം "a" മൂല്യം അളക്കുക. വെണ്ടർമാരുടെ (vendor) അവകാശവാദങ്ങൾ വിശ്വസിക്കരുത്.
  • നിങ്ങളുടെ ഡാറ്റ ടാസ്ക് തരം അനുസരിച്ച് തിരിക്കുക. കോഡും ചാറ്റും വ്യത്യസ്ത അക്സെപ്റ്റൻസ് നിരക്കുകൾ കാണിക്കുന്നു.
  • സീറോ-അക്സെപ്റ്റ് റേറ്റ് ശ്രദ്ധിക്കുക. ഉയർന്ന വ്യതിയാനം (high variance) നിങ്ങളുടെ p99 ലേറ്റൻസിനെ (latency) ബാധിക്കും.
  • ഡ്രാഫ്റ്റ് മോഡൽ ചിലവ് കുറഞ്ഞ GPU-കളിൽ മാത്രം SD ഉപയോഗിക്കുക.

എപ്പോൾ ഇത് ഓഫ് ചെയ്യണമെന്ന് അറിയുന്നതാണ് ഏറ്റവും മികച്ച ഒപ്റ്റിമൈസേഷൻ.

Source: https://dev.to/zxpmail/i-benchmarked-speculative-decoding-a-35-wasnt-enough-1geb

Optional learning community: https://t.me/GyaanSetuAi