Hugging Face выпустила 207 WebGPU-ядер для ИИ в браузере, быстрее ONNX Runtime Web в 2,57 раза

Hugging Face выпустила 207 WebGPU-ядер для ИИ в браузере, быстрее ONNX Runtime Web в 2,57 раза

Hugging Face выпустила @huggingface/kernels, минимальную JavaScript-библиотеку для загрузки и запуска оптимизированных WebGPU-ядер (низкоуровневых GPU-операций) прямо с Hugging Face Hub, а вместе с ней, начальный набор из 207 таких ядер, доступный по адресу huggingface.co/webgpu-kernels. Одновременно компания запустила Fleet, браузерный инструмент для бенчмаркинга и тестирования, который прогоняет ядра на оборудовании пользователя и, с его согласия, собирает данные о производительности и корректности с устройств, недоступных обычной лаборатории тестирования.

Каждое ядро в коллекции оформлено не просто как шейдер, а как отдельный версионированный репозиторий: manifest.json описывает контракт операции (входы, выходы, атрибуты, ограничения типов), metadata.json хранит идентификатор и происхождение, test.json содержит случаи для проверки корректности, bench.json, сценарии для бенчмарков, а файлы *.wgsl.jinja, параметризованные реализации на языке шейдеров WGSL. Например, ядро ai.onnx.Add реализует поэлементное сложение с многонаправленным broadcasting (расширением размерностей) и включает отдельные варианты для равных форм тензоров, векторизованного и обычного broadcasting. Библиотеку можно установить из npm (@huggingface/kernels@preview); она требует браузера с поддержкой WebGPU и грузит конкретное ядро вызовом getKernel с идентификатором репозитория на Hub и номером версии контракта, после чего возвращённая функция вызывается с типизированными входными данными. Все репозитории лицензированы по Apache-2.0 и опубликованы в организации webgpu-kernels на Hub, рядом с ядрами для CUDA, ROCm, Metal и других платформ.

Hugging Face сравнила свои ядра с ONNX Runtime Web версии 1.30.0-dev.20260826-b1f76d586a на GPU Apple M4. Из 1756 тестовых случаев по всем 207 операциям в сравнение вошли 809, те, где оба решения дали совпадающие результаты и надёжные замеры времени. На этой выборке ядра Hugging Face оказались быстрее в 2,57 раза по геометрическому среднему и в 1,90 раза по медиане, набрав 629 побед против 176 поражений и 4 ничьих. Замер учитывал только время работы самого GPU, без загрузки ядер, создания сессий, компиляции шейдеров и передачи данных. В отдельных случаях разрыв был намного больше: на сложной билинейной операции Einsum (i,ij,j, размер 4096) ядро Hugging Face отработало за 0,136 мс против 1396 мс у ORT WebGPU, более чем в 10000 раз быстрее, а построчная операция CumSum над матрицей [256, 4096] выполнилась за 0,016 мс против 4,784 мс, то есть в 301 раз быстрее. Авторы прямо оговаривают: это нетипичные случаи, где обычная реализация упирается в медленный путь выполнения, а не ожидаемый повсеместно уровень ускорения, и что реальная производительность будет меняться от GPU к GPU и от браузера к браузеру. Компания также сотрудничает с командой ONNX Runtime, чтобы перенести часть улучшений в сам проект и тем самым принести пользу всей экосистеме ONNX Runtime Web.

207 ядер названы стартовой точкой, а не завершённым набором: коллекция входит в более широкую экосистему ядер на Hub, где WebGPU-реализации соседствуют с ядрами для CUDA, ROCm и Metal. Hugging Face заявляет о планах связать эти ядра с более высокоуровневыми инструментами для работы с моделями и продолжить расширять покрытие операций, не называя при этом конкретных сроков.

Ключевые факты

  • Hugging Face выпустила @huggingface/kernels, JS-библиотеку для загрузки и запуска WebGPU-ядер прямо из Hugging Face Hub, вместе с начальным набором из 207 таких ядер.
  • Каждое ядро оформлено как отдельный версионированный репозиторий: контракт операции, тесты на корректность, бенчмарки и шаблоны шейдеров WGSL хранятся вместе; всё лицензировано по Apache-2.0.
  • Запущен Fleet, браузерный инструмент бенчмаркинга, который с согласия пользователя собирает данные о производительности и корректности ядер на его оборудовании.
  • В сравнении с ONNX Runtime Web на Apple M4 GPU (809 из 1756 тестовых случаев) ядра Hugging Face оказались быстрее в 2,57 раза по геометрическому среднему и в 1,90 раза по медиане, 629 побед против 176 поражений и 4 ничьих.
  • В отдельных операциях выигрыш кратно больше, например, более чем в 10000 раз на сложном случае Einsum, но авторы прямо называют это нетипичными, а не ожидаемыми повсеместно результатами.

