Недавно писал про то, что видеокарты Nvidia становятся лучше буквально с каждой неделей, так как команда инженеров дописывает ПО и улучшает производительность у карт нового поколения. Цитирую свой прошлый пост: «Если сравнивать перформанс на начало и конец периода, то MFU (model flops utilization, доля утилизации от пиковой для GPU) вырос с 34% до 54% — относительный рост на целых 57%!». SemiAnalysis делает техническое саммари того, какие изменения произошли недавно. С начала июля по 31 августа производительность декодирования (генерции) выходных токенов для модели DeepSeek (в FP4 на стойке GB200 NVL72 (72 фактически лучших видеокарты) улучшилась на 10–15% на всех уровнях скорости генерации, измеряемой на уровне сесии (токенов-в-секунду-на-пользователя). — Одна из оптимизаций включает в себя объединение нескольких кернелов (маленьких программ на CUDA для выполнения на GPU) AllToAll — объединение активаций каждого токена с его метаданными, такими как коэффициенты масштабирования при квантизации или выбранный роутером эксперт. Специальный кернел ​​AllToAll использует LL128, где теперь для каждых 128 байт требуется только 8 байтов флагов для определения куда отправлять эмбеддинг и взвешенного суммирования результатов (combine-and-dispatch). Такой подход обеспечивает меньшие накладные расходы, чем стандартный протокол. — Другая оптимизация решает проблему, из-за которой копирование и объединения в eager-режиме PyTorch выполнялись слишком медленно. При размере батча 1 (один запрос в LLM за раз) и 8 тысячах токенов контекста это занимало 306 µs на GB200, что в 3,8 раза медленнее теоретического предела, рассчитанного на основе скорости света. В результате оптимизации стало всего в 1,3 медленнее теории. Операции копирования и конкатенации используются в MLA, DeepSeek'овском варианте аттеншена. — Реализована оптимизация PDL, которая позволяет зависимым кернелам запускаться до завершения работы родительского кернела. Это позволяет выполнять настройку и подготовку к запуску в параллель, а не замедлять процесс потом в момент вызова. Результаты на картинке: при увеличении скорости генерации на каждого пользователя с 77 до 83 токенов в секунду общая пропускная способность в токенах на карту выросла с 951 до 1105. В одной стойке 72 видеокарты, то есть теперь вместо обслуживания 890 пользователей одновременно можно обслуживать 958 (без просадки по скорости генерации). И это за два месяца оптимизаций!