spinny:~/writing $ less webgpu-on-device-ai-browser.md
12Протягом багатьох років веб-переглядач був гарним обличчям програми, а хмара була місцем, де відбувалися важкі речі. Користувач пише, клацає, завантажує файл; інтерфейс надсилає все на сервер; сервер викликає модель; відповідь повертається.34Ця схема залишається дуже корисною, але не безкоштовною. Кожен дзвінок викликає запитання щодо затримки, вартості, залежності від мережі та конфіденційності. Якщо користувач пише речення і хоче отримати пропозицію, важить півсекунди. Якщо ви класифікуєте тисячі дрібних вкладень, пенні стають справжніми грошима. Якщо текст конфіденційний, надсилання його з пристрою не є нейтральним вибором.56Ось чому WebGPU та штучний інтелект на пристрої в ажіотажі. Не тому, що завтра ми запускатимемо кожну модель у браузері. Оскільки деякі інтелектуальні функції можуть стати ближчими до користувача.78## Не все має стати локальним910Дитяча версія аргументу: «хмара проти пристрою». Корисна версія – гібридна.1112Деякі завдання чудово виглядають на пристрої: короткі підсумки, визначення мови, легкі переписування, прості класифікації, фільтри зображень, невеликі моделі зору, творчий досвід із миттєвим відгуком.1314Інші завдання залишаються кращими в хмарі: складні міркування, граничні моделі, дані на сервері, централізований аудит, однакова якість, робочий процес, де потрібно ретельно контролювати кожен крок.1516Здорова архітектура вирішує під час виконання:1718```mermaid19flowchart TD20 User[Користувач] --> Browser[Браузери]21 Browser --> Detect[Виявлення ознак]22 Detect -->|Підтримується| Local[Локальний висновок]23 Detect -->|Не підтримується| Cloud[Резервна хмара]24 Local --> UX[Швидка відповідь]25 Cloud --> UX26 UX --> Metrics[Показники та якість]27```2829Браузер не повинен перемагати хмару. Він повинен позбавити хмару виконання роботи, яку там не потрібно виконувати.3031## Чому WebGPU важливий3233WebGPU — це сучасний API для використання GPU з браузера. Це не лише для кращої 3D-графіки. Це також важливо, тому що воно розкриває примітиви, придатні для обчислень: паралельні робочі навантаження, шейдери, конвеєри, ближчі до того, що добре роблять графічні процесори.3435Для ШІ, наукової візуалізації, 3D-редакторів, відеофільтрів і творчих інструментів ця різниця відчувається. WebGL зробив багато для Інтернету, але WebGPU народилася з моделлю, яка краще підходить до сучасності.3637Однак перше, що потрібно написати, це не шейдер. Це тверезе виявлення функції:3839```typescript40export async function requestWebGpuDevice() {41 if (!('gpu' in navigator)) {42 return null;43 }4445 const adapter = await navigator.gpu.requestAdapter({46 powerPreference: 'high-performance',47 });4849 if (!adapter) {50 return null;51 }5253 return adapter.requestDevice();54}55```5657Ця функція говорить про одну важливу річ: WebGPU не надається на кожному пристрої. Це здатність бути перевіреною. Деякі браузери не підтримують його повністю, деякі графічні процесори мають обмеження, деякі корпоративні середовища відключають функції, деякі користувачі використовують скромне обладнання.5859## Вбудований AI: коли браузер виводить модель6061Chrome пропонує вбудовані API для таких завдань, як локальні підказки, узагальнення, написання, переписування, переклад, визначення мови та вичитка. Ідея дуже цікава: браузер керує моделлю, доступністю та оновленнями; додаток використовує API, ближчий до платформи.6263Якщо він працює добре, це багато чого змінює:6465- менше викликів сервера для простих завдань;66- дані, які можуть залишитися на пристрої;67- менша затримка;68- офлайн або напівофлайн;69- Більш природний UX для написання та перекладу.7071Але це слід розглядати як прогресивне вдосконалення. Деякі API стабільні, інші знаходяться в початковій пробній версії або попередньому перегляді, інші все ще залежать від версії, мови та пристрою.7273```typescript74type LocalCapability = 'available' | 'downloadable' | 'unsupported';7576export async function getLocalSummarizerCapability(): Promise<LocalCapability> {77 const SummarizerApi = (globalThis as any).Summarizer;7879 if (!SummarizerApi?.availability) {80 return 'unsupported';81 }8283 const availability = await SummarizerApi.availability();8485 if (availability === 'available') return 'available';86 if (availability === 'downloadable') return 'downloadable';8788 return 'unsupported';89}90```9192Конкретний код зміниться, але шаблон залишиться: ви перевіряєте доступність, пояснюєте будь-які завантаження, пропонуєте запасні варіанти та вимірюваєте якість.9394## Запасний варіант – це не сумний план Б9596Хмарне повернення – це не поразка. Це частина продукту.9798```typescript99interface AiRequest {100 task: 'summarize' | 'rewrite' | 'classify';101 input: string;102}103104interface AiResult {105 output: string;106 runtime: 'local' | 'cloud';107}108109export async function runAiTask(request: AiRequest): Promise<AiResult> {110 const local = await tryLocalAi(request);111112 if (local) {113 return { output: local, runtime: 'local' };114 }115116 const cloud = await fetch('/api/ai', {117 method: 'POST',118 headers: { 'Content-Type': 'application/json' },119 body: JSON.stringify(request),120 }).then((res) => res.json());121122 return { output: cloud.output, runtime: 'cloud' };123}124```125126Ця архітектура дозволяє вам поступово вдосконалюватися. Ті, хто має локальну підтримку, отримують кращу затримку та конфіденційність. Ті, у кого її немає, все одно користуються цією функцією. Ви можете виміряти відсоток локальних запитів, час, помилки, пам’ять, передбачувану якість і вартість.127128Без метрик штучний інтелект на пристрої стає естетичним вибором. З показниками це стає важелем продукту.129130## UX моделі має значення131132Якщо браузеру потрібно завантажити модель, користувач це сприймає. Не ховайте це за розпливчастою прядкою. Краще бути чітким: «Ми готуємо модель для використання цієї функції швидше та навіть у режимі офлайн».133134Хороший досвід:135136- показує стан підготовки;137- не блокує всю сторінку;138- дозволяє продовжити роботу з резервною хмарою;139- уникайте сюрпризів акумулятора та пам'яті;140- по можливості запам'ятати модель;141- поясніть користь одним конкретним реченням.142143Найгірше — це «розумна» функція, яка виглядає несправною, оскільки завантажує щось безшумно.144145## Конфіденційність: краще, не захищено автоматично146147Обробка даних на пристрої може бути великою перевагою. Чернетка електронної пошти, внутрішній документ або особиста нотатка не повинні залишати ваш браузер, щоб отримати пропозицію.148149Однак локальне не означає автоматично безпечне. Однак потрібно подумати про:150151- XSS;152- випадкові журнали;153- дані, збережені в сховищі;154- оперативне введення з ненадійного вмісту;155- дозволи, надані моделі;156- виходи, що використовуються в автоматичних діях.157158Якщо локальна модель може прочитати веб-сторінку, а потім заповнити форму, ця сторінка може спробувати маніпулювати нею. Якщо він може викликати інструмент, потрібне підтвердження. Якщо він дає структурований вихід, його потрібно перевірити. Той факт, що він працює на пристрої, зменшує деякі ризики конфіденційності, але не скасовує модель безпеки.159160## Де стає справді цікаво161162Текст це лише початок. WebGPU робить веб-досвід достовірним, що донедавна здавалося рідною програмою:163164- складні 3D редактори;165- Гауссовий сплетінг у браузері;166- відеофільтри в реальному часі;167- Легка CAD;168- наукові візуалізації;169- творчі інструменти з миттєвим попереднім переглядом;170- візуальний висновок поблизу UI;171- більш амбітні браузерні ігри.172173Тут інтерфейс, графіка та машинне навчання починають змішуватися. Це дещо незручна область, але водночас і плідна: браузер повертається до ролі серйозної платформи додатків, а не просто місця, де ми розміщуємо форми та інформаційні панелі.174175## Контрольний список перед виробництвом176177Перш ніж розмістити функцію на пристрої перед користувачами, я б перевірив:1781791. Цільові браузери та пристрої.1802. Резервна хмара або елегантна деградація.1813. Час завантаження та кеш моделі.1824. Пам'ять і батарея на середньому апаратному рівні.1835. Якість порівняно з хмарною версією.1846. Політика конфіденційності та повідомлення користувачів.1857. Тестування з ворожими введеннями.1868. Окремі показники для локального та хмарного середовища виконання.1879. Плануйте оновити або вимкнути шаблон.188189Це конкретний список, тому що проблема конкретна. Повільна, крихка або непрозора функція ШІ не стає кращою лише тому, що вона працює у браузері.190191## Правильний компроміс192193Я не вірю, що майбутнє – це «все на пристрої». І я також не думаю, що хмара залишиться єдиним розумним місцем для висновків. Найвірогідніше майбутнє – це суміш: локальна, коли це покращує затримку, конфіденційність або вартість; хмара, коли потрібна якість, оновлені дані та централізований контроль.194195WebGPU, WebNN і вбудовані API AI не роблять браузер всемогутнім. Вони роблять його більш дорослим. А для тих, хто створює веб-продукти, це чудова новина.196197## Корисні джерела198199- [WebGPU API - MDN](https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API)200- [Специфікація WebGPU - W3C](https://www.w3.org/TR/webgpu/)201- [Вбудований AI - Chrome для розробників](https://developer.chrome.com/docs/ai/built-in)202- [Вбудовані API AI - Chrome для розробників](https://developer.chrome.com/docs/ai/built-in-apis)203- [API WebNN](https://webnn.io/)204
:WebGPU та AI на пристрої: браузер стає серйозним середовищем виконанняlines 1-204 (END) — press q to close