i
ДАТАИСТ
Новости · 2026-09-01

Hugging Face представила @huggingface/kernels: более 200 WebGPU-ядер для локального ИИ

@neuronium_ai @neuronium_ai

Hugging Face выпустила библиотеку @huggingface/kernels для загрузки и запуска оптимизированных ядер WebGPU из Hugging Face Hub. Вместе с ней опубликована начальная коллекция из 207 ядер для операций машинного обучения. Каждое ядро оформлено как отдельный версионируемый пакет с интерфейсом, шаблонами шейдеров, тестами корректности, бенчмарками и инструкциями по использованию. Одновременно компания представила Fleet — набор браузерных тестов, который проверяет и оценивает производительность ядер на оборудовании пользователей.

Обложка: Hugging Face представила @huggingface/kernels: более 200 WebGPU-ядер для локального ИИ

Что входит в выпуск

Коллекция охватывает операции, используемые в самых разных архитектурах и задачах машинного обучения. Каждое ядро опубликовано как полноценный пакет с собственной версией: на Hugging Face Hub вместе хранятся его интерфейс, шаблоны шейдеров, тесты корректности, тесты производительности и инструкции по применению.

Hugging Face также запускает Fleet — набор браузерных тестов для проверки и оценки ядер на GPU конкретного устройства. Помимо результатов для собственного компьютера, пользователи смогут передавать сообществу данные о производительности и корректности с устройств, которые невозможно охватить обычной лабораторией. С согласия пользователя каждый запуск добавляет закрытые данные, помогающие находить ошибки, аномально медленные случаи, улучшать варианты ядер и принимать решения об оптимизации для реального оборудования.

Модель, работающая в браузере, в итоге превращает вычисления в последовательность операций на GPU: умножения матриц, нормализации, свёртки, примитивы внимания, операции квантования, преобразования расположения данных и другие действия. WebGPU открывает к ним доступ в современных браузерах через переносимый API, а WGSL служит общим языком для исполняемых шейдеров.

Переносимость сама по себе не гарантирует высокой скорости. Два шейдера могут выполнять одну операцию и выдавать одинаковый результат, но совершенно по-разному работать на разных ускорителях. На производительность влияют размеры рабочих групп, схема доступа к памяти, векторизация, типы данных и способы объединения операций. Оптимальный вариант также может зависеть от формы входных данных, устройства, браузера и доступных возможностей WebGPU.

Поэтому ядра становятся базовым уровнем быстрого инференса в браузере. Эффективность высокоуровневых сред выполнения ограничена эффективностью операций, которые они вызывают. Если сделать эти операции отдельными, доступными для поиска, тестирования, бенчмарков и версионирования, нижний уровень можно улучшать независимо, сохраняя стабильный контракт для верхних уровней.

У каждого ядра в коллекции есть собственный репозиторий и карточка. В ней описаны смысл операции, входы, выходы, атрибуты, поддерживаемые типы данных, исходные файлы и готовый к запуску пример с @huggingface/kernels.

Например, ai.onnx.Add выполняет поэлементное сложение с многонаправленным вещанием. Это одна из самых простых операций в нейросети: она используется и в остаточных соединениях, и при добавлении смещения. В карточке указаны два входа, форма результата после вещания, поддерживаемые типы данных и варианты для разных форм данных и устройств.

Репозиторий ai.onnx.Add объединяет манифест, тесты корректности и производительности, а также шаблоны шейдеров WGSL

Репозиторий ai.onnx.Add объединяет манифест, тесты корректности и производительности, а также шаблоны шейдеров WGSL

Источник: huggingface.co

За карточкой находится репозиторий со всеми материалами, необходимыми для понимания и оценки реализации.

Такая структура превращает шейдер в переиспользуемый программный артефакт. Интерфейс можно изучить без чтения кода на WGSL, а тесты корректности и производительности хранятся вместе с реализацией. Опубликованные версии можно загружать явно, не полагаясь на URL файла без версии. Эти ядра также могут служить эталонными реализациями для разработчиков собственных ядер WebGPU и авторов сред выполнения, которые интегрируют такие операции в свои продукты.

Для запуска ядер нужен браузер с поддержкой WebGPU. Доступность WebGPU зависит от браузера, операционной системы, GPU и драйвера. Проверить её в JavaScript можно с помощью выражения "gpu" in navigator.

Как работает библиотека

@huggingface/kernels связывает репозиторий ядра с приложением. Разработчик вызывает getKernel, передавая идентификатор репозитория на Hub и версию контракта, а затем запускает полученную функцию с типизированными входными данными и формами тензоров. В источнике этот подход показан на небольшом примере сложения со смещением.

Второй вход распространяется по первому измерению, поэтому результат получает форму [2, 3]. Загрузчик выводит форму результата и логический тип данных из контракта манифеста и входных данных, после чего автоматически выделяет память для c.

Сложение шести чисел с плавающей точкой выбрано как самый маленький пример. При таком размере обмен данными с GPU обходится намного дороже самих вычислений. Здесь важен шаблон вызова: он остаётся тем же и для тяжёлых операций, где оптимизированные ядра действительно дают выигрыш, например для умножения матриц ai.onnx.MatMul. Меняются только идентификатор репозитория и входные данные.

