Одна видеокарта прочитывала за сутки около шести тысяч книг. Столько успевала программа, которая учит ядро Тернита, ту часть модели, что читает вопрос и пишет ответ. Звучит много, но ядру нужно прочесть в сотни раз больше, и при такой скорости это растягивалось на годы. Поэтому вечер и ночь ушли на одно: учить быстрее на той же карте.
Сначала надо было понять, куда уходит время. Шаг учёбы разложили по частям и замерили каждую. Больше всего съедал один вид слоя: тот, что держит в памяти прочитанное раньше в тексте. Для таких слоёв есть открытая реализация, которой пользуются крупные лаборатории. Наш слой переписан по её образцу и стал работать втрое быстрее.
Вторая беда оказалась мелкой, зато многочисленной. За один шаг программа запускала на карте тысячи крохотных операций: сложить, нормировать, переложить. Каждая сама по себе быстрая, но на каждый запуск уходит время. Их склеили в крупные, и запусков стало втрое меньше.
Третье — порядок чтения. Раньше текст проходил через каждый слой по одному отрывку, теперь восемь отрывков идут разом. Карта любит большие порции и на них работает быстрее всего. Основные расчёты перевели на готовую библиотеку производителя карты: она заточена ровно под такую работу.
После каждого шага проверка была одна и та же: учится ли модель в точности так же, как раньше. Результаты совпадали до последнего бита. Ускорение не должно менять того, чему учится модель, — только время.
Итог: вместо девяти тысяч фрагментов текста в секунду почти двадцать семь тысяч. За сутки это около двадцати тысяч книг вместо шести.
Попутно выяснилась приятная вещь про словарь Тернита. Я взял тысячу предложений с одинаковым смыслом на русском и английском и посчитали, на сколько фрагментов их режет словарь. У Тернита оба языка режутся одинаково плотно, английский экономнее всего на 7%. У распространённой открытой модели того же класса русский выходит в 1,75 раза длиннее английского. Значит, русский текст Тернит читает и пишет заметно короче, а это и скорость, и место для мысли.
Карта та же самая. Втрое больше книг ей дала программа, переписанная по мелочам.
Андрей Рощупкин · Тернит