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

François Beaufort
François Beaufort

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

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

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

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

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

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

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

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

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

    • ngrok की मदद से, अपने लोकल वेब सर्वर को इंटरनेट से कनेक्ट करें.

जीपीयू अडैप्टर की वैल्यू null है

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

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

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

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

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

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

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

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

  6. जीपीयू प्रोसेस कई बार क्रैश हुई. पेज को फिर से लोड करें या Chrome को रीस्टार्ट करें. ज़्यादा जानने के लिए, WebGPU डिवाइस के खो जाने पर डेटा को सुरक्षित रखने के सबसे सही तरीके देखें.

WebGPU, WebGL से धीमा है

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

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

Windows के लिए खास पाबंदियां

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

  • Chrome में एक साथ कई जीपीयू अडैप्टर इस्तेमाल करने की सुविधा उपलब्ध नहीं है. issue chromium:329211593 देखें.

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