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 को सर्विस वर्कर या शेयर किए गए वर्कर से ऐक्सेस नहीं किया जा सकता. अगर किसी सर्विस वर्कर या शेयर किए गए वर्कर का इस्तेमाल किया जा रहा है, तो अपने WebGPU कोड को, खास तौर पर काम करने वाले वर्कर या ग्लोबल विंडो कॉन्टेक्स्ट में ले जाएं.

  3. 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. जब उपयोगकर्ता chrome://settings/system में "उपलब्ध होने पर ग्राफ़िक से जुड़ी रफ़्तार का इस्तेमाल करें" को बंद करता है, तब WebGPU बंद हो जाता है. देखें कि यह सेटिंग बंद है या नहीं. इसके बाद, उसे फिर से चालू करें

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

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

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

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

WebGPU, WebGL से धीमा है

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

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

Windows के लिए खास सीमाएं

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

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

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