Без потерь, но не бесплатно: когда Speculative Decoding работает
Speculative Decoding — горячая тема в области инференса LLM.
Такие компании, как DSpark, заявляют об ускорении от 60% до 85%. Google также публикует исследования по этому методу.
Концепция проста: маленькая черновая модель (draft model) генерирует токены, а большая целевая модель (target model) проверяет их за один проход. Это ускоряет генерацию.
Но как инженер, вы должны задать два вопроса:
- Увеличивает ли это количество галлюцинаций?
- Не тратит ли дополнительная модель вычислительные ресурсы впустую?
Давайте взглянем на факты.
Во-первых, качество сохраняется без потерь. Целевая модель проверяет каждый токен. Если черновая модель ошибается на третьем токене, целевая модель отклоняет его и начинает регенерацию с этого момента. Результат математически идентичен тому, который выдала бы только целевая модель. Это не усиливает галлюцинации.
Во-вторых, цена реальна. Запуск маленькой модели обходится гораздо дешевле, чем большой. Модель на 7B параметров может стоить в 10 раз меньше, чем модель на 70B.
Speculative Decoding — это ставка.
- При полном попадании (hit) вы экономите огромные вычислительные ресурсы.
- При полном промахе (miss) вы проигрываете. Вы запускаете черновую модель плюс дополнительные шаги целевой модели. Это медленнее, чем стандартный инференс.
Чтобы выиграть, нужно следовать правилу: Среднее количество принятых токенов должно быть больше, чем 1 плюс накладные расходы на черновую модель.
Если ваша черновая модель плохо справляется с конкретной задачей, коэффициент принятия (acceptance rate) падает. Если он упадет слишком низко, Speculative Decoding сделает вашу систему медленнее.
Как решить, стоит ли его использовать:
- Измерьте свой acceptance rate. Не полагайтесь на общие бенчмарки. Используйте свои собственные данные и задачи.
- Проверьте тип задачи. Используйте его для предсказуемых задач, таких как автодополнение кода. Избегайте его для непредсказуемых задач, таких как творческое письмо.
- Отслеживайте p99 latency. Полный промах вызывает скачок задержки.
Лучшая оптимизация — это не та, которая всегда побеждает. А та, для которой вы знаете, когда её нужно выключить.
Используйте её, когда hit rate высок. Перестаньте использовать её, когда hit rate резко падает.
Optional learning community: https://t.me/GyaanSetuAi