Google Colab में वेब एआई (AI) मॉडल की टेस्टिंग

François Beaufort
François Beaufort

जीपीयू के साथ एक जैसा टेस्टिंग एनवायरमेंट सेट अप करना, उम्मीद से ज़्यादा मुश्किल हो सकता है. सही ब्राउज़र एनवायरमेंट में क्लाइंट-साइड और ब्राउज़र पर आधारित एआई मॉडल को टेस्ट करने के तरीके यहां बताए गए हैं. ये मॉडल, बड़े पैमाने पर अपने-आप चलने वाले, अपने-आप काम करने वाले, और एक जाने-माने स्टैंडर्ड हार्डवेयर सेटअप के दायरे में आते हैं.

इस मामले में, यह ब्राउज़र एक असली Chrome ब्राउज़र है, जो सॉफ़्टवेयर एम्युलेशन के बजाय, हार्डवेयर की सुविधा देता है.

आप वेब एआई, वेब गेमिंग या ग्राफ़िक डेवलपर हों या आप वेब एआई मॉडल की टेस्टिंग में दिलचस्पी रखते हों, यह गाइड आपके लिए है.

पहला चरण: नई Google Colab notebook बनाना

1. नई Colab notebook बनाने के लिए, colab.new पर जाएं. यह पहली इमेज की तरह दिखना चाहिए. 2. Google खाते में साइन इन करने के लिए, प्रॉम्प्ट मैसेज में दिया गया तरीका अपनाएं.
नए Colab का स्क्रीनशॉट
पहली इमेज: एक नई Colab notebook.

दूसरा चरण: T4 जीपीयू की सुविधा वाले सर्वर से कनेक्ट करना

  1. नोटबुक में सबसे ऊपर दाईं ओर, कनेक्ट करें पर क्लिक करें.
  2. रनटाइम का टाइप बदलें चुनें:
    क्लोज़-अप स्क्रीनशॉट, जिसमें रनटाइम बदलने का तरीका दिखाया गया है.
    दूसरी इमेज. Colab इंटरफ़ेस में रनटाइम बदलें.
  3. मॉडल विंडो में, अपने हार्डवेयर एक्सीलेरेटर के तौर पर T4 जीपीयू को चुनें. कनेक्ट करने पर, Colab ऐसे Linux इंस्टेंस का इस्तेमाल करेगा जिसमें NVIDIA T4 जीपीयू जुड़ा हो.
    'रनटाइम टाइप बदलें' मॉड्यूल का स्क्रीनशॉट.
    तीसरी इमेज: हार्डवेयर ऐक्सेलरेटर में जाकर, T4 जीपीयू चुनें.
  4. सेव करें पर क्लिक करें.
  5. अपने रनटाइम से कनेक्ट करने के लिए, कनेक्ट करें बटन पर क्लिक करें. कुछ देर बाद, बटन पर एक हरा चेकमार्क दिखेगा. साथ ही, रैम और डिस्क के इस्तेमाल से जुड़े ग्राफ़ भी दिखेंगे. इससे पता चलता है कि आपके ज़रूरी हार्डवेयर का इस्तेमाल करके सर्वर बनाया गया है.

बहुत बढ़िया, आपने अभी-अभी एक सर्वर बनाया, जिसमें जीपीयू अटैच किया गया है.

तीसरा चरण: सही ड्राइवर और डिपेंडेंसी इंस्टॉल करें

  1. कोड की इन दो लाइनों को कॉपी करके, notebook के पहले कोड सेल में चिपकाएं. Colab के एनवायरमेंट में, कमांड लाइन के चलने से पहले विस्मयादिबोधक चिह्न लगाया जाता है.

    !git clone https://github.com/jasonmayes/headless-chrome-nvidia-t4-gpu-support.git
    !cd headless-chrome-nvidia-t4-gpu-support && chmod +x scriptyMcScriptFace.sh && ./scriptyMcScriptFace.sh
    
    # Update, install correct drivers, and remove the old ones.
    apt-get install -y vulkan-tools libnvidia-gl-525
    
    # Verify NVIDIA drivers can see the T4 GPU and that vulkan is working correctly.
    nvidia-smi
    vulkaninfo --summary
    
    # Now install latest version of Node.js
    npm install -g n
    n lts
    node --version
    npm --version
    
    # Next install Chrome stable
    curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/googlechrom-keyring.gpg
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrom-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
    sudo apt update
    sudo apt install -y google-chrome-stable
    
    # Start dbus to avoid warnings by Chrome later.
    export DBUS_SESSION_BUS_ADDRESS="unix:path=/var/run/dbus/system_bus_socket"
    /etc/init.d/dbus start
    
  2. कोड चलाने के लिए, सेल के आगे पर क्लिक करें.

    नए Colab का स्क्रीनशॉट
    चौथी इमेज.

  3. कोड की प्रोसेस पूरी हो जाने के बाद, पुष्टि करें कि nvidia-smi ने यहां दिए गए स्क्रीनशॉट से मिलता-जुलता कुछ प्रिंट किया हो. इससे, इस बात की पुष्टि हो पाएगी कि आपके पास जीपीयू है और आपके सर्वर पर इसकी पहचान की जा चुकी है. इस आउटपुट को देखने के लिए आपको लॉग में पहले तक स्क्रोल करना होगा.

    पांचवी इमेज: "NVIDIA-SMI" से शुरू होने वाला आउटपुट खोजें.