Даже такая простая операция показывает, зачем нужны варианты ядер:

Равные формы — прямой векторизованный путь.
Векторизованное вещание — отдельная логика индексации.
Скалярная обработка — вариант для скалярных входов.
Общее вещание — обработка остальных форм.

Среда выполнения может выбрать реализацию под текущий вызов и устройство, не меняя API, с которым работает приложение.

Параметр version: 1 выбирает первую версию опубликованного контракта ядра. Он отделён от набора операторов ONNX, поля since_version у оператора и версии модели. Такое разделение позволяет приложениям зависеть от стабильного контракта для JavaScript, пока реализации ядер меняются за его пределами.

Сравнение с ORT WebGPU

Hugging Face сравнила свою коллекцию с ORT WebGPU на GPU Apple M4, используя ONNX Runtime Web 1.30.0-dev.20260826-b1f76d586a. Сначала команда проверила 1 756 тестовых случаев для всех 207 операций, а затем оставила 809 случаев, в которых обе стороны выдавали совпадающие результаты и обеспечивали надёжные замеры времени.

В этих сравнениях собственные ядра Hugging Face оказались быстрее в 2,57 раза по среднему геометрическому и в 1,90 раза по медиане. Зафиксировано 629 побед, 176 поражений и 4 ничьи.

207операций в коллекции
1 756исходных тестовых случаев
809сопоставимых случаев
2,57×среднее геометрическое ускорение
1,90×ускорение по медиане

Для отдельных операций разрыв был намного больше. В сложном случае билинейного Einsum с индексами i,ij,j и размером 4096 ядро Hugging Face выполнило задачу за 0,136 мс, тогда как ORT WebGPU потребовалось 1 396 мс — более чем в 10 000 раз медленнее. Построчный CumSum для данных формы [256, 4096] оказался быстрее в 301 раз: 0,016 мс против 4,784 мс.

Это отдельные случаи, а не скорость, которую следует ожидать от каждой операции. Они показывают, насколько специализированное ядро может помочь, когда универсальная реализация попадает на медленный путь.

Время измеряли только для работы на GPU. В замеры не входили загрузка ядер, создание сессий, передача входных данных, компиляция шейдеров и чтение результатов обратно. Очень короткие задачи измерять сложнее, а небольшие случаи могут получать преимущество за счёт кэша GPU. Поэтому эти цифры следует воспринимать как сравнение реализаций, а не как обещание одинаковых результатов в любом приложении.

Кроме того, речь идёт об отдельных операциях, а не о полноценных моделях. Реальная скорость будет меняться в зависимости от GPU и браузера, поэтому Fleet нужен для сбора более широкой картины.

Hugging Face также работает с командой ONNX Runtime, чтобы передать эти улучшения в основной проект и сделать их доступными для экосистемы ONNX Runtime Web.

Проверка на устройствах пользователей

Производительность WebGPU меняется в зависимости от GPU, браузера и драйвера, поэтому результаты одного компьютера показывают только часть картины. Fleet позволяет любому пользователю запустить в браузере проверки корректности и производительности и увидеть, как ядра работают на его оборудовании.

С согласия пользователя каждый запуск в закрытом виде добавляет данные, которые помогают находить ошибки, зависящие от конкретного устройства, сравнивать варианты ядер и улучшать правила их выбора. Цель — использовать данные с широкого набора реальных устройств, чтобы ядра становились быстрее и надёжнее.

Коллекция на Hugging Face Hub

Начальные 207 ядер — только отправная точка. Независимая публикация ядер на Hub создаёт общее место, где можно изучать контракты, сравнивать реализации, воспроизводить проверки корректности и улучшать производительность, не встраивая каждый шейдер непосредственно в каждую среду выполнения.

Коллекция также входит в более широкую экосистему ядер Hub. На странице Kernels ядра WebGPU находятся рядом с ядрами для CUDA, ROCm, Metal и других платформ. Их можно фильтровать, сортировать и просматривать так же, как остальные артефакты на Hub.

Все 207 ядер WebGPU на странице Kernels в Hub, отфильтрованные по платформе

Все 207 ядер WebGPU на странице Kernels в Hub, отфильтрованные по платформе

Источник: huggingface.co

Это низкоуровневая основа для следующих этапов развития браузерного стека инференса. Hugging Face планирует связать ядра с высокоуровневыми инструментами для моделей, расширять набор поддерживаемых операций и упрощать быстрый локальный инференс в экосистеме WebAI.

Компания предлагает изучить коллекцию ядер WebGPU, попробовать @huggingface/kernels и присоединиться к Fleet, чтобы передавать данные со своего устройства.

Ежедневные новости об ИИ

Каждый день отбираем важные новости об ИИ, роботах и метавселенных и рассказываем главное — без хайпа и воды. Если хотите понимать, что происходит в ИИ раньше остальных, — подписывайтесь.

Только важное — каждый день

В Telegram