Vercel AI открывает исходный код vgpu: библиотека WebGPU на TypeScript для шейдеров ИИ-агентов
Шейдеры по-прежнему остаются самой сложной частью при выпуске продукта в обычной веб-команде. WebGPU предоставляет доступ к аппаратному обеспечению, а затем требует работать с адаптерами, описаниями layout’ов bind group и pipeline до того, как переместится хотя бы один пиксель. Vercel понесла эти затраты внутри компании, создавая шейдеры для vercel.com, и теперь открыла полученный результат. vgpu — это библиотека TypeScript, которая рассматривает файлы .wgsl как импортируемые модули, предоставляет единый контекст Gpu и запускает один и тот же шейдер в canvas браузера, в безголовом Node.js и в CI-тесте снимков.
Можно ли развернуть?
Да, vgpu распространяется по лицензии MIT и опубликована в npm, поэтому pnpm add vgpu — это весь процесс установки. Это библиотека, а не размещённый сервис, поэтому аккаунт, квота или счёт за инференс не требуются.
Единый контекст без скрытого глобального состояния
init() получает адаптер и устройство и возвращает единый дескриптор Gpu. Всё остальное строится вокруг него. Быстрый старт для браузера в README занимает четыре строки:
const gpu = await init();
const surface = gpu.surface(canvas, { dpr: [1, 2] });
const wave = gpu.effect(WAVE_WGSL, { set: { speed: 2 } });
gpu.frame.loop(() => { wave.set({ time: gpu.time }); wave.draw(); });surface оборачивает canvas и ограничивает соотношение пикселей устройства значениями от 1 до 2. effect компилирует WGSL в полноэкранный эффект, униформы которого адресуются по их именам в WGSL через set(). Кадры задаются явно: проходы, очистка и отрисовка являются вызовами, а не неявным состоянием графа сцены.
WGSL как система модулей
Главное отличие — инструменты для работы с шейдерами. Файлы .wgsl импортируют и экспортируют данные так же, как модули TypeScript. vgpu разрешает граф модулей, отражает привязки, удаляет неиспользуемые объявления и генерирует компактный исходный код шейдера во время сборки. Это устраняет необходимость вручную прописывать объявления привязок, которые обычно перестают соответствовать шейдеру. Согласно README, полноценный полноэкранный эффект занимает 25 КБ в сжатом виде, и этот лимит проверяется в CI.
Три среды выполнения, один API
Пакет предоставляет экспорты подмодулей для vgpu, vgpu/node, vgpu/mock, vgpu/scene, vgpu/client и vgpu/core. Путь Node основан на Dawn и выполняет отрисовку вне экрана:
const target = gpu.target({ size: [256, 256], format: "rgba8unorm" });
const pixels = await target.read();Именно это делает рендеринг в CI практичным. pixelmatch и pngjs являются прямыми зависимостями опубликованного пакета, что соответствует описанному рабочему процессу, в котором CI компилирует шейдер, выполняет рендеринг безголового кадра и сравнивает снимок. Адаптер mock детерминирован и предназначен для тестов, которые вообще не должны обращаться к GPU.
Интерфейс для агентов
Vercel называет эту библиотеку ориентированной прежде всего на агентов, и структура пакета это подтверждает. Пакет включает бинарный файл vgpu, поэтому команды npx vgpu docs, npx vgpu examples и npx vgpu check работают без глобальной установки. vgpu.sh публикует agents.md, llms.txt и полный экспорт документации, а также API обнаружения примеров без токена с описанием OpenAPI 3.1. Размещённый MCP-сервер только для чтения доступен по адресу vgpu.sh/api/mcp, а @modelcontextprotocol/server является прямой зависимостью. В репозитории также есть устанавливаемый навык для агента.
Сравнение
Основные выводы
- Vercel открыла исходный код
vgpu— библиотеки WebGPU, созданной для выпуска шейдеров на vercel.com. - Единый API работает в браузере, в безголовом Node.js через Dawn и в детерминированном mock-режиме.
- Файлы
.wgslимпортируют и экспортируют данные так же, как модули TypeScript, с отражением привязок и layout’ов. - Полноценный полноэкранный эффект занимает 25 КБ в сжатом виде — согласно репозиторию, этот лимит проверяется в CI.
- Лицензия MIT, пакет доступен в npm версии v0.3.1, а также предоставляются CLI,
llms.txtи размещённая конечная точка MCP только для чтения.
Посмотрите репозиторий на GitHub, документацию и примеры, а также пакет npm. Также подписывайтесь на нас в Twitter и не забудьте присоединиться к нашему сабреддиту о машинном обучении с более чем 150 тыс. участников и подписаться на нашу рассылку. Стоп! Вы есть в Telegram? Теперь вы также можете присоединиться к нам в Telegram.
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.