Параллельные черновые модели могут за один прямой проход сгенерировать целый блок токенов, но авторы считают, что официально выпущенные системы не используют этот потенциал ускорения полностью: при обработке одного запроса на каждом шаге принимается лишь небольшое количество токенов, хотя приходится считывать все веса целевой модели; при пакетной обработке накладные расходы на проверку для каждого запроса сокращают коэффициент ускорения примерно вдвое; кроме того, оптимальный подход зависит от сценария обслуживания, черновой модели, целевой модели и видеокарты. SpecPilot представляет собой цикл автоматической оптимизации: на каждом этапе модель стоимости определяет компонент системы, наиболее удаленный от теоретического предела, несколько агентов параллельно исследуют направления и объединяют успешные изменения, а субагент по ядрам специализируется на настройке ядер, максимально далеких от предела пропускной способности памяти; метод token forcing позволяет сравнивать каждый выходной токен с оригиналом для предотвращения «обмана награды»; структурированная память переносит проверенные механизмы в следующий цикл и новые развертывания. В репозитории представлены движки вывода, найденные SpecPilot для 6 различных развертываний (на основе урезанной версии SGLang), вместе со скриптами запуска, тестирования скорости и проверки.
Лайков: 16 · Звезд на GitHub: 82
Причины
- Авторы утверждают, что без обучения и потери качества ускорение относительно авторегрессии для одного запроса выросло с 4.46 раз в оригинальной версии до 10.87 раз, а при пакетной обработке — с 1.94 раз до 3.93 раз; в таблице README указано, что на H100 связка Qwen3.8-27B + DFlash2 ускоряется с 3.95 раз до 8.86 раз, при этом приведены коэффициенты ускорения и доверительные интервалы для четырех настроек на H100, полученные путем повторного запуска с нуля.
- Найденные механизмы можно изучать по отдельности: безпотерьный формат весов 12 бит W12 (BF16 разбивается на три плоскости по 4 бит, побитово восстанавливаемые в регистрах GEMM; авторы утверждают, что его использование само по себе ускоряет декодирование BF16 для плотных моделей размером 8–30B в 1.15–1.26 раз), двухуровневая проверка, древовидная проверка для целевых моделей со смешанной рекуррентной структурой, а также три механизма пакетной обработки.
- Можно воспроизвести: код лицензирован под Apache-2.0, каждая настройка использует только одну видеокарту, скрипты отвечают за установку окружения, загрузку контрольных точек по фиксированным версиям, запуск сервиса, совместимого с OpenAI, и сравнительное тестирование скорости; на момент публикации в Hugging Face было 16 лайков и 82 звезд (что отражает только уровень внимания).
Использование
- Создание окружения: bash scripts/setup_env.sh (Python 3.11, torch 2.13 + CUDA 13.0, зависимости зафиксированы); загрузка контрольных точек для конкретной настройки: bash scripts/download_models.sh h100_c1_qwen38-27b_dflash2 (имя настройки соответствует имени каталога в папке settings/).
- Запуск сервиса: bash scripts/serve.sh h100_c1_qwen38-27b_dflash2 final 0 запускает движок SpecPilot на видеокарте номер 0 на порту 30000; замените final на stock / ar, чтобы запустить оригинальную версию и авторегрессионный контроль; интерфейс совместим с HTTP SGLang и OpenAI.
- Тестирование скорости: bash scripts/bench.sh <настройка> final-1 0, затем используйте scripts/compare.py speed для сравнения коэффициентов ускорения, а scripts/score.py для оценки на наборах gsm8k / humaneval / math500 / mbpp; при первом запуске каждого движка происходит компиляция ядер, поэтому сначала выполните холостой прогон перед измерением времени.
Риски
- Ограниченная аппаратная поддержка: тестирование проводилось только на H100 80GB и RTX PRO 6000 Blackwell 96GB; ядра для RTX PRO 6000 компилируются только для sm_120a; torch 2.13 + CUDA 13.0 требуют драйвер R580, для старых драйверов необходимо использовать библиотеки обратной совместимости.
- Покрытие ограничено 6 фиксированными комбинациями (Qwen3.8-27B / Muse-Glimmer-30B с DFlash2 / DSpark); в репозитории представлены найденные движки, но не описан способ запуска самого цикла оптимизации агентов, поэтому их нельзя напрямую повторно использовать при смене модели или черновой модели.
- Термин «без потерь» означает, что каждый токен определяется целевой моделью при жадном декодировании; в README указано, что вывод не совпадает побитово с авторегрессионным (из-за различий в порядке вычислений при пакетной проверке возможны инверсии при близких значениях), а прилагаемые оценки служат только для проверки целостности; все цифры ускорения приведены по данным авторов.
Редакционная заметка: подходит для команд, которые уже обслуживают Qwen3.8-27B с DFlash2 / DSpark на одной видеокарте; читателям, занимающимся оптимизацией вывода, стоит обратить особое внимание на формат весов W12 и двухуровневую проверку.