Почему это важно

Любая модель, работающая в браузере, в итоге сводится к последовательности низкоуровневых GPU-операций: умножения матриц, нормализации, свёртки, механизмы внимания (attention), квантование и преобразования данных. WebGPU даёт кросс-браузерный доступ к GPU, а WGSL, общий язык для шейдеров, которые эти операции выполняют, но переносимость сама по себе не гарантирует скорость: два шейдера с одинаковым результатом могут вести себя совершенно по-разному на разных ускорителях в зависимости от размера рабочих групп, паттернов доступа к памяти, векторизации и типов данных. Публикуя ядра как отдельные версионированные пакеты с тестами и бенчмарками, Hugging Face закладывает нижний, наиболее чувствительный к скорости слой стека инференса в браузере, на который затем могут опираться более высокоуровневые runtime, не теряя в производительности.

Кому это важно

Разработчикам, которые запускают модели машинного обучения прямо в браузере пользователя (в рамках направления, которое в материале называют WebAI), как через существующие runtime вроде ONNX Runtime Web, так и напрямую через @huggingface/kernels. Авторам, которые пишут собственные WebGPU-шейдеры и могут использовать опубликованные ядра как эталонную, уже протестированную реализацию. Сообществу в целом, через Fleet можно проверить, как ядра ведут себя на конкретном железе, и внести эти данные в общую базу.

Как это применить

Библиотека ставится из npm командой npm install @huggingface/kernels@preview и требует браузера с поддержкой WebGPU, её наличие проверяется выражением "gpu" in navigator. Конкретное ядро загружается вызовом getKernel с идентификатором репозитория на Hub и номером версии контракта, например, getKernel("webgpu-kernels/ai.onnx.Add", { version: 1 }), после чего возвращённая функция вызывается с типизированными входными данными и формами тензоров; форма и тип выходного тензора выводятся из манифеста автоматически. Одна и та же схема вызова работает и для тяжёлых операций вроде умножения матриц (ai.onnx.MatMul), где выигрыш от оптимизации максимален, меняются только идентификатор репозитория и входные данные. Все репозитории ядер лицензированы по Apache-2.0 и лежат в организации webgpu-kernels на Hub, где соседствуют с ядрами для CUDA, ROCm, Metal и других платформ.

Можно ли доверять

Источник, официальный пост Hugging Face о собственном релизе, поэтому все цифры описывают внутренний бенчмарк компании, а не независимую проверку. Сравнение проводилось на одном устройстве (Apple M4 GPU) против ONNX Runtime Web версии 1.30.0-dev.20260826-b1f76d586a: из 1756 тестовых случаев по 207 операциям в итоговое сравнение попали только 809, те, где оба решения дали совпадающие результаты и надёжные замеры по времени. Сами авторы уточняют, что измерялась только работа GPU без учёта загрузки ядер, создания сессий, компиляции шейдеров и передачи данных, что очень короткие операции измерять сложнее, а самые впечатляющие ускорения (в тысячи раз), редкие, а не типичные случаи. Материал не сатирический и не юмористический, авторство статьи в источнике не указано, только коллективное «мы» от лица Hugging Face.

Риски и подводные камни

Библиотека помечена как preview-версия, то есть её интерфейс ещё может измениться. Данные, которые Fleet собирает о производительности и корректности с устройств пользователей, зависят от их готовности поделиться замерами; в источнике не раскрывается, какие именно данные собираются и как технически устроено согласие. Лабораторные цифры не переносятся напрямую на прикладные задачи: авторы сами подчёркивают, что измерения относятся к отдельным операциям, а не к целым моделям, и что реальная производительность будет меняться в зависимости от GPU, браузера и драйвера. Также в материале нет конкретных сроков ни для переноса улучшений ядер в основной проект ONNX Runtime Web, ни для интеграции ядер с более высокоуровневыми инструментами работы с моделями.