(Не)один коммит до китайской CUDA
Главное преимущество Nvidia не только в чипах, но и в CUDA: библиотеки, компиляторы и инструменты, под которые разработчики годами писали модели. Huawei выпускает собственные ускорители, но перенос на них сложных вычислений по-прежнему требует много ручной работы.
Видимо, после долгих переговоров, DeepSeek переносит на Ascend 950 почти весь низкоуровневый набор, на котором работают ее собственные модели:
▪️DeepGEMM ускоряет матричные вычисления. У Nvidia это cuBLAS и шаблоны CUTLASS, у Huawei своя CATLASS;
▪️DeepEP организует обмен данными между ускорителями в MoE-моделях. У Nvidia это NCCL и NVSHMEM, у Huawei своя HCCL;
▪️TileKernels содержит базовые операции с памятью и векторами. У Nvidia это CUB и Thrust, у Huawei библиотека операторов aclNN;
▪️FlashMLA ускоряет механизм внимания и работу с длинным контекстом. У Nvidia это FlashAttention и внимание из cuDNN, у Huawei свой ускоритель трансформеров ATB;
▪️DeepSelect выполняет отбор данных для разреженного внимания. Отдельного аналога нет ни там, ни там, это узкая оптимизация под собственную архитектуру.
Выходит забавное, у Huawei почти на каждом уровне стека уже есть что-то свое, но DeepSeek это не остановило.
Связывает их TileLang, открытый Python-подобный язык для написания вычислительных ядер: разработчик описывает операцию на высоком уровне, а компилятор превращает ее в код под конкретный ускоритель. СМИ дружно назвали его собственным языком DeepSeek, но разработан он в Пекинском университете, а поддержка чипов Huawei появилась в нем год назад, живет в отдельном репозитории и в мейнлайн не входит.
Цифры хорошие. Матричные умножения выбирают до 99,8% того, на что чип способен физически. Пересылка данных держит 373 ГБ/с на восьми картах и 313 ГБ/с на ста двадцати восьми. Второе число интереснее: у Nvidia карты внутри сервера связаны быстро, а между серверами идет обычная сеть, и полоса падает втрое. Huawei строит суперузел, где тысячи карт соединены как одна машина, и обрыва на границе сервера нет. Вместе с Huawei компания отдельно оптимизировала вычисления и связь внутри узла из 128 Ascend 950.
При этом из пяти перечисленных компонентов отдельные Ascend-версии выложены у двух, и в обоих репозиториях ровно по одному коммиту. Внутри честный список недоделанного: часть коллективных операций еще пишется, балансировка нагрузки между экспертами заявлена в API, но не реализована, два модуля помечены как экспериментальные. Замеры сняты на Ascend 950DT, который в продажу не поступил, с прошивкой, которой нет в открытом доступе: DeepSeek пишет об этом сама, прямо в документации.
Называть TileLang полноценной китайской CUDA нельзя. Скорее это аналог Triton, удобный язык для создания отдельных высокопроизводительных операций. Под ним остается платформа Huawei CANN с драйверами, средой выполнения и системными библиотеками, а набор готовых операций на все случаи жизни, которых у Nvidia тысячи, не тронут вообще.
При этом коммуникацию для MoE на Ascend до DeepSeek уже реализовали дважды: один вариант лежит в наборе ядер SGLang, второй у самой Huawei. Теперь их три, и все требуют разных версий платформы.
В CUDA такая избыточность работает: есть кому отсеивать мертвые ветки. На Ascend отбор делать пока некому, разработчиков там на порядки меньше.
Так что выложили не экосистему, а срез рабочего дерева под конкретное железо и конкретную модель. Станет ли он чем-то большим, зависит от второго коммита.
@anti_agi
Post #2152
489