WebGPU: समस्या हल करने के लिए सलाह और सुधार

François Beaufort
François Beaufort

यह दस्तावेज़ बताता है कि Chrome ब्राउज़र में WebGPU क्यों काम नहीं कर रहा है या उम्मीद के मुताबिक काम नहीं कर रहा है. साथ ही, जहां संभव हो वहां समस्याओं को हल करने के तरीके भी बताए गए हैं.

यहां दिए गए उदाहरण में, JavaScript से जुड़ी गड़बड़ी दिखाई गई है. यह गड़बड़ी आपको तब मिल सकती है, जब navigator में gpu उपलब्ध न हो:

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

इनमें से किसी एक वजह से ऐसा हो सकता है. इस खास क्रम में उनको देखें:

  1. WebGPU के लिए, Android डिवाइस पर ChromeOS, macOS, Windows, और Chrome 121 या इसके बाद के वर्शन पर Chrome 113 या इसके बाद का वर्शन होना ज़रूरी है. chrome://version पर जाकर, अपना वर्शन देखें और अगर ज़रूरी हो, तो उसे अपडेट करें.

  2. WebGPU को सिर्फ़ सुरक्षित कॉन्टेक्स्ट के लिए ऐक्सेस किया जा सकता है. अगर आपका कोड किसी असुरक्षित प्रोटोकॉल (उदाहरण के लिए, http:, file:) पर दिखाया जाता है, तो सुरक्षित https: प्रोटोकॉल का इस्तेमाल करें या अपने वेब ऐप्लिकेशन को डेवलप करते समय, इनमें से किसी एक तरीके से इसे ठीक करें:

    • अपने कोड को स्थानीय तौर पर http://localhost या http://127.0.0.1 पर, इनमें से किसी एक निर्देश का इस्तेमाल करके इस्तेमाल करें: npx http-server या python3 -m http.server.

    • ऑरिजिन को "सुरक्षित माने गए असुरक्षित ऑरिजिन" में जोड़ें chrome://flags/#unsafely-treat-insecure-origin-as-secure की सूची बनाएं और Chrome को रीस्टार्ट करें.

    • Node.js इंस्टॉल करें और नकली सर्टिफ़िकेट के साथ आपके फ़ोल्डर को एचटीटीपीएस पर चलाने के लिए, npx servez --ssl चलाएं. आपको अब भी Chrome में एक चेतावनी मिलेगी. इसे बायपास करने के लिए, "ऐडवांस सेटिंग" पर क्लिक करें फिर "आगे बढ़ें...".

    • ngrok के साथ अपने स्थानीय वेब सर्वर को इंटरनेट पर प्रदर्शित करें.

जीपीयू अडैप्टर खाली है

यहां JavaScript की गड़बड़ी का एक उदाहरण दिया गया है. यह आपको requestAdapter() को कॉल करने वाले अडैप्टर के शून्य होने पर मिल सकता है:

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)

ऐसा, इनमें से किसी एक वजह से होता है. इस खास क्रम में उनको देखें:

  1. जब उपयोगकर्ता "उपलब्ध होने पर ग्राफ़िक्स एक्सेलरेटर का इस्तेमाल करें" को बंद कर देता है, तब WebGPU बंद हो जाता है chrome://settings/system में. देखें कि क्या यह सेटिंग बंद है और इसे वापस चालू करें

  2. फ़िलहाल, इस प्लैटफ़ॉर्म पर WebGPU की सुविधा उपलब्ध नहीं है. आपके पास chrome://flags/#enable-unsafe-webgpu फ़्लैग को चालू करने और Chrome को रीस्टार्ट करने का विकल्प है. Linux एक्सपेरिमेंट के लिए सहायता के लिए, आपको chrome://flags/#enable-vulkan फ़्लैग को भी चालू करना होगा. ज़्यादा जानने के लिए, हेडलेस Chrome में WebGPU की सुविधा देखें.

  3. जीपीयू हार्डवेयर को खास तौर पर ब्लॉकलिस्ट में शामिल किया गया है. अगर आपको "WebGPU को ब्लॉकलिस्ट या कमांड लाइन के ज़रिए बंद कर दिया गया है" दिखता है, तो chrome://gpu में, chrome://flags/#enable-unsafe-webgpu फ़्लैग को चालू करके और Chrome को रीस्टार्ट करके, WebGPU अडैप्टर की ब्लॉकलिस्ट को बंद किया जा सकता है.

  4. requestAdapter() में पास किए गए विकल्पों के लिए, मिलता-जुलता कोई जीपीयू अडैप्टर नहीं है. अलग-अलग विकल्पों का इस्तेमाल करके, requestAdapter() को कॉल करने की कोशिश करें.

  5. WebGPU के लिए जीपीयू की ज़रूरत होती है, यानी हार्डवेयर या सॉफ़्टवेयर की नकल की गई. Chrome को जीपीयू का पता चलता है या नहीं, यह देखने के लिए chrome://gpu पर जाएं.

WebGPU, WebGL से धीमा है

  1. chrome://gpu खोलें और पक्का करें कि आपको "WebGPU: हार्डवेयर की मदद से तेज़ी से खोला गया" पढ़ा जा सकता है. अगर आपको "WebGPU: सिर्फ़ सॉफ़्टवेयर, हार्डवेयर से तेज़ी लाने की सुविधा उपलब्ध नहीं है" मैसेज दिखता है, तो हो सकता है कि आपको अपने जीपीयू ड्राइवर अपडेट करने पड़ें.

  2. ऐसा हो सकता है कि WebGL के सिद्धांतों का WebGPU में सीधे अनुवाद करने से, WebGPU के खास ऑप्टिमाइज़ेशन का पूरा फ़ायदा न मिले. इनके बीच के अंतर के बारे में जानने के लिए, WebGL से WebGPU तक देखें.

Windows-विशिष्ट सीमाएं

Windows डिवाइसों पर WebGPU का इस्तेमाल करते समय, इन सीमाओं का ध्यान रखें:

  • Chrome में एक साथ एक से ज़्यादा जीपीयू अडैप्टर का इस्तेमाल नहीं किया जा सकता है. Chromium:329211593 से जुड़ी समस्या देखें.

  • Chrome हमेशा उसी जीपीयू अडैप्टर का इस्तेमाल करता है जो Chrome के अन्य वर्कलोड के लिए तय किया गया है. पावर इस्तेमाल करने के पहलू (जैसे: बैटरी की बचत) की वजह से, लैपटॉप के लिए यह आम तौर पर इंटिग्रेट किया गया ग्राफ़िक कार्ड होता है. इसका मतलब है कि requestAdapter() को कॉल करने पर, powerPreference विकल्प का कोई असर नहीं पड़ता.