चौथा चरण: बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले Chrome Chrome का इस्तेमाल करना और उसे ऑटोमेट करना

  1. नया कोड सेल जोड़ने के लिए, कोड बटन पर क्लिक करें.
  2. इसके बाद, कस्टम कोड लिखकर अपने पसंदीदा पैरामीटर के साथ Node.js प्रोजेक्ट को कॉल करें (या सीधे कमांड लाइन में google-chrome-stable को कॉल करें). हमारे पास नीचे दोनों के लिए उदाहरण हैं.

पार्ट A: कमांड लाइन में, बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले Chrome का इस्तेमाल करना

# Directly call Chrome to dump a PDF of WebGPU testing page
# and store it in /content/gpu.pdf
!google-chrome-stable \
--no-sandbox \
--headless=new \
--use-angle=vulkan \
--enable-features=Vulkan \
--disable-vulkan-surface \
--enable-unsafe-webgpu \
--print-to-pdf=/content/gpu.pdf https://webgpureport.org

इस उदाहरण में, हमने मिलने वाले PDF कैप्चर को /content/gpu.pdf में सेव किया है. उस फ़ाइल को देखने के लिए, कॉन्टेंट को बड़ा करें. इसके बाद, PDF फ़ाइल को अपने कंप्यूटर पर डाउनलोड करने के लिए, पर क्लिक करें.

नए Colab का स्क्रीनशॉट
छठी इमेज: Colab इंटरफ़ेस के इस स्क्रीन कैप्चर में, PDF डाउनलोड करने का तरीका देखें.

पार्ट B: Puppeteer की मदद से Chrome को निर्देश देना

हमने बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले Chrome को कंट्रोल करने के लिए Puppeteer का इस्तेमाल करने का एक आसान उदाहरण दिया है. इसे इस तरह चलाया जा सकता है:

# Call example node.js project to perform any task you want by passing
# a URL as a parameter
!node headless-chrome-nvidia-t4-gpu-support/examples/puppeteer/jPuppet.js chrome://gpu

jPuppet उदाहरण में, हम स्क्रीनशॉट बनाने के लिए Node.js स्क्रिप्ट को कॉल कर सकते हैं. लेकिन यह कैसे काम करता है? jPuppet.js में Node.js कोड की यह जानकारी देखें.

jPuppet.js नोड कोड का ब्रेकडाउन

सबसे पहले, Puppeteer को इंपोर्ट करें. इससे आपको Node.js की मदद से, Chrome को रिमोट तरीके से कंट्रोल करने की सुविधा मिलती है:

import puppeteer from 'puppeteer';

इसके बाद, देखें कि Node ऐप्लिकेशन को कौनसे कमांड लाइन आर्ग्युमेंट पास किए गए हैं. पक्का करें कि तीसरा आर्ग्युमेंट सेट है—जो उस यूआरएल को दिखाता है जिस पर नेविगेट करना है. आपको यहां तीसरे आर्ग्युमेंट की जांच करनी होगी, क्योंकि पहले दो आर्ग्युमेंट Node और हमारे ज़रिए चल रही स्क्रिप्ट को कॉल करते हैं. तीसरे एलिमेंट में, नोड प्रोग्राम को भेजा गया पहला पैरामीटर शामिल है:

const url = process.argv[2];
if (!url) {
  throw "Please provide a URL as the first argument";
}

अब runWebpage() नाम का एसिंक्रोनस फ़ंक्शन तय करें. इससे एक ब्राउज़र ऑब्जेक्ट बन जाता है. इस ऑब्जेक्ट को कमांड लाइन आर्ग्युमेंट के साथ कॉन्फ़िगर किया जाता है, ताकि Chrome बाइनरी को ठीक उसी तरह चलाया जा सके जिस तरह WebGL और WebGPU, WebGPU और WebGL के लिए सहायता पाने की सुविधा चालू करें में बताए गए तरीके से काम करता है.

