Минутка бесплатного ускорения LLM
За последний месяц к нам подкралась еще одна новая-старая инновация в части инференса LLM — спекулятивное декодирование (speculative decoding).
Суть подхода в том, что вместо того, чтобы ускорять большую и тяжелую модель, используется пара из большой типовой модели и маленькой черновой (draft). Маленькая модель генерирует токены с высокой скоростью (сотни или тысячи токенов в секунду), а большая модель их или принимает, или нет. Т.е. условный Qwen 3.5 0.8B или 2B генерирует большой поток, а Qwen 3.5/3.6-27B/35B-A3B принимают или отклоняют токены малой модели. Это оказывается до 2-3 раза эффективнее работы в лоб, в зависимости от конкретных моделей, запроса и алгоритма реализации.
Сам подход не новый, реализация в том же llama.cpp есть давно и называется MTP (multi token prediction), но не работает с новыми моделями. Следим за PR на GitHub «llama + spec: MTP Support #22673» в котором добавляется поддержка свежих Qwen и т. д. По текущим тестам в обсуждении pull request получается 1.8х-2х ускорение практически бесплатно. Ждём окончание доработки и интеграцию в основную ветку.
Альтернативно, есть поддержка в vLLM алгоритмов Eagle3 и свежий, месячной буквально давности, DFlash (в том числе на Mac), которые сулят еще большие ускорения. Пока эксперименты с DFlash на Ryzen AI Max+ 395 показали, что технология работает, но сыровата. На более отработанных стеках nVidia и MLX можно ждать до х3 ускорения.
На самом деле, поддержка таких технологий дает свежее дыхание мини-ПК, т. к. у них с запасом памяти для любых экспериментов, а запуск dense моделей становится адекватным по скорости. MoE же модели начинают улетать в космос по скорости.
Майские праздники территориально оторвали автора от железа, но будет крайне интересно пощупать производительность на dGPU на следующей неделе.