Pull to refresh
4K+
30

ML engineer

8,4
Rating
15
Subscribers
Send message

Cached input растёт квадратично

Level of difficultyMedium
Reading time5 min
Reach and readers7K

Единственная причина, по которой современные авторегрессионные трансформеры вообще пригодны для инференса — это использование KV кэша, без которого каждый следующий токен требовал бы O(\mathrm{context\_size})^2операций для вычисления всех попарных произведений между векторами ключей и запросов. KV кэш позволяет обменивать память на скорость, в результате чего лимитирующим фактором в инференсе становится пропускная способность памяти, и очередной токен вычисляется за линейное время.

Сейчас узнаем что из этого следует.

Читать далее

Ropes — быстрые строки

Reading time5 min
Reach and readers29K
Здравствуй, Хабр.
Большинство из нас так или иначе работает со строками. Этого не избежать — если ты пишешь код, ты обречен каждый день складывать строки, разбивать их на составные части и обращаться к отдельным символам по индексу. Мы давно привыкли что строки — это массивы символов фиксированной длины, а это влечет за собой соответствующие ограничения в работе с ними.
Так, мы не можем быстро объединить две строки — для этого нам потребуется сначала выделить необходимое количество памяти, а потом скопировать туда данные из конкатенируемых строк. Очевидно, что такая операция имеет сложность порядка О(n), где n — суммарная длина строк.
Именно поэтому код

string s = "";
for (int i = 0; i < 100000; i++) s += "a";

работает так медленно.

Хочешь выполнять конкатенацию гигантских строк быстро? Не нравится, что строка требует для хранения непрерывную область памяти? Надоело использовать буферы для построения строк?

Хватит это терпеть!

Trie, или нагруженное дерево

Reading time4 min
Reach and readers107K
Здравствуй, Хабрахабр. Сегодня я хочу рассказать о такой замечательной структуре данных как словарь на нагруженном дереве, известной также как префиксное дерево, или trie.

Что это ?


Нагруженное дерево — структура данных реализующая интерфейс ассоциативного массива, то есть позволяющая хранить пары «ключ-значение». Сразу следует оговорится, что в большинстве случаев ключами выступают строки, однако в качестве ключей можно использовать любые типы данных, представимые как последовательность байт (то есть вообще любые).
Читать дальше →

Information

Rating
836-th
Registered
Activity