async function runWebpage() {
  const browser = await puppeteer.launch({
    headless: 'new',
    args:  [
        '--no-sandbox',
        '--headless=new',
        '--use-angle=vulkan',
        '--enable-features=Vulkan',
        '--disable-vulkan-surface',
        '--enable-unsafe-webgpu'
      ]
  });

एक नया ब्राउज़र पेज ऑब्जेक्ट बनाएं, जिसका इस्तेमाल बाद में किसी भी यूआरएल पर जाने के लिए किया जा सके:

const page = await browser.newPage();

इसके बाद, जब वेब पेज JavaScript को एक्ज़ीक्यूट करेगा, तब console.log इवेंट सुनने के लिए इवेंट लिसनर जोड़ें. इससे आपको नोड कमांड लाइन पर मैसेज लॉग करने की सुविधा मिलती है. साथ ही, खास वाक्यांश (इस मामले में, captureAndEnd) के लिए कंसोल टेक्स्ट की भी जांच की जा सकती है, जो स्क्रीनशॉट को ट्रिगर करता है और फिर नोड में ब्राउज़र प्रोसेस को खत्म करता है. यह उन वेब पेजों के लिए बहुत काम आता है जिन्हें स्क्रीनशॉट लेने से पहले कुछ काम करना पड़ता है. साथ ही, इनके काम करने में लगने वाला समय तय नहीं होता.

page.on('console', async function(msg) {
  console.log(msg.text());
  if (msg.text() === 'captureAndEnd') {
    await page.screenshot({ path: '/content/screenshotEnd.png' });
    await browser.close();
  }
});

आखिर में, पेज को बताए गए यूआरएल पर जाने का निर्देश दें और पेज लोड होने पर, शुरुआती स्क्रीनशॉट लें.

अगर आपने chrome://gpu का स्क्रीनशॉट लिया, तो किसी भी कंसोल आउटपुट का इंतज़ार करने के बजाय, ब्राउज़र सेशन को तुरंत बंद किया जा सकता है. ऐसा इसलिए, क्योंकि इस पेज को आपके कोड से कंट्रोल नहीं किया जाता.

  await page.goto(url,  { waitUntil: 'networkidle2' });
  await page.screenshot({path: '/content/screenshot.png'});
  if (url === 'chrome://gpu') {
    await browser.close();
  }
}
runWebpage();

Package.json में बदलाव करें

आपने देखा होगा कि हमने jPuppet.js फ़ाइल की शुरुआत में एक इंपोर्ट स्टेटमेंट का इस्तेमाल किया. आपके package.json को टाइप वैल्यू को module के तौर पर सेट करना होगा. ऐसा न करने पर, आपको गड़बड़ी मिलेगी कि मॉड्यूल अमान्य है.

 {
    "dependencies":  {
      "puppeteer": "*"
    },
    "name": "content",
    "version": "1.0.0",
    "main": "jPuppet.js",
    "devDependencies": {},
    "keywords": [],
    "type": "module",
    "description": "Node.js Puppeteer application to interface with headless Chrome with GPU support to capture screenshots and get console output from target webpage"
}

आपको बस इतना ही करना है. Puppeteer का इस्तेमाल करने से Chrome के साथ प्रोग्रामिंग के ज़रिए इंटरफ़ेस करना आसान हो जाता है.

पुष्टि हो गई

अब हम इस बात की पुष्टि कर सकते हैं कि TensorFlow.js फ़ैशन एमएनआईएसटी क्लासिफ़ायर, इमेज में मौजूद ट्राउज़र के जोड़े को सही तरीके से पहचान सकता है. साथ ही, यह जीपीयू का इस्तेमाल करके, ब्राउज़र में क्लाइंट-साइड प्रोसेसिंग की मदद से यह भी पता लगा सकता है.

इसका इस्तेमाल क्लाइंट-साइड जीपीयू पर आधारित वर्कलोड के लिए किया जा सकता है. इनमें मशीन लर्निंग मॉडल से लेकर ग्राफ़िक और गेम टेस्टिंग तक शामिल हैं.

नए Colab का स्क्रीनशॉट
सातवीं इमेज: जीपीयू के एक्सेलरेटेड TensorFlow.js मॉडल को कैप्चर करके, ब्राउज़र में रीयल टाइम में कपड़ों के क्लाइंट साइड को पहचानने की सुविधा जोड़ी गई है

रिसॉर्स

आने वाले समय में अपडेट पाने के लिए, GitHub रेपो में स्टार जोड़ें.