- WebGPU को लंबे विकास के बाद Firefox 141 Windows संस्करण में आधिकारिक समर्थन मिल गया है
- WebGPU आधुनिक ग्राफिक्स प्रोसेसिंग और हाई-परफॉर्मेंस कंप्यूटिंग के लिए एक वेब-आधारित GPU इंटरफेस है, जिससे गेम, विज़ुअलाइज़ेशन और लोकल कंप्यूट का स्तर काफी बढ़ने की उम्मीद है
- Firefox का WebGPU इम्प्लीमेंटेशन Rust-आधारित WGPU लाइब्रेरी पर बनाया गया है और Direct3D 12, Metal, Vulkan जैसे कई बैकएंड्स को सपोर्ट करता है
- फिलहाल यह केवल Windows पर आधिकारिक रूप से सक्षम है, जबकि Mac, Linux और Android सपोर्ट बाद में आने वाला है
- अभी भी परफॉर्मेंस सुधार और स्टैंडर्ड अनुपालन जैसे कुछ अतिरिक्त विकास कार्य बाकी हैं
Windows पर WebGPU सपोर्ट का महत्व
- लंबे समय से विकसित किया जा रहा WebGPU अब Firefox 141 में Windows वातावरण पर आधिकारिक रूप से शामिल हो गया है
- WebGPU एक आधुनिक स्टैंडर्ड है जो वेब कंटेंट को यूज़र GPU के साथ सीधे जुड़कर हाई-परफॉर्मेंस ग्राफिक्स और पैरलल कंप्यूट लागू करने देता है
- इस तकनीक के चलते वेब-आधारित गेम, डेटा विज़ुअलाइज़ेशन, मशीन लर्निंग जैसे कई क्षेत्रों में परफॉर्मेंस की सीमाएँ काफी आगे बढ़ने की संभावना है
- WebGPU ट्यूटोरियल, WebGPU सैंपल, MDN दस्तावेज़ के माध्यम से इससे जुड़ी सीख और प्रैक्टिस की जा सकती है
- WebGPU को WebGPU W3C स्टैंडर्ड और WGSL स्टैंडर्ड में परिभाषित किया गया है, और Mozilla 2017 से स्टैंडर्डाइज़ेशन प्रक्रिया में सक्रिय रूप से भाग लेता रहा है
अलग-अलग ब्राउज़रों में WebGPU की स्थिति
- Chrome में WebGPU सपोर्ट पहले ही 2023 से उपलब्ध है
- Safari 26 में यह इस साल शरद ऋतु में आने वाला है
- Firefox 141 फिलहाल केवल Windows को आधिकारिक रूप से सपोर्ट करता है, जबकि Mac/Linux/Android को भविष्य के अपडेट्स में शामिल किया जाएगा
- Firefox Nightly संस्करण में अब तक Android को छोड़कर सभी प्लेटफॉर्म्स पर इसे प्रयोगात्मक रूप से इस्तेमाल किया जा सकता था
Firefox का WebGPU इम्प्लीमेंटेशन
- Firefox का WebGPU ओपन सोर्स Rust लाइब्रेरी WGPU पर आधारित है
- WGPU अलग-अलग प्लेटफॉर्म हार्डवेयर के अनुसार Direct3D 12, Metal, Vulkan जैसे लो-लेवल ग्राफिक्स API से जुड़ता है
- Mozilla WGPU प्रोजेक्ट का एक प्रमुख योगदानकर्ता है
- अगर आप Rust डेवलपर हैं, तो Firefox WebGPU में योगदान देने के लिए WGPU प्रोजेक्ट से शुरुआत करना उपयुक्त होगा
- WGPU का इस्तेमाल Firefox के बाहर भी व्यापक रूप से होता है और इसका एक सक्रिय कम्युनिटी भी है
प्रमुख चुनौतियाँ और सुधार कार्य
- WebGPU एक बड़ा और जटिल API है, इसलिए अभी तक स्थिरता पर मुख्य रूप से बड़े डेमो और वास्तविक उपयोग मामलों के आधार पर ध्यान दिया गया है
- वे क्षेत्र जिनमें अतिरिक्त सुधार की ज़रूरत है:
- GPU सैंडबॉक्स प्रोसेस के साथ अनबफर्ड IPC के कारण होने वाली परफॉर्मेंस गिरावट का समाधान (बग 1968122, Firefox 142 में परफॉर्मेंस सुधार की योजना)
- GPU कार्य पूर्ण होने का पता केवल इंटरवल टाइमर से लगाने के कारण बढ़ने वाली प्रतीक्षा अवधि (बग 1870699, बेहतर तरीके पर काम चल रहा है)
- importExternalTexture सपोर्ट न होने के कारण डिकोडर से GPU तक वीडियो डेटा को सीधे पढ़ पाना संभव नहीं है (बग 1827116, विकास जारी है)
- यदि वास्तविक उपयोग में समस्या आती है, तो Bugzilla के WebGPU component में विस्तृत जानकारी के साथ रिपोर्ट करना आवश्यक है
आगे की योजना
- Windows के बाद Mac, Linux, Android पर क्रमशः आधिकारिक सपोर्ट बढ़ाया जाएगा
- परफॉर्मेंस, कम्पैटिबिलिटी, स्टैंडर्ड अनुपालन में लगातार सुधार की योजना है
- WebGPU के आधिकारिक समर्थन से वेब एप्लिकेशन की नई संभावनाएँ खुलने की उम्मीद है
1 टिप्पणियां
Hacker News की राय
यह सच में बहुत उत्साहजनक खबर है, Firefox टीम को बधाई
मेरी कंपनी ब्राउज़र में Unreal चलाने पर काम कर रही है, और हमने Unreal Engine 5 के लिए कस्टम WebGPU RHI बनाया है
जो लोग टेक डेमो खुद देखना चाहते हैं, वे नीचे दिए गए लिंक देखें
(यह केवल डेस्कटॉप के Chromium-आधारित ब्राउज़रों और कुछ Android फ़ोनों पर काम करता है)
Cropout: https://play-dev.simplystream.com/?token=aa91857c-ab14-4c24-963a-36203784474b
Car configurator: https://garage.cjponyparts.com/
मैंने Firefox 142 (nightly) में इसे टेस्ट किया
Cropout लंबे समय तक 0% पर अटका रहा और 1200 से ज़्यादा नेटवर्क रिक्वेस्ट हुईं
आखिरकार यह मेन्यू तक लोड हुआ, लेकिन बैकग्राउंड काला था और केवल UI एलिमेंट दिखे
shader parsing के दौरान बहुत सी errors आईं, और अन्य errors भी थीं
Car configurator कई errors के साथ 0% पर अटक गया और लोड नहीं हुआ
"Game files required to initialize global shaders and content are missing" संदेश दिखा
अच्छा होता अगर Firefox पर कम से कम बुनियादी टेस्ट करके इसे साझा किया जाता
आपने कहा है कि यह "केवल Chromium-आधारित ब्राउज़रों पर काम करता है", लेकिन यह पोस्ट तो Firefox के WebGPU के बारे में है,
इसलिए जानना चाहता हूँ कि क्या आप Firefox-संगत वर्ज़न को टेस्ट करने या रिलीज़ करने की योजना रखते हैं
Pixel 7a पर Android Chrome में "cropout" चलाने की कोशिश की, लेकिन यह 0% पर अटक गया
"car configurator" 97~98% तक जाता है, लेकिन उसके बाद आगे नहीं बढ़ता
क्या यह Firefox 141 वाले Windows पर काम करता है?
अगर नहीं, तो उसका कारण जानना चाहूँगा
macOS के Google Chrome में पहला लिंक 0% पर अटका रहा और आगे नहीं बढ़ा,
दूसरा डेमो 98% या 97% पर अटक गया
Safari में भी वही हुआ
इस समय graphics API की स्थिति देखकर लगता है कि हम OpenGL युग से भी पीछे चले गए हैं
मुझे नहीं लगता कि आधुनिक APIs उपयोग में आसानी या असली portability, cross-platform support ठीक से दे पा रही हैं
Vulkan, Metal, DirectX12 जैसे अलग-अलग graphics backends के लिए कस्टम wrappers बनाना लगभग समय की बर्बादी जैसा है
यह कुछ वैसा है जैसे performance के लिए strings छोड़कर फिर से char arrays पर लौट जाना
मुझे नहीं पता कि किसने क्या वादा किया था
graphics API का उद्देश्य हमेशा GPU तक code और data को जितनी जल्दी हो सके पहुँचाना रहा है, developer experience प्राथमिकता नहीं था
WebGPU ब्राउज़र के भीतर compute और render को काफ़ी अच्छे ढंग से wrap करता है
यह अभी परफेक्ट नहीं है, लेकिन मुझे WebGL या OpenGL की तुलना में अधिक intuitive और discoverable लगता है
मुझे समस्या ठीक से समझ नहीं आ रही
graphics stack में low-level APIs बहुत पहले से मौजूद हैं (उदाहरण: Mesa का Gallium), अब वे standardize हो गए हैं और users उन्हें सीधे चुनते हैं
high-level APIs अब भी मौजूद हैं, और OpenGL भी उचित platforms पर supported है
WebGPU को native code में भी काफ़ी उपयोगी पाया है
इन low-level APIs में असली portability की कमी लगभग पूरी तरह Apple और console manufacturers की वजह से है
हालाँकि console manufacturers से तो वैसे भी सहयोग की उम्मीद नहीं थी
OpenGL युग से मिला सबक यह है कि हर platform पर एक ही high-level API होना ज़रूरी नहीं कि अच्छे नतीजे दे
असल बात यह है कि क्या उस platform के hardware को अच्छी तरह control करने वाला API मौजूद है
OpenGL को सीधे translate करने वाले wrappers हमेशा चाहिए थे, और पहले इनके बिना बचने का कोई रास्ता नहीं था
हर hardware type के लिए सर्वोत्तम परिणाम देने वाला तरीका व्यावहारिक नहीं है
असली महत्व आसान translation layer उपलब्ध कराने में है
और अगर आप सच में hardware के बहुत करीब जाना चाहते हैं, तो simple या generic interface के बजाय ऐसा API चाहिए जो hardware तक सीधे पहुँच दे
OpenGL 2.0 के बाद API बहुत जटिल हो गया था, और WebGPU, Vk, D3D12, Metal की सुविधाओं को काफ़ी सुविधाजनक तरीके से wrap करता है
मुझे लगता है यह OpenGL से कहीं बेहतर डिज़ाइन किया गया है
अलग से देखें तो D3D11 और Metalv1 शायद usability और performance के बीच सबसे अच्छा संतुलन हैं (खासकर D3D11 की performance को Vulkan और D3D12 में भी पकड़ना मुश्किल है)
मैं भी सहमत हूँ
मैं OpenGL और CUDA interop के साथ ही विकास जारी रखूँगा
Vulkan इतना overengineered और जटिल है, जबकि वास्तविक उपयोग में फ़ायदा बहुत कम है, इसलिए अंततः मैंने CUDA का सहारा लिया
मैं अब भी उम्मीद करता हूँ कि WebGPU ब्राउज़र के बाहर भी सफलतापूर्वक फैले
और आधिकारिक spec के तहत एक आसान, cross-platform API बने (यानी OpenGL का विकल्प)
लेकिन Rust इकोसिस्टम को छोड़ दें तो native code में WebGPU अपनाने की बहुत बड़ी लहर नहीं दिखती
उदाहरण के लिए, Dawn का उपयोग करने वाले बड़े projects के बारे में मैंने नहीं सुना
शायद इसकी एक वजह यह भी है कि WebGPU बहुत देर से आया, और तब तक अधिकतर लोग dx, vulkan, metal के ऊपर अपनी abstraction layers बना चुके थे
अंत में मुझे नहीं लगता कि यह व्यापक रूप से फैलेगा
थोड़ी simplicity है, लेकिन features भी काफ़ी कम हैं
Vulkan में optional हो चुकी कुछ चीज़ें (जैसे render pass) WebGPU में अब भी अनिवार्य हैं
bind groups स्थिर हैं, जिससे उल्टा असुविधा होती है
और WebGPU में कई सीमाएँ और अनावश्यक चीज़ें हैं
उदाहरण के लिए, host से सीधे buffer subregion में नहीं लिख सकते, staging buffer का इस्तेमाल ज़रूरी है
विकल्प न होने के कारण वेब पर इसका उपयोग करूँगा, लेकिन डेस्कटॉप पर OpenGL+CUDA interop framework के साथ ही आगे बढ़ूँगा
मैं अब भी किसी अधिक तर्कसंगत आधुनिक graphics API की उम्मीद करता हूँ
अगर कोई काम सिर्फ cuMemAlloc और cuMemcpy से हो सकता है, तो मैं उसे जटिल buffer allocation और binding, pipeline, explicit sync, binding groups, descriptor sets जैसी अनावश्यक चीज़ों से भरा हुआ नहीं देखना चाहता
WebGPU, Vulkan जितनी optimization और fine-grained control नहीं देता, और आम तौर पर उतनी performance भी नहीं मिलती
Vulkan में मौजूद कई extensions अभी WebGPU में supported नहीं हैं
middleware पहले से मौजूद है
ब्राउज़र के बाहर WebGPU का इंतज़ार करने की मुझे ज़रूरत नहीं लगती
आखिरकार यह API design मूल रूप से browser sandbox पर केंद्रित है, और उसी से कई सीमाएँ आती हैं
मुझे लगता है नाम भी एक बड़ी समस्या थी
मैं शुद्ध native developer हूँ, इसलिए कई सालों तक मैंने "web gpu" नाम देखकर इसे केवल वेब-विशेष तकनीक समझकर नज़रअंदाज़ किया, लेकिन बाद में पता चला कि वह गलतफ़हमी थी
मुझे बहुत खुशी है कि हमारा gpu-allocator https://github.com/Traverse-Research/gpu-allocator/ crate अब कहीं ज़्यादा लोगों तक पहुँचेगा
अभी तक इसका उपयोग wgpu के dx12 backend या हमारे अपने gpu benchmark product evolve https://www.evolvebenchmark.com/ में किया गया था
अब उम्मीद है कि इसका उपयोग और व्यापक होगा
मुझे अभी पता चला कि macOS के Firefox Nightly में WebGPU पहले से इस्तेमाल किया जा सकता है
https://www.mozilla.org/en-US/firefox/channel/desktop/ से Mac के लिए nightly डाउनलोड करके
https://huggingface.co/spaces/reach-vb/github-issue-generator-webgpu डेमो चलाया, और यह ठीक से काम किया
यह डेमो SmolLM2 मॉडल को WebAssembly में compile करके structured data extraction के लिए उपयोग करता है
पहले मुझे लगता था कि यह केवल Chrome में काम करता है, लेकिन Firefox Stable में "WebGPU is not supported" error आती है
macOS support जल्द ही आधिकारिक रूप से उपलब्ध कराया जाएगा
Windows के अलावा जल्द ही Mac, Linux, और अंत में Android पर भी WebGPU support देने की योजना है
"Mac, Linux, और अंत में Android पर WebGPU support देने की योजना" सुनकर अच्छा लगा
लेकिन अभी बहुत ज़्यादा उम्मीद करना कठिन है
मेरा मानना है कि Linux browsers में WebGPU support अब तक इसलिए नहीं आ पाया क्योंकि नया attack surface जोड़ना बहुत कठिन है
यही जटिलता दिखाती है कि web standards कितने विशाल हो चुके हैं और browser development को कितना कठिन बना देते हैं
Netscape के दौर से चली आ रही design choices का असर आज भी बना हुआ है, और शायद यही browser monoculture, funding समस्याओं जैसी चिंताओं की जड़ है
Android/Linux, WebOS/Linux, ChromeOS/Linux में WebGPU पहले से supported है
हालाँकि यह भी दिखाता है कि GNU/Linux पर ऐसे workloads के लिए support browser vendors की प्राथमिकता में नीचे है
Linux implementation का भी इंतज़ार है
जानना चाहता हूँ कि WebGPU आने के बाद आज़माने लायक कौन से demos हैं
सबसे प्रभावशाली demos में से एक था
https://github.com/ArthurBrussee/brush
यह WebGPU-आधारित Gaussian splatting training और rendering है
कुछ Unity-आधारित demos भी साझा कर रहा हूँ
ज़्यादातर demo sites वेब डेमो के रूप में हैं
मुझे व्यक्तिगत रूप से Compute Toys https://compute.toys/ पसंद है
इसमें Shadertoy-स्टाइल WebGPU compute shader प्रयोग किए जा सकते हैं
और भी कई demos यहाँ मिलेंगे: https://github.com/mikbry/awesome-webgpu
खुद प्रयोग करने के लिए यह project भी है: https://github.com/s-macke/WebGPU-Lab
Bevy engine के examples, WebGL और WebGPU दोनों में उपलब्ध हैं
तुलना करके सीखने के लिए उपयोगी हैं
संदर्भ लिंक: https://bevy.org/examples-webgpu/, https://bevy.org/examples
एक काफ़ी प्रभावशाली डेमो के रूप में https://huggingface.co/spaces/webml-community/kokoro-webgpu साझा करना चाहूँगा
यह WebGPU के बिना भी काम करता है, लेकिन बहुत धीमा हो जाता है
लगता है Firefox, Chrome से पहले Linux में WebGPU support दे देगा
dawn (Google का webgpu implementation) Linux पर काफ़ी अच्छी तरह काम करता है, फिर भी Firefox उससे पहले support ला रहा है
आखिरकार WebGPU support शुरू हो गया, इसके लिए सबको बधाई
Chrome में ही WebGPU के साथ प्रयोग करना थोड़ा असहज लगता था
Safari ने भी हाल की preview versions में support शुरू कर दिया है
मैं अपने मुख्य project में लगभग 2 साल से wgpu का उपयोग कर रहा हूँ
इस WebGPU विस्तार की वजह से उम्मीद है कि maintainers की संख्या बढ़ेगी
और 18 महीने पहले उठाए गए issues अब जल्दी सुलझेंगे
मैंने अभी तक Rust को हाथ नहीं लगाया है, लेकिन उम्मीद है कि कभी मुझे खुद योगदान देने की प्रेरणा और समय मिलेगा
मैं wgpu-native bindings पर निर्भर हूँ, लेकिन updates धीरे पहुँचते हैं
उदाहरण के लिए, पिछले हफ़्ते ही v25 मिला, जबकि कुछ ही दिन पहले v26 आ चुका है