ನಷ್ಟವಿಲ್ಲದಿದ್ದರೂ, ಉಚಿತವಲ್ಲ: Speculative Decoding ಯಾವಾಗ ಕೆಲಸ ಮಾಡುತ್ತದೆ

Speculative Decoding ಎಂಬುದು LLM inference ನಲ್ಲಿ ಒಂದು ಪ್ರಚಲಿತ ವಿಷಯವಾಗಿದೆ.

DSpark ನಂತಹ ಕಂಪನಿಗಳು 60% ರಿಂದ 85% ರಷ್ಟು ವೇಗವರ್ಧನೆಯನ್ನು (speedups) ಪ್ರತಿಪಾದಿಸುತ್ತವೆ. Google ಕೂಡ ಈ ವಿಧಾನದ ಬಗ್ಗೆ ಸಂಶೋಧನೆಗಳನ್ನು ಪ್ರಕಟಿಸುತ್ತದೆ.

ಇದರ ಪರಿಕಲ್ಪನೆ ಸರಳವಾಗಿದೆ: ಒಂದು ಸಣ್ಣ draft model ಟೋಕನ್‌ಗಳನ್ನು ಬರೆಯುತ್ತದೆ. ಒಂದು ದೊಡ್ಡ target model ಅವುಗಳನ್ನು ಒಂದೇ ಹಂತದಲ್ಲಿ ಪರಿಶೀಲಿಸುತ್ತದೆ. ಇದು ಜನರೇಷನ್ (generation) ಪ್ರಕ್ರಿಯೆಯನ್ನು ವೇಗಗೊಳಿಸುತ್ತದೆ.

ಆದರೆ ಒಬ್ಬ ಎಂಜಿನಿಯರ್ ಆಗಿ, ನೀವು ಎರಡು ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಲೇಬೇಕು:

  • ಇದು hallucinations ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆಯೇ?
  • ಹೆಚ್ಚುವರಿ ಮಾಡೆಲ್ ಕಂಪ್ಯೂಟ್ (compute) ಅನ್ನು ವ್ಯರ್ಥ ಮಾಡುತ್ತದೆಯೇ?

ಸತ್ಯಾಂಶಗಳನ್ನು ನೋಡೋಣ.

ಮೊದಲನೆಯದಾಗಿ, ಗುಣಮಟ್ಟವು ನಷ್ಟವಿಲ್ಲದ್ದು (lossless). target model ಪ್ರತಿಯೊಂದು ಟೋಕನ್ ಅನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಒಂದು ವೇಳೆ draft model 3ನೇ ಟೋಕನ್‌ನಲ್ಲಿ ತಪ್ಪು ಮಾಡಿದರೆ, target model ಅದನ್ನು ತಿರಸ್ಕರಿಸುತ್ತದೆ ಮತ್ತು ಅಂದಿನಿಂದ ಮರು-ಜನರೇಷನ್ ಮಾಡುತ್ತದೆ. ಇದರ ಔಟ್‌ಪುಟ್ ಕೇವಲ target model ನೀಡುವ ಔಟ್‌ಪುಟ್‌ಗೆ ಗಣಿತೀಯವಾಗಿ ಸಮಾನವಾಗಿರುತ್ತದೆ. ಇದು hallucinations ಅನ್ನು ಹೆಚ್ಚಿಸುವುದಿಲ್ಲ.

ಎರಡನೆಯದಾಗಿ, ಇದರ ವೆಚ್ಚವು ನಿಜವಾದುದು. ದೊಡ್ಡ ಮಾಡೆಲ್‌ಗೆ ಹೋಲಿಸಿದರೆ ಸಣ್ಣ ಮಾಡೆಲ್ ಅನ್ನು ರನ್ ಮಾಡಲು ಬಹಳ ಕಡಿಮೆ ವೆಚ್ಚವಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, 7B ಮಾಡೆಲ್‌ನ ವೆಚ್ಚವು 70B ಮಾಡೆಲ್‌ನ ವೆಚ್ಚದ 1/10 ಭಾಗವಾಗಿರಬಹುದು.

