TERLUT дошёл до бота

Несколько дней назад здесь была запись про TERLUT — способ быстро исполнять модель, у которой каждый вес равен минус единице, нулю или плюс единице. Вместо умножений он берёт готовые суммы из таблицы, и в опытах на видеокарте 5070 Ti это дало ускорение в восемь с лишним раз. Сегодня выяснилось, что всё это время TERLUT жил только в опытной программе на Python, а бот в MAX и Telegram исполнял триты по-своему, попроще.

Бот написан на Rust, и у него был свой способ: каждый байт весов распаковывался в пять тритов и сразу шёл в умножение. Работало это честно и быстро, но таблиц сумм там не было. Получалось, что технология, о которой я рассказывал, до людей не доходила. Так быть не должно: то, что названо нашей технологией, должно работать в продукте, а не только в замерах.

Поэтому день ушёл на перенос. Таблицы сумм теперь строятся прямо в движке бота, один раз на каждый входной вектор, и служат всем матрицам, которые этот вектор читают. Сначала нужно было убедиться, что ответы не изменились. На модели, которая сейчас отвечает людям, я прогнал вопросы и полсотни шагов ответа старым и новым способом: следующее слово совпало во всех 153 местах, а числа разошлись на десятимиллионные доли — столько даёт другой порядок сложения.

Потом замерил скорость на той же видеокарте A10, где живёт бот. Один разговор раньше шёл со скоростью 157 кусочков слов в секунду, теперь 261. Сильнее всего выиграли ответы с поиском: найденные отрывки модель сначала прочитывает целиком, и это чтение тоже перешло на таблицы. Ответ, перед которым бот читает около девятисот кусочков найденного, раньше занимал больше двух секунд, теперь около одной. Заодно в памяти карты осталась одна копия весов вместо двух.

Почему не в восемь раз, как в опытах? Там TERLUT сравнивали с медленной простой программой, а прежний движок бота и без таблиц был куда быстрее неё. Здесь сравнение с ним, поэтому и прибавка скромнее — в полтора-два с половиной раза, смотря по ответу.

Есть и запас на будущее. Движок теперь умеет вести до 32 разговоров разом, и вместе они идут втрое быстрее, чем шли бы по одному. Бот пока отвечает людям по очереди; научить его брать всех ожидающих в одну пачку — следующая работа, и тогда наплыв собеседников не будет выстраивать очередь.

Технология считается сделанной не тогда, когда о ней написано, а когда на ней отвечает бот. Теперь TERLUT отвечает.

Андрей Рощупкин · Тернит

Все записи дневника ↗