Hugging Face выпустила 207 ядер WebGPU для браузерного ИИ
Hugging Face выпустила @huggingface/kernels — легковесную JavaScript-библиотеку, предназначенную для загрузки и выполнения оптимизированных операций WebGPU непосредственно из репозиториев на Hugging Face Hub. На момент запуска представлен первоначальный каталог из 207 ядер, опубликованных в виде отдельных репозиториев организации webgpu-kernels. Коллекция распространяется по лицензии Apache 2.0 и охватывает операции, используемые во многих архитектурах машинного обучения, включая умножение матриц, нормализацию, свёртку, примитивы механизма внимания, квантование, поэлементные арифметические операции и преобразования компоновки тензоров.
В проекте каждое GPU-ядро рассматривается как полноценный версионируемый программный пакет, а не как отдельный файл шейдера. Каждый репозиторий объединяет формальный интерфейс операции, параметризованные шаблоны шейдеров WGSL, тесты с ожидаемыми результатами, наборы задач для бенчмаркинга, сведения о происхождении и практические инструкции по использованию. Такая упаковка призвана сделать низкоуровневые компоненты браузерного инференса доступными для поиска и изучения, воспроизводимыми и безопасными для загрузки по явно указанной версии — вместо использования URL без версионирования, содержимое которого может измениться.
WebGPU предоставляет современным браузерам переносимый программный интерфейс для доступа к графическим процессорам, а WGSL служит общим языком шейдеров, на котором описываются вычисления, выполняемые этими процессорами. Модель машинного обучения, работающая локально в браузере, в конечном счёте преобразуется в последовательность таких GPU-операций. Поэтому скорость всей модели в значительной степени зависит от качества отдельных ядер, выбранных средой выполнения.
Одна лишь переносимость не гарантирует высокой производительности. Два шейдера могут корректно вычислять один и тот же результат, но работать с совершенно разной скоростью на разных ускорителях. На производительность могут влиять количество объединённых в группу потоков, способ обращения к памяти, векторизация, числовые типы данных и объединение нескольких операций в одном шейдере. Оптимальная реализация также может меняться в зависимости от формы тензора, модели GPU, операционной системы, браузера, драйвера или возможностей WebGPU, доступных на конкретном устройстве.
Публикуя ядра независимо друг от друга, Hugging Face стремится совершенствовать этот фундаментальный слой, не вынуждая высокоуровневые фреймворки инференса изменять свои контракты. Среды выполнения могут продолжать запускать известную операцию, пока авторы ядер тестируют новые варианты, настраивают поведение для конкретного оборудования и сопоставляют результаты со стабильными требованиями к корректности. Репозитории также могут служить понятными эталонными реализациями для разработчиков, которые пишут собственные шейдеры WebGPU или добавляют аналогичные операции в свои движки инференса.
Для каждого ядра предусмотрена отдельная карточка с описанием его семантики, входных и выходных данных, атрибутов, поддерживаемых типов данных, файлов реализации и исполняемого примера с использованием @huggingface/kernels. Например, упомянутое ядро ai.onnx.Add выполняет поэлементное сложение с многонаправленным broadcasting. Хотя сложение — базовая операция нейронных сетей, оно встречается в распространённых конструкциях, таких как остаточные соединения и добавление смещения. В документации определены оба входа, объясняется, как рассчитывается форма выходного тензора после broadcasting, перечислены поддерживаемые типы и указаны варианты, подходящие для разных устройств или форм входных данных.
В основе репозитория лежит стандартизированная структура, ориентированная на доказательность. manifest.json является основным контрактом и определяет входные и выходные данные, атрибуты, ограничения типов и правила вычисления форм. metadata.json содержит идентификатор ядра, дайджесты содержимого и сведения о происхождении. test.json предоставляет тестовые случаи для проверки корректности с описанием ожидаемого поведения, а bench.json содержит репрезентативные нагрузки для бенчмаркинга и настройки. Параметризованные файлы с расширением .wgsl.jinja генерируют конкретный шейдер WGSL для определённого запроса на операцию и целевого устройства. В совокупности эти файлы позволяют понять и оценить реализацию, не заставляя каждого пользователя изучать исходный код шейдера.
JavaScript-загрузчик связывает приложение с этими артефактами на Hub. Разработчик вызывает getKernel, передавая идентификатор репозитория и версию контракта, получает исполняемую функцию, а затем вызывает её с типизированными входными значениями и формами тензоров. Браузер должен поддерживать WebGPU, доступность которого зависит от браузера, операционной системы, GPU и драйвера; приложение может выполнить базовую проверку доступности, установив, существует ли свойство gpu у объекта navigator.
Hugging Face также запускает Fleet — полностью работающий в браузере комплекс для бенчмаркинга и тестирования, который оценивает ядра на GPU самого пользователя. Он показывает результаты для конкретного компьютера и одновременно позволяет собирать данные на гораздо более широком спектре оборудования, чем способна охватить обычная внутренняя испытательная лаборатория. С согласия пользователя Fleet передаёт обезличенные данные о корректности и производительности, которые помогают выявлять неверные результаты, исключительно медленные конфигурации и недостатки, характерные для конкретных устройств.
Эти данные, собранные при участии сообщества, призваны направлять разработку более совершенных вариантов ядер и помогать принимать более надёжные решения по оптимизации в реальных системах. Поскольку самый быстрый шейдер может различаться в зависимости как от оборудования, так и от рабочей нагрузки, измерения из разных браузеров и GPU способны выявить случаи, которые иначе остались бы незамеченными. Сочетание стабильных контрактов, воспроизводимых тестов, опубликованных бенчмарков, версионируемых артефактов и измерений сообщества предоставляет браузерным средам выполнения ИИ общий слой, на основе которого они могут создавать более быстрый и надёжный локальный инференс.
Почему это важно
- —Версионируемый каталог ядер предоставляет средам выполнения браузерного ИИ общую, тестируемую основу для ускорения локального инференса.
- —Fleet позволяет выявлять проблемы с корректностью и производительностью на более широком спектре реальных GPU, чем можно протестировать в обычной лаборатории.
- —Репозитории под лицензией Apache-2.0 содержат многократно используемые реализации и документацию для разработчиков сред выполнения WebGPU и собственных ядер.
Ключевые факты
- Первый выпуск содержит 207 ядер WebGPU, каждое из которых опубликовано в отдельном репозитории Hugging Face Hub.
- @huggingface/kernels — это минималистичный загрузчик JavaScript, который получает, подготавливает и выполняет версионируемые ядра из Hub.
- Каждый пакет включает формальный манифест, метаданные о происхождении, тестовые сценарии корректности, рабочие нагрузки для бенчмарков и параметризованные шаблоны WGSL.
- Fleet тестирует производительность ядер непосредственно в браузере и с согласия пользователя передаёт обезличенные данные об их производительности и корректности на оборудовании пользователя.
- Коллекция выпущена под лицензией Apache 2.0 и требует браузерной среды с поддержкой WebGPU.
Полный текст — в первоисточнике. Здесь — краткое изложение и ключевые факты.