Speculative Decoding ಒಂದು ಪಣ (bet) ಇದ್ದಂತೆ.

  • ಪೂರ್ಣವಾಗಿ ಯಶಸ್ವಿಯಾದರೆ (full hit), ನೀವು ಅಪಾರ ಕಂಪ್ಯೂಟ್ ಅನ್ನು ಉಳಿಸುತ್ತೀರಿ.
  • ಪೂರ್ಣವಾಗಿ ವಿಫಲವಾದರೆ (full miss), ನೀವು ನಷ್ಟ ಅನುಭವಿಸುತ್ತೀರಿ. ನೀವು draft model ಜೊತೆಗೆ ಹೆಚ್ಚುವರಿ target model ಹಂತಗಳನ್ನು ರನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಇದು ಸಾಮಾನ್ಯ inference ಗಿಂತ ನಿಧಾನವಾಗಿರುತ್ತದೆ.

ಗೆಲ್ಲಬೇಕಾದರೆ, ನೀವು ಈ ನಿಯಮವನ್ನು ಅನುಸರಿಸಬೇಕು: ಸ್ವೀಕರಿಸಲ್ಪಟ್ಟ ಸರಾಸರಿ ಟೋಕನ್‌ಗಳ ಸಂಖ್ಯೆಯು 1 ಮತ್ತು draft model ನ overhead ಗಳ ಮೊತ್ತಕ್ಕಿಂತ ಹೆಚ್ಚಿರಬೇಕು.

ಒಂದು ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯದಲ್ಲಿ ನಿಮ್ಮ draft model ಕಳಪೆ ಪ್ರದರ್ಶನ ನೀಡಿದರೆ, ನಿಮ್ಮ acceptance rate ಕುಸಿಯುತ್ತದೆ. ಅದು ತುಂಬಾ ಕಡಿಮೆಯಾದರೆ, Speculative Decoding ನಿಮ್ಮ ಸಿಸ್ಟಮ್ ಅನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ.

ಇದನ್ನು ಬಳಸಬೇಕೆ ಅಥವಾ ಬೇಡವೇ ಎಂದು ನಿರ್ಧರಿಸುವುದು ಹೇಗೆ:

  1. ನಿಮ್ಮ acceptance rate ಅನ್ನು ಅಳೆಯಿರಿ. ಸಾಮಾನ್ಯ ಬೆಂಚ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು (benchmarks) ನಂಬಬೇಡಿ. ನಿಮ್ಮ ಸ್ವಂತ ಡೇಟಾ ಮತ್ತು ಕಾರ್ಯಗಳನ್ನು ಬಳಸಿ.
  2. ನಿಮ್ಮ ಕಾರ್ಯದ ಪ್ರಕಾರವನ್ನು (task type) ಪರಿಶೀಲಿಸಿ. ಕೋಡ್ ಕಂಪ್ಲೀಷನ್‌ನಂತಹ (code completion) ಊಹಿಸಬಹುದಾದ ಕಾರ್ಯಗಳಿಗೆ ಇದನ್ನು ಬಳಸಿ. ಕ್ರಿಯೇಟಿವ್ ರೈಟಿಂಗ್‌ನಂತಹ ಊಹಿಸಲಾಗದ ಕಾರ್ಯಗಳಿಗೆ ಇದನ್ನು ಬಳಸಬೇಡಿ.
  3. ನಿಮ್ಮ p99 latency ಅನ್ನು ಗಮನಿಸಿ. ಪೂರ್ಣ ವಿಫಲತೆಯು (full miss) latency ನಲ್ಲಿ ಏರಿಕೆಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.

ಅತ್ಯುತ್ತಮ ಆಪ್ಟಿಮೈಸೇಶನ್ (optimization) ಎಂದರೆ ಯಾವಾಗಲೂ ಗೆಲ್ಲುವದ್ದಲ್ಲ. ಬದಲಾಗಿ, ಯಾವಾಗ ಅದನ್ನು ನಿಲ್ಲಿಸಬೇಕೆಂದು ನಿಮಗೆ ತಿಳಿದಿರುತ್ತದೆಯೋ ಅದೇ ಅತ್ಯುತ್ತಮ ಆಪ್ಟಿಮೈಸೇಶನ್.

hit rate ಹೆಚ್ಚಿದ್ದಾಗ ಇದನ್ನು ಬಳಸಿ. hit rate ಕುಸಿಯುವಾಗ ಇದನ್ನು ಬಳಸುವುದು ನಿಲ್ಲಿಸಿ.

Source: https://dev.to/zxpmail/lossless-but-not-free-the-lossless-but-not-free-when-speculative-decoding-actually-pays-off-1c2g

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