Актуальные темы
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Вы на интервью на должность инженера по ИИ в OpenAI.
Интервьюер спрашивает:
"Наша модель GPT генерирует 100 токенов за 42 секунды.
Как вы сделаете это в 5 раз быстрее?"
Вы: "Я выделю больше GPU для более быстрой генерации."
Интервью окончено.
Вот что вы пропустили:
Настоящая проблема не в вычислениях, а в избыточных вычислениях.
Без кэширования KV ваша модель пересчитывает ключи и значения для каждого токена, повторяя работу.
- с кэшированием KV → 9 секунд
- без кэширования KV → 42 секунды (~5 раз медленнее)
Давайте углубимся, чтобы понять, как это работает!
Чтобы понять кэширование KV, мы должны знать, как LLM генерирует токены.
- Трансформер производит скрытые состояния для всех токенов.
- Скрытые состояния проецируются в пространство словаря.
- Логиты последнего токена используются для генерации следующего токена.
- Повторять для последующих токенов.
Проверьте это👇
Таким образом, для генерации нового токена нам нужно только скрытое состояние самого последнего токена.
Никакие другие скрытые состояния не требуются.
Далее давайте посмотрим, как вычисляется последнее скрытое состояние в слое трансформера с помощью механизма внимания.
Во время внимания:
Последняя строка произведения запроса и ключа включает:
- последний вектор запроса.
- все векторы ключей.
Также последняя строка окончательного результата внимания включает:
- последний вектор запроса.
- все векторы ключей и значений.
Посмотрите на эту визуализацию, чтобы лучше понять:
Вышеуказанное понимание предполагает, что для генерации нового токена каждой операции внимания в сети требуется только:
- вектор запроса последнего токена.
- все векторы ключей и значений.
Но здесь есть еще одно важное понимание.
Когда мы генерируем новые токены:
- Векторы KV, используемые для ВСЕХ предыдущих токенов, не меняются.
Таким образом, нам просто нужно сгенерировать вектор KV для токена, сгенерированного на один шаг раньше.
Остальные векторы KV можно извлечь из кэша, чтобы сэкономить вычислительные ресурсы и время.
Это называется кэширование KV!
Чтобы повторить, вместо того чтобы избыточно вычислять векторы KV для всех токенов контекста, кэшируйте их.
Чтобы сгенерировать токен:
- Сгенерируйте вектор QKV для токена, сгенерированного на один шаг раньше.
- Получите все остальные векторы KV из кэша.
- Вычислите внимание.
Проверьте это👇
Кэширование KV ускоряет вывод, вычисляя кэш KV запроса перед генерацией токенов.
Именно поэтому ChatGPT требуется больше времени для генерации первого токена, чем для остальных.
Эта задержка известна как время до первого токена (TTFT).
Улучшение TTFT — это тема для другого дня!
214
Топ
Рейтинг
Избранное
