நான் 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) விட SD 49% முதல் 62% வரை மெதுவாக இருந்தது.
பணிக்கு (task) ஏற்ப ஏற்பு நீளம் (a) எவ்வாறு மாறுபடுகிறது என்பது இதோ:
• JSON (Structured): a = 3.50. Draft model வடிவமைப்பைச் சரியாகக் கணித்தது. • Code (Semi-structured): a = 3.00. நன்றாக இருந்தது, ஆனால் பெயரிடும் முறைகள் (naming patterns) மாறுபட்டன. • Story (Creative): a = 2.11. Draft model வார்த்தைத் தேர்வுகளில் சிரமப்பட்டது.
"a" அதிகமாக இருந்தபோதும், CPU-வில் SD தோல்வியடைந்தது. ஏன்?
மிகப்பெரிய சிக்கல் 'zero-accept rate' ஆகும். 15% முதல் 30% வரையிலான சுற்றுகளில் (rounds) பூஜ்ஜிய டோக்கன்களே (zero tokens) ஏற்றுக்கொள்ளப்பட்டன.
இந்தச் சுற்றுகளில், draft model வேலை செய்கிறது, target model அதைச் சரிபார்க்கிறது, ஆனால் உங்களுக்குப் புதியதாக எதுவும் கிடைப்பதில்லை. ஒரே ஒரு டோக்கனைப் பெற நீங்கள் இரண்டு முறை இயங்குவதற்குச் செலவிடுகிறீர்கள். இது அதே வெளியீட்டிற்கு SD-ன் செலவை 2 மடங்கு அதிகரிக்கிறது.
இது ஏன் SD ஒரு GPU optimization என்பதைக் காட்டுகிறது.
ஒரு GPU-வில், draft model என்பது கிட்டத்தட்ட இலவசமானது. கணக்கீட்டு விகிதம் (α) மிகச் சிறியது. ஆனால் ஒரு CPU-வில், draft model மெமரி பேண்ட்வித் (memory bandwidth) க்காகப் போட்டியிடுகிறது. அது இலவசமானது அல்ல. இதனால் அந்தச் சமன்பாடு (inequality) CPU-வில் தோல்வியடைகிறது.
நீங்கள் CPU-வில் SD-ஐப் பயன்படுத்தினால், அதைத் தவிர்க்கவும். கணக்கீடுகள் சரியாகப் பொருந்தவில்லை.
உங்கள் பயன்பாடுகளுக்கான (deployments) முக்கியக் குறிப்புகள்:
- உங்கள் சொந்த "a" மதிப்பைக் கண்டறியுங்கள். விற்பனையாளர்களின் கூற்றுகளை மட்டும் நம்பாதீர்கள்.
- உங்கள் தரவை பணி வகையைப் (task type) பொறுத்து பிரிக்கவும். Code மற்றும் chat ஆகியவற்றின் ஏற்பு விகிதங்கள் மாறுபட்டவை.
- zero-accept rate-ஐக் கவனியுங்கள். அதிக மாறுபாடு (high variance) உங்கள் p99 latency-ஐப் பாதிக்கும்.
- Draft model செலவு மிகக் குறைவாக இருக்கும் GPU-களில் SD-ஐப் பயன்படுத்தவும்.
எப்போது அதை அணைக்க வேண்டும் (turn it off) என்று தெரிந்து கொள்வதே சிறந்த மேம்பாடு (optimization) ஆகும்.
Source: https://dev.to/zxpmail/i-benchmarked-speculative-decoding-a-35-wasnt-enough-1geb
Optional learning community: https://t.me/GyaanSetuAi
