Media is too big
VIEW IN TELEGRAM
ИИ ОТНИМАЕТ У НАС САМОЕ ДОРОГОЕ
Майнкрафт на новогодних. Чел подключил Майнкрафт к opencode и теперь ллм играет в Майнкрафт.
Github
Майнкрафт на новогодних. Чел подключил Майнкрафт к opencode и теперь ллм играет в Майнкрафт.
Github
😭60👍10🔥5🤔4🌭4💋1🗿1
Forwarded from underground (Konstantin Korolev)
X (formerly Twitter)
Konstantin (@advpropx) on X
nvfp4 moe on b200: the 142 tflops gap
benchmarked gpt-oss-20b (64e, topk=4) nvfp4 kernels.
sglang hits 1168 tflops peak.
vllm tops out at 1026 tflops.
same hardware. same model. different kernels.
dive in⬇️
benchmarked gpt-oss-20b (64e, topk=4) nvfp4 kernels.
sglang hits 1168 tflops peak.
vllm tops out at 1026 tflops.
same hardware. same model. different kernels.
dive in⬇️
🔥4
Костя написал оч технический блог про особенности инференса ллм и sglang vs vllm
https://open.substack.com/pub/advprop/p/the-142-tflops-gap-why-fp4-moe-kernel
https://open.substack.com/pub/advprop/p/the-142-tflops-gap-why-fp4-moe-kernel
Substack
The 142 TFLOPS Gap: Why FP4 MoE Kernel Engineering Matters on Blackwell
How to achieve 1.84x speedup over vLLM on small-batch inference through kernel fusion, Blackwell optimization, and expert-aware computation
🔥40💩5👍3😁2😐2
Love. Death. Transformers.
Костя написал оч технический блог про особенности инференса ллм и sglang vs vllm https://open.substack.com/pub/advprop/p/the-142-tflops-gap-why-fp4-moe-kernel
А теперь ещё и на hf самое подробное сравнение особенностей инференса Moe в vllm и sglang
https://huggingface.co/blog/apsys/blackwell-nvfp4-comparison
https://huggingface.co/blog/apsys/blackwell-nvfp4-comparison
huggingface.co
TFLOPS Gap: Why FP4 MoE Kernel Engineering Matters on Blackwell
A Blog post by Konstantin on Hugging Face
🔥29👾4💩1
Судя по stack overflow через лет эдак 50 когда зумеры начнут активно умирать мы будем жить в чем то среднем между пелевиным и wh40k, с одной стороны есть возможность крутить ultra advanced технологии умнее людей, с другой стороны они не то чтобы дают бонусы для простого обывателя (скорее наоборот)
🤔96🔥13💯9🫡5🥴4 3
Если сранивать онлифанщиц и ML/AI phd, то с одной стороны у нас хуесосы, с другой стороны люди которые реально приносят деньги
https://archive.ph/Lsk2Z
https://archive.ph/Lsk2Z
😁205 36👍12🫡2
70% задач в некоторых vlm бенчах решаются через common sense (знания текстовой тушки) и без использования картинок.
Paper
Paper
О, ты пишешь CUDA-ядра? Все уже давно на Triton. Шучу, мы все на Mojo. Мы используем cuTile. Мы используем ROCm. У нас внутренний DSL-компилятор, для NVGPU MLIR dialect, но, только что вышел Tile IR, так что теперь мы будем
использовать его. Наш PM сидит на TileLang. Тимлид была на CuTe, но теперь она снова пишет PTX вручную. Наш интерн строит на TT-Metalium для наших Wormhole’ов. Наш CFO одобрил заказ на здоровенные wafer-scale чипы, так что теперь мы портируем наши ядра на CSL. Наш CTO работает над kernel-less graph compiler’ом, так что скоро нам вообще не нужно будет писать ядра. Наш CEO думает, что мы говорим про ядро Linux. Кстати мы делаем Cursor для собак.
использовать его. Наш PM сидит на TileLang. Тимлид была на CuTe, но теперь она снова пишет PTX вручную. Наш интерн строит на TT-Metalium для наших Wormhole’ов. Наш CFO одобрил заказ на здоровенные wafer-scale чипы, так что теперь мы портируем наши ядра на CSL. Наш CTO работает над kernel-less graph compiler’ом, так что скоро нам вообще не нужно будет писать ядра. Наш CEO думает, что мы говорим про ядро Linux. Кстати мы делаем Cursor для собак.
1😁211✍18 14 11💊6💋5🤪5
Очень красивая (глаза болят потом) штука про архитектуру железок от Modal(это такой провайдер карт)
blog
blog
Forwarded from download more GPUs
Full BF16 трейны и при чём здесь Stochastic Rounding
А помните не очень далёкие времена, когда учить что-то в сырой низкой точности никто даже не пробовал? Заводили Mixed Precision, хранили параметры модели в двух точностях - в FP32 и в FP16, смотрели на потребление видеопамяти и немного грустили, ну а что делать, зато работало.
Сейчас, благо, многие уже ставят свои эксперименты в full BF16, - и многие из этих экспериментов даже сходятся из коробки. Но иногда не сходятся. Возникает вопрос, - что же делать в таком случае.
В целом, есть довольно стандартные инженерные трюки, чтобы сделать чуть лучше
* аккумулировать и хранить градиенты в FP32 (и в рамках DP-группы, и в рамках последовательных forward-backward-ов); кстати, ребятишки из PyTorch в следующем релизе 2.10 (во всяком случае это уже есть в nightly сборке 2.10) добавят поддержку раздельного dtype для параметра и для градиента, связанного с этим параметром, - очень ждём 🫶
* кастить состояния оптимизатора, градиенты и параметры в FP32 во время обновления (не эквивалентно тому чтобы хранить их в FP32), - многие реализации оптимизаторов уже так делают, см например оптимизаторы в torchao (ТЫК)
Есть ли какие-то академические работы, которые исследуют феномен проблем, связанных с BF16 трейнами?
Есть! Вот, например, довольно старая, но классная работа (ТЫК), в которой авторы описывают, что проблемы возникают в первую очередь из-за ошибок округления при обновлении параметров модели, а ошибки округления во время расчёта градиентов (forward/backward) имеют минимальное влияние. Авторы предлагают использовать в том числе Stochastic Rounding для того, чтобы исправить эту проблему. Есть ещё одна работа (ТЫК), в которой авторы на практике проверяют full BF16 рецепт со Stochastic Rounding'ом, связывают SR и регуляризацию, а также предлагают реализацию AdamW с SR.
Как работает Stochastic Rounding?
Идея проста и лежит в противовес стандартному округлению. Стандартное округление даёт меньшую ошибку точечно, однако это округление является смещённым. Суть Stochastic Rounding в том, что вероятность округления числа вверх или вниз зависит от того, насколько близко оно к границам сетки точности. В результате математическое ожидание округленного значения равно исходному точному числу (E[SR(x)]=x). Это делает округление несмещенным.
Как реализовать?
Реализация самого SR на pytorch довольно проста. Однако убедитесь, что все ваши процессы в распределённом сетапе имеют одинаковый источник RNG, чтобы обновления были одинаковыми по всему вашему world.
А полный код оптимизатора, который использует SR, можно подсмотреть в torchao - ТЫК.
В нём авторы кастят параметры, состояния и градиенты в FP32, следовательно делают расчёт обновления в FP32, а затем делают обновление параметров модели уже в BF16, опционально используя Stochastic Rounding.
А помните не очень далёкие времена, когда учить что-то в сырой низкой точности никто даже не пробовал? Заводили Mixed Precision, хранили параметры модели в двух точностях - в FP32 и в FP16, смотрели на потребление видеопамяти и немного грустили, ну а что делать, зато работало.
Сейчас, благо, многие уже ставят свои эксперименты в full BF16, - и многие из этих экспериментов даже сходятся из коробки. Но иногда не сходятся. Возникает вопрос, - что же делать в таком случае.
В целом, есть довольно стандартные инженерные трюки, чтобы сделать чуть лучше
* аккумулировать и хранить градиенты в FP32 (и в рамках DP-группы, и в рамках последовательных forward-backward-ов); кстати, ребятишки из PyTorch в следующем релизе 2.10 (во всяком случае это уже есть в nightly сборке 2.10) добавят поддержку раздельного dtype для параметра и для градиента, связанного с этим параметром, - очень ждём 🫶
* кастить состояния оптимизатора, градиенты и параметры в FP32 во время обновления (не эквивалентно тому чтобы хранить их в FP32), - многие реализации оптимизаторов уже так делают, см например оптимизаторы в torchao (ТЫК)
Есть ли какие-то академические работы, которые исследуют феномен проблем, связанных с BF16 трейнами?
Есть! Вот, например, довольно старая, но классная работа (ТЫК), в которой авторы описывают, что проблемы возникают в первую очередь из-за ошибок округления при обновлении параметров модели, а ошибки округления во время расчёта градиентов (forward/backward) имеют минимальное влияние. Авторы предлагают использовать в том числе Stochastic Rounding для того, чтобы исправить эту проблему. Есть ещё одна работа (ТЫК), в которой авторы на практике проверяют full BF16 рецепт со Stochastic Rounding'ом, связывают SR и регуляризацию, а также предлагают реализацию AdamW с SR.
Как работает Stochastic Rounding?
Идея проста и лежит в противовес стандартному округлению. Стандартное округление даёт меньшую ошибку точечно, однако это округление является смещённым. Суть Stochastic Rounding в том, что вероятность округления числа вверх или вниз зависит от того, насколько близко оно к границам сетки точности. В результате математическое ожидание округленного значения равно исходному точному числу (E[SR(x)]=x). Это делает округление несмещенным.
Как реализовать?
Реализация самого SR на pytorch довольно проста. Однако убедитесь, что все ваши процессы в распределённом сетапе имеют одинаковый источник RNG, чтобы обновления были одинаковыми по всему вашему world.
@torch.compile
def copy_fp32_to_bf16_stochastic_(
target: torch.Tensor, source: torch.Tensor
):
result = torch.randint(
0, 1 << 16, source.shape, device=source.device, dtype=torch.int32
)
# add the random number to the lower 16 bit of the mantissa
result.add_(source.view(dtype=torch.int32))
# mask off the lower 16 bit of the mantissa
result.bitwise_and_(-65536) # -65536 = FFFF0000 as a signed int32
# copy the higher 16 bit into the target tensor
target.copy_(result.view(dtype=torch.float32))
А полный код оптимизатора, который использует SR, можно подсмотреть в torchao - ТЫК.
В нём авторы кастят параметры, состояния и градиенты в FP32, следовательно делают расчёт обновления в FP32, а затем делают обновление параметров модели уже в BF16, опционально используя Stochastic Rounding.
🔥44👍10 4✍1
трогать снег надо лицом предвартильно потрогав камни шлемом
🔥104 25❤🔥12💋3☃1👍1