Вероятное будущее дешевых SOTA LLM
Люди в интернетах паникуют из-за начинающегося подорожания LLM. Оно и понятно: тот же Anthropic в подписке за $20 позволяет генерировать токенов себестоимостью примерно $2000. Так не может продолжаться долго. Но есть все же свет в конце тоннеля, и я очень надеюсь на то, что он все-таки придет.
Проблема O(n²) и как ее сейчас решают
Как работет трансформер (GPT) не писал только ленивый, так что я на этом вопросе останавливаться не буду. Кто не читал - из последнего могу порекомендовать посты Николая Тузова, мне нравится его слог.
Проблема же высокой сложности состоит в том, что GPT генерируют токены по одному с учетом всех предыдущих. Т.е. банально потому что токены генерируются с учетом контекста. Технически и упрощенно это происходит так:
1. Пришел промпт. Модель один раз "прочитала" его и сохранила свойства каждого его токена в быструю видеопамять (это и называется KV-cache).
2. Генерируем первый новый токен. Модель вычисляет его связь с предыдущими токенами из кеша, перемножая каждый токен из кеша, т.е. каждый следующий со всеми предыдущими.
3. Для следующего токена ей нужно просчитать связи уже со всеми прошлыми токенами плюс с тем, что мы только что создали.
На каждом новом шаге количество этих операций сравнения растет, потому что история за спиной становится все длиннее и длиннее.
Именно из-за необходимости сопоставлять каждый токен с каждым и возникает квадратичная сложность O(n^2). При контексте в 1 000 токенов матрица внутренних связей внутри механизма внимания разрастается до 1 000 000 элементов, которые нужно обработать.
Это базовая база и основная основа. Этот процесс, изначально построенный на механизме внимания (Attention), сегодня сильно оптимизировали. Самые топовые механизмы распределения внимания — это Grouped-Query Attention (GQA) и Native Sparse Attention (NSA). Первый уменьшает объем KV-кеша в видеопамяти до 8 раз благодаря группировке векторов соседних токенов, а NSA позволяет "скипать неважные" токены в истории при вычислении следующего шага (не без потери точности, конечно). Есть и другие механизмы, которые используют пореже.
Проблема медленной памяти
И всё-таки перемножение матриц - это крайне лёгкая задача для видеокарт. Особенно - для тех, что созданы специально для инференса. Вычисления следующего токена упираются отнюдь не в вычислительные мощности, а в скорость шины памяти, передающей данные из VRAM в кеш процессора видеокарты. Она не то чтобы маленькая, но давайте посмотрим на примерах:
- У топовой NVIDIA Blackwell B200 скорость шины видеопамяти составляет колоссальные 8 ТБ/с. Или, точнее, 8000 ГБ/с, что тоже чуть больше, чем дофига. Но на практике это значит, что моделька размером 70B формата FP16 и весом около 140ГБ за 1 секунду прогонит свои веса через процессор около 57 раз. Или, другими словами, скорость генерации составляет 57 токенов в секунду.
- NVIDIA RTX 5090, топовая игровая видеокарта, разгоняется примерно до 1.8 ТБ/с. Более чем достаточно для игр в 4К, но вот скорость ответа от LLM приличного размера оставляет желать лучшего. Ещё и 140 ГБ видеопамяти никто туда не ставит.
Post #371
130
- 🔥 4
- ❤ 1