Преобразование модели 33M в 9,8M, затем создание маленькой модели невероятно быстрой с помощью механизма вывода на чистом Rust (AMX + BNNS + NEON). Никакого графического процессора, никакого Python, никакого разогрева. Холодный старт 5,4 мс. Встраивание моделей сталкивается с тихим, но жестоким ограничением: небольшой...
Преобразование модели 33M в 9,8M, затем создание маленькой модели невероятно быстрой с помощью механизма вывода на чистом Rust (AMX + BNNS + NEON). Никакого графического процессора, никакого Python, никакого разогрева. Холодный старт 5,4 мс.
Встраиваемые модели сталкиваются с тихим, но жестоким ограничением: чем меньше они становятся, тем меньше они знают, а чем больше они становятся, тем труднее их развертывать на периферии. Большинство команд решают эту проблему, арендуя графический процессор или отправляя модель в среде выполнения Python, для запуска которой требуется 29 секунд.
Мы пошли другим путем. Мы перегнали учителя 33M в ствол 9,8M (гибридная дистилляция), затем перестроили стек вывода на чистом Rust так, что на процессоре Apple M4 кодировщик запросов работал со скоростью 103 мкс — в 53,9 раза быстрее, чем его учитель — с холодным стартом 5,4 мс и нулевым Python во время выполнения.
Этот пост представляет собой техническое описание обеих частей: как мы сжимали модель и как затем выжимали из оборудования все до последней микросекунды. Если вы когда-либо сталкивались с медленным холодным запуском, с обещаниями fp16, которые не сбылись, или с int8 quant, который замедлял работу — вторая половина для вас.
ТЛ;ДР
ВелаВек (наш)
Учитель (бге-маленький)
Соотношение
Параметры
9,8 млн.
33М
30%
Встраивание тусклого
256
384
—
Задержка запроса (ЦП M4)
103 мкс
5,5 мс
53,9×
Док