Про скорость работы языковых моделей.
Кажется, факт, что скорость ответа модели очень зависит от длины ответа, намного больше чем от длины запроса — не вполне очевиден.
Интуитивно: "я же закинул в сеть простыню текста, будет долго думать".
На практике - увеличение/уменьшение величины входящего запроса в х2 раза вполне может быть вообще не заметно на общей скорости ответа. А вот те же изменения исходящего ответа - точно будут заметны.
Вот смотрите:
Берем большой текст на вход (ну, скажем лист А4). Делаем простой запрос: «А в тексте вообще упоминался розовый единорог?» Ответ будет коротким — «да» / «нет». Вроде бы текста много, токенов целый вагон, а модель вообще не напрягается и выдает ответ за 2–3 секунды.
Теперь наоборот. Берем коротенький вопрос вроде «Напиши годовой финансовый отчёт вымышленного стартапа „Единорог и партнёры“». И просим сгенерить текст страницей А4. И тут модель начнёт нехило так тормозить — уже не 2 и не 5 секунд, а может и минутку думать.
Почему такая разительная разница?
Происходит вот что:
На этапе обработки запроса модель переводит все входящие токены в «вектора». И делает это быстро и параллельно, тк связанность между ними нам не важна.
А вот генерация идёт иначе. Она происходит последовательно, токен за токеном.
Те в нашем случае сначала идет предсказание первого токена. Упростим, пусть токен будет целое слово «Вот». Чтобы его сгенерить модель берет весь входящий контекст и предсказывает «Вот». После этого опять берет весь входящий контекст + «Вот» и предсказывает следующий токен, например «годовой». И так для всего ответа. Никакого параллелизма.
Именно из-за этого генерация большого ответа и занимает так много времени. Поэтому, при планировании сценариев, думая о скорости, по большей части ориентируемся именно на размер ответа. Входной контекст не так влияет на скорость. (Но влияет на другие показатели, например точность ответа и тд).
Пока что лучшее видео с объяснением как все работает все еще
тут.