Генерация текста LLM на GPU потребительского класса — сложная задача. Стандартные алгоритмы требуют исполнения всех слоёв модели для получения каждого токена. Модели размером в 10+B не помещаются в память GPU — приходится прибегать к офлодингу (offloading), поочерёдно подгружая слои из основной памяти в VRAM. Это долго: одна итерация загрузки и генерации одного токена Llama-2-70B в 16-битном режиме с PCIe gen 4 может занять > 5 секунд.
Спекулятивное декодирование ускоряет генерацию. Это достигается за счёт дополнительной «черновой» модели — более компактной и быстрой. Она предлагает варианты продолжения цепочек токенов. Основная модель проверяет эти варианты, выбирая один с помощью стохастического алгоритма выборки. Производительность измеряется числом токенов, сгенерированных за итерацию.
SpecExec — самый производительный метод в классе. Он генерирует до 20 токенов за итерацию и достигает ускорения x15 при офлодинге. Вместо стохастического метода, SpecExec создаёт «кеш» в форме дерева продолжений, используя не случайные, а самые вероятные токены из модели-черновика. Целевая модель проверяет их за один проход.
Алгоритм SpecExec производительнее, т.к. использует высокую пиковость распределений вероятностей токенов в современных LLM. Например, в Llama-2-70B высочайшая вероятность токена составляет более 90%.
Сравнение производительности
В выгрузке SpecExec превосходит SpecInfer — особенно с большими бюджетами токенов. в то время как производительность SpecInfer перестаёт расти с ростом бюджета, наш метод генерирует более 20 токенов за шаг при бюджетах 1000+ токенов.
В тестах с офлодингом SpecExec показывает стабильный прирост скорости на видеокартах от высококлассных исследовательских GPU A100/H100 до потребительских GPU: 4090 и даже 2080. С квантованными моделями SpecExec достигает ускорения от 4.6x до 10.6x, генерируя от 3 до 6 токенов в секунду.
***
SpecExec упрощает доступ к мощным LLM и обеспечивает инференс тяжёлых моделей на оборудовании, считавшемся недостаточно мощным. Узнать о нём больше можно в статье, а пощупать — на GitHub.
Разбор подготовил
Душный NLP