Google Colab'de web AI model testi

François Beaufort
François Beaufort

GPU'larla tutarlı bir test ortamı oluşturmak bekleniyor. Aşağıdaki adımları uygulayarak istemci taraflı, tarayıcı tabanlı yapay zeka modellerini aynı zamanda ölçeklenebilir, otomatikleştirilebilir ve güncel kurulumu için bir nedenden yararlanabilirsiniz.

Bu durumda tarayıcı, donanım desteğine sahip gerçek bir Chrome tarayıcıdır. en iyi uygulamaları gözden geçiriyorum.

Web yapay zekası, web oyunu veya grafik geliştiricisi olun ya da kendinizi Web Yapay Zeka model testiyle ilgileniyorsanız bu kılavuz sizin için.

1. Adım: Yeni bir Google Colab not defteri oluşturun

. 1. Yeni bir Colab not defteri oluşturmak için colab.new adresine gidin. Şekil 1'e benzer bir görünümde olacaktır. 2. Google Hesabınızda oturum açmak için istemi uygulayın. .
Yeni bir Colab'in ekran görüntüsü
Şekil 1: Yeni bir Colab not defteri.

2. Adım: T4 GPU özellikli bir sunucuya bağlanın

  1. Not defterinin sağ üst tarafına yakın yerdeki Bağlan tıklayın.
  2. Çalışma zamanı türünü değiştir'i seçin:
    Çalışma zamanını değiştirme adımlarını gösteren yakından ekran görüntüsü.
    Şekil 2. Colab arayüzünde çalışma zamanını değiştirebilirsiniz.
    'nı inceleyin.
  3. Kalıcı pencerede donanım hızlandırıcınız olarak T4 GPU'yu seçin. Bağlandığınızda Colab, NVIDIA T4 GPU ekli bir Linux örneği kullanır. ziyaret edin.
    Çalışma zamanı türünü değiştirme modülünün ekran görüntüsü.
    Şekil 3: Donanım hızlandırıcı bölümünde T4 GPU'yu seçin.
  4. Kaydet'i tıklayın.
  5. Çalışma zamanınıza bağlanmak için Connect (Bağlan) düğmesini tıklayın. Bir süre sonra düğmesinde, RAM ve disk kullanımı grafikleriyle birlikte yeşil bir onay işareti görüntülenir. Bu, sunucunun gerekli donanım.

Tebrikler, GPU eklenmiş bir sunucu oluşturdunuz.

3. Adım: Doğru sürücüleri ve bağımlılıkları yükleyin

  1. Aşağıdaki iki satırlık kodu kopyalayıp sitenizin ilk kod hücresine yapıştırın: not defterine yerleştireceğiz. Colab ortamında, komut satırı yürütmesinin başına ünlem işareti.

    !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. Şu hücreyi eklemek için hücrenin yanındaki 'i tıklayın: kodu yürütür.

    Yeni bir Colab'in ekran görüntüsü
    Şekil 4.

  3. Kodun çalıştırılması tamamlandıktan sonra nvidia-smi ürününün bir dosya yazdırdığını doğrulayın GPU'nun gerçekten olduğunu doğrulamak için aşağıdaki ekran görüntüsüne benzer eklenir ve sunucunuzda tanınacaktır. Önceki bölüme gitmeniz gerekebilir kontrol edin.

    Şekil 5: "NVIDIA-SMI" ile başlayan çıkışı bulun.

4. adım: Gözetimsiz Chrome'u kullanın ve otomatikleştirin

  1. Yeni bir kod eklemek için Kod düğmesini tıklayın kod hücresi.
  2. Ardından (veya doğrudan google-chrome-stable öğesini komut satırından). Aşağıda her ikisine de ilişkin örnekler verilmiştir.

A Bölümü: Gözetimsiz Chrome'u doğrudan komut satırında kullanma

# 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

Örnekte, sonuçta elde edilen PDF yakalaması /content/gpu.pdf içinde depolandı. Alıcı: dosyayı görüntülemek için içeriği genişletin. Ardından PDF'yi indirmek için simgesini tıklayın dosyasını yerel makinenize yükleyin.

