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 विकल्प का कोई असर नहीं पड़ता.