spinny:~/writing $ less webgpu-on-device-ai-browser.md
12במשך שנים הדפדפן היה הפנים הנחמדות של האפליקציה והענן היה המקום שבו התרחשו הדברים הקשים. המשתמש כותב, לוחץ, מעלה קובץ; ה-frontend שולח הכל לשרת; השרת קורא למודל; התשובה חוזרת.34תכנית זו נשארת שימושית מאוד, אך היא אינה חינמית. כל שיחה מביאה שאלות חביון, עלות, תלות ברשת ופרטיות. אם המשתמש כותב משפט ורוצה הצעה, חצי שניה שוקלת. אם אתה מסווג אלפי תשומות קטנות, אגורות הופכות לכסף אמיתי. אם הטקסט רגיש, שליחתו מהמכשיר אינה בחירה ניטרלית.56זו הסיבה ש-WebGPU ו-AI במכשיר נמצאים בהייפ. לא בגלל שנפעיל מחר כל דגם בדפדפן. מכיוון שחלק מהתכונות החכמות יכולות להתקרב למשתמש.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 מהדפדפן. זה לא מיועד רק לגרפיקה תלת מימדית יפה יותר. זה חשוב גם כי הוא חושף פרימיטיביים המתאימים למחשוב: עומסי עבודה מקבילים, הצללות, צינורות קרובים יותר למה שמעבדי GPU עושים טוב.3435עבור AI, הדמיה מדעית, עורכי תלת מימד, מסנני וידאו וכלים יצירתיים, ההבדל הזה מורגש. 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 אינה זכות המוענקת בכל מכשיר. זו יכולת לאימות. חלק מהדפדפנים לא תומכים בזה באופן מלא, לחלק מה-GPUs יש מגבלות, חלק מהסביבות הארגוניות משביתות תכונות, חלק מהמשתמשים משתמשים בחומרה צנועה.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ללא מדדים, AI במכשיר הופך לבחירה אסתטית. עם מדדים, זה הופך למנוף מוצר.129130## ה-UX של הדגם חשוב131132אם הדפדפן צריך להוריד דגם, המשתמש קולט אותו. אל תסתיר את זה מאחורי ספינר מעורפל. מוטב שיהיה ברור: "אנחנו מכינים את המודל להשתמש בפונקציה הזו מהר יותר ואפילו במצב לא מקוון."133134חוויה טובה:135136- מראה את מצב ההכנה;137- אינו חוסם את כל העמוד;138- מאפשר לך להמשיך ב-fallback בענן;139- הימנע מהפתעות סוללה וזיכרון;140- זכור את הדגם בכל פעם שאפשר;141- להסביר את התועלת במשפט אחד קונקרטי.142143הדבר הגרוע ביותר הוא תכונה "חכמה" שנראית שבורה כי היא מורידה משהו בשקט.144145## פרטיות: טוב יותר, לא מאובטח אוטומטית146147עיבוד נתונים במכשיר יכול להיות יתרון גדול. טיוטת דוא"ל, מסמך פנימי או הערה אישית לא חייבת לצאת מהדפדפן שלך כדי לקבל הצעה.148149עם זאת, מקומי לא אומר אוטומטית בטוח. עם זאת, אתה צריך לחשוב על:150151- XSS;152- יומנים מקריים;153- נתונים שנשמרו באחסון;154- הזרקה מהירה מתוכן לא מהימן;155- הרשאות שניתנו לדגם;156- פלטים המשמשים בפעולות אוטומטיות.157158אם מודל מקומי יכול לקרוא דף אינטרנט ולאחר מכן למלא טופס, דף זה יכול לנסות לתמרן אותו. אם הוא יכול להתקשר לכלי, יש צורך באישור. אם הוא מייצר פלט מובנה, יש לאמת אותו. העובדה שהוא פועל על המכשיר מפחיתה כמה סיכוני פרטיות, אך לא מבטלת את מודל האבטחה.159160## איפה זה נהיה ממש מעניין161162הטקסט הוא רק ההתחלה. WebGPU הופך חוויות אינטרנט לאמינות שעד לאחרונה נראו כמו אפליקציה מקורית:163164- עורכי תלת מימד מורכבים;165- התזת גאוס בדפדפן;166- מסנני וידאו בזמן אמת;167- CAD קל משקל;168- הדמיות מדעיות;169- כלים יצירתיים עם תצוגה מקדימה מיידית;170- מסקנות ראייה ליד ממשק המשתמש;171- משחקי דפדפן שאפתניים יותר.172173כאן מתחילים להתערבב חזיתות, גרפיקה ולמידת מכונה. זה תחום קצת מביך, אבל גם פורה: הדפדפן חוזר להיות פלטפורמת אפליקציות רצינית, לא רק המקום שבו אנחנו שמים טפסים ודשבורדים.174175## רשימת תיוג לפני הייצור176177לפני שמציגים תכונה במכשיר בפני המשתמשים, הייתי בודק:1781791. מקד לדפדפנים ומכשירים.1802. ניצול ענן או השפלה אלגנטית.1813. הורדת מטמון זמן ודגם.1824. זיכרון וסוללה בחומרה ממוצעת.1835. איכות בהשוואה לגרסת הענן.1846. מדיניות פרטיות והודעות משתמשים.1857. בדיקה עם תשומות עוינות.1868. מדדים נפרדים עבור זמן ריצה מקומי וענן.1879. תכנן לעדכן או להשבית את התבנית.188189זו רשימה קונקרטית כי הבעיה היא קונקרטית. תכונת AI איטית, שבירה או אטומה לא הופכת לטובה יותר רק בגלל שהיא פועלת בדפדפן.190191## הפשרה הנכונה192193אני לא מאמין שהעתיד הוא "הכל במכשיר". ואני גם לא חושב שהענן יישאר המקום הסביר היחיד להסקת מסקנות. העתיד הסביר ביותר הוא שילוב: מקומי כאשר הוא משפר את השהייה, הפרטיות או העלות; ענן כאשר יש צורך באיכות, נתונים מעודכנים ובקרה מרכזית.194195WebGPU, WebNN וממשקי 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 מובנה - כרום למפתחים](https://developer.chrome.com/docs/ai/built-in)202- [ממשקי API מובנים של AI - Chrome למפתחים](https://developer.chrome.com/docs/ai/built-in-apis)203- [WebNN API](https://webnn.io/)204
:WebGPU ובינה מלאכותית במכשיר: הדפדפן הופך לזמן ריצה רציניlines 1-204 (END) — press q to close