Yeni bir Colab'in ekran görüntüsü
Şekil 6: Colab arayüzünün bu ekran görüntüsündeki PDF dosyasını indirme adımlarını izleyin.

B Bölümü: Chrome'u Puppeteer ile Komuta Etme

Gözetimsiz Chrome'u kontrol etmek için Puppeteer'ı kullanan minimalist bir örnek sunduk. çalıştırılabilir.

# 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 örneğinde, bir veritabanı oluşturmak için Node.js komut dosyasını ekran görüntüsüdür. Peki bu nasıl çalışır? Node.js ile ilgili bu kılavuza göz atın kod jPuppet.js dosyasına ait veriler yer alır.

jPuppet.js Düğüm kodu dökümü

İlk olarak Puppeteer'ı içe aktarın. Bu şekilde Chrome'u Node.js ile uzaktan kontrol edebilirsiniz:

import puppeteer from 'puppeteer';

Ardından, Node uygulamasına hangi komut satırı bağımsız değişkenlerinin aktarıldığını kontrol edin. Gidilecek bir URL'yi temsil eden üçüncü bağımsız değişkenin ayarlandığından emin olun. Siz İlk iki bağımsız değişken Düğüm'ü çağırdığından, üçüncü bağımsız değişkeni burada incelemeniz gerekir çalıştırdığımız komut dosyası için de geçerlidir. 3. öğe aslında 1. öğe parametresini kullanabilirsiniz:

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

Şimdi runWebpage() adlı eşzamansız bir işlev tanımlayın. Bu işlem bir tarayıcı oluşturur. çalıştırmak için komut satırı bağımsız değişkenleriyle yapılandırılan nesne açıklandığı gibi WebGL ve WebGPU'nun çalışmasını sağlamamız için gereken şekilde WebGPU ve WebGL desteğini etkinleştirin.

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'
      ]
  });

Daha sonra herhangi bir URL'yi ziyaret etmek için kullanabileceğiniz yeni bir tarayıcı sayfası nesnesi oluşturun:

const page = await browser.newPage();

Ardından, web sayfası açıldığında console.log etkinliklerini dinlemek için bir etkinlik işleyici ekleyin JavaScript'i çalıştırır. Bu, Node komut satırında mesajları günlüğe kaydetmenizi sağlar ve ayrıca konsol metnini inceleyerek (bu örnekte captureAndEnd) içerir. Düğüm. Bu seçenek, önce biraz çalışma yapılması gereken web sayfaları için yararlıdır ancak ekran görüntüsü alınabiliyor. Ancak bunun için birkaç adım var.

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

Son olarak, sayfaya belirtilen URL'yi ziyaret etmesini söyleyin ve ilk ekran görüntüsünü alın.

chrome://gpu adlı dosyanın ekran görüntüsünü almayı seçerseniz tarayıcıyı kapatabilirsiniz oturumu hemen başlatabilirsiniz, çünkü bu sayfa kendi kodunuz tarafından kontrol edilmez.

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

package.json dosyasını değiştir

Videonun başında bir içe aktarma ifadesi kullandığımızı fark etmiş olabilirsiniz. jPuppet.js dosyası yükleyin. package.json, tür değerlerini module olarak ayarlamalıdır veya modülün geçersiz olduğuna dair bir hata alırsınız.

 {
    "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"
}

Hepsi bu kadar. Puppeteer kullanmak, arayüz oluşturmak Chrome'da programlı olarak kullanabilirsiniz.

Başarılı

Artık TensorFlow.js Moda MNIST sınıflandırıcısı istemci tarafı ile resimdeki bir çift pantolonu doğru şekilde tanıyabiliyor. JavaScript'i kullanarak tarayıcıda işlemeye yarar.

Bunu, makine öğreniminden GPU'ya dayalı tüm istemci taraflı iş yükleri için kullanabilirsiniz test edilmesine yardımcı oldu.

Yeni bir Colab'in ekran görüntüsü
Şekil 7: Tarayıcıdaki giyim istemci tarafını gerçek zamanlı olarak tanıyabilen bir GPU hızlandırmalı TensorFlow.js modelinin başarılı bir şekilde yakalanması

Kaynaklar

GitHub kod deposuna yıldız ekleme gelecek güncellemeleri alabilirsiniz.