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

François Beaufort
François Beaufort

पब्लिश करने की तारीख: 7 फ़रवरी, 2024, पिछली बार अपडेट किए जाने की तारीख: 17 अक्टूबर, 2025

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

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

    • इनमें से किसी एक कमांड का इस्तेमाल करके, अपने कोड को स्थानीय तौर पर 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 इंस्टॉल करें और फ़र्ज़ी सर्टिफ़िकेट के साथ https पर अपना फ़ोल्डर दिखाने के लिए, 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 फ़्लैग भी चालू करना होगा. ज़्यादा जानने के लिए, Headless Chrome में WebGPU की सुविधा लेख पढ़ें.

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

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

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

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

WebGPU, WebGL से ज़्यादा धीमा है

  1. chrome://gpu खोलें और पक्का करें कि आपको "WebGPU: Hardware accelerated" दिख रहा हो. अगर आपको "WebGPU: Software only, hardware acceleration unavailable" दिखता है, तो हो सकता है कि आपको अपने जीपीयू ड्राइवर अपडेट करने पड़ें.

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

Windows के लिए खास तौर पर लागू होने वाली सीमाएं

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

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

  • Chrome हमेशा उसी जीपीयू अडैप्टर का इस्तेमाल करता है जिसे Chrome के अन्य वर्कलोड के लिए असाइन किया गया है. लैपटॉप के लिए, यह आम तौर पर इंटिग्रेटेड ग्राफ़िक्स कार्ड होता है. ऐसा इसलिए, क्योंकि इससे बैटरी की खपत कम होती है. इसका मतलब है कि requestAdapter() को कॉल करते समय, powerPreference विकल्प का कोई असर नहीं पड़ता. अगर आपके डिवाइस में हाई परफ़ॉर्मेंस वाला जीपीयू उपलब्ध है, तो chrome://flags/#force-high-performance-gpu फ़्लैग को चालू करके और Chrome को फिर से चालू करके, उसका इस्तेमाल किया जा सकता है.