میں نے Speculative Decoding کا بینچ مارک کیا — a = 3.5 کافی نہیں تھا
Speculative Decoding (SD) ایک سادہ ریاضی کے اصول پر منحصر ہے: a > 1 + α + β
قبولیت کی لمبائی (acceptance length) (a) کو 1 کے ساتھ کمپیوٹ ریشو (α) اور تصدیقی اوور ہیڈ (verification overhead) (β) کے مجموعے سے زیادہ ہونا چاہیے۔ اگر ایسا ہوتا ہے، تو SD کامیاب رہتا ہے۔ ورنہ، یہ ناکام ہو جاتا ہے۔
میں نے اس نظریے کا ایک حقیقی مشین پر تجربہ کیا۔ میں نے 64GB RAM کے ساتھ 12th Gen Intel CPU استعمال کیا۔ میں نے ایک چھوٹے Qwen2.5-0.5B draft model کو ایک بڑے Qwen2.5-1.5B target model کے ساتھ جوڑا۔
نتائج حیران کن تھے۔ SD عام جنریشن (raw generation) کے مقابلے میں 49% سے 62% تک سست تھا۔
یہاں بتایا گیا ہے کہ مختلف کاموں (tasks) کے لحاظ سے acceptance length (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% راؤنڈز میں صفر (zero) ٹوکنز قبول ہوئے۔
ان راؤنڈز میں، ڈرافٹ ماڈل کام کرتا ہے، ٹارگٹ ماڈل تصدیق کرتا ہے، لیکن آپ کو کچھ بھی نیا حاصل نہیں ہوتا۔ آپ نے ایک ٹوکن حاصل کرنے کے لیے دو بار چلنے کی قیمت ادا کی۔ اس سے ایک ہی آؤٹ پٹ کے لیے SD کی لاگت 2 گنا بڑھ جاتی ہے۔
یہ اس بات کو اجاگر کرتا ہے کہ SD دراصل ایک GPU optimization ہے۔
GPU پر، ڈرافٹ ماڈل تقریباً مفت ہوتا ہے۔ کمپیوٹ ریشو (α) بہت کم ہوتا ہے۔ CPU پر، ڈرافٹ ماڈل میموری بینڈوتھ (memory bandwidth) کے لیے مقابلہ کرتا ہے۔ یہ مفت نہیں ہے۔ CPU پر یہ غیر مساوات (inequality) برقرار نہیں رہ پاتی۔
اگر آپ CPU پر SD استعمال کرتے ہیں، تو ایسا نہ کریں۔ اعداد و شمار اس کے حق میں نہیں ہیں۔
آپ کی تعیناتیوں (deployments) کے لیے اہم نکات:
- اپنی "a" ویلیو خود ناپیں۔ وینڈرز کے دعووں پر بھروسہ نہ کریں۔
- اپنے ڈیٹا کو کام کی قسم (task type) کے لحاظ سے تقسیم کریں۔ کوڈ اور چیٹ کے لیے قبولیت کی شرح (acceptance rates) مختلف ہوتی ہے۔
- zero-accept rate پر نظر رکھیں۔ زیادہ تغیر (variance) آپ کی p99 latency کو خراب کر دیتا ہے۔
- SD کو GPUs پر استعمال کریں جہاں ڈرافٹ ماڈل کی لاگت نہ ہونے کے برابر ہو۔
بہترین آپٹیمائزیشن یہ جاننا ہے کہ اسے کب بند کرنا ہے۔
Source: https://dev.to/zxpmail/i-benchmarked-speculative-decoding-a-35-wasnt-enough-1geb
Optional learning community: https://t.me/GyaanSetuAi
