Menyiapkan lingkungan pengujian yang konsisten dengan GPU bisa jadi lebih sulit daripada yang diharapkan. Berikut langkah-langkah untuk menguji model AI berbasis browser sisi klien dalam lingkungan browser yang sesungguhnya, sekaligus tetap skalabel, dapat diotomatisasi, dan dalam pengaturan perangkat keras yang terstandardisasi.
Dalam contoh ini, {i>browser<i} adalah {i>browser<i} Chrome yang sebenarnya dengan dukungan perangkat keras, dibandingkan dengan emulasi perangkat lunak.
Baik Anda seorang AI Web, game web, atau developer grafis, atau Anda mendapati diri Anda tertarik pada pengujian model Web AI, panduan ini tepat untuk Anda.
Langkah 1: Buat notebook Google Colab baru
Akun Layanan 1. Buka colab.new untuk membuat notebook Colab baru. Konfigurasinya akan terlihat seperti gambar 1. 2. Ikuti perintah untuk login ke Akun Google Anda.Langkah 2: Hubungkan ke server yang mendukung GPU T4
- Klik Connect di dekat bagian kanan atas notebook.
- Pilih Ubah jenis runtime:
- Di jendela modal, pilih T4 GPU sebagai akselerator hardware Anda. Saat Anda terhubung, Colab akan menggunakan instance Linux dengan GPU NVIDIA T4 terpasang.
- Klik Simpan.
- Klik tombol Hubungkan untuk menghubungkan ke runtime Anda. Setelah beberapa waktu, akan menampilkan tanda centang hijau, bersama dengan grafik RAM dan {i>disk usage<i}. Hal ini menunjukkan bahwa server telah berhasil dibuat dengan perangkat keras.
Bagus, Anda baru saja membuat server dengan GPU terpasang.
Langkah 3: Instal driver dan dependensi yang benar
Salin dan tempel dua baris kode berikut ke sel kode pertama dari notebook itu. Di lingkungan Colab, eksekusi command line ditambahkan dengan tanda seru.
!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
- Anda dapat memeriksa skrip di GitHub untuk melihat kode baris perintah mentah yang dijalankan skrip ini.
# 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
Klik
di samping sel untuk mengeksekusi kode.Setelah kode selesai dieksekusi, verifikasi
nvidia-smi
yang mencetak sesuatu mirip dengan screenshot berikut untuk mengonfirmasi bahwa Anda memang memiliki GPU terpasang dan dikenali di server Anda. Anda mungkin perlu men-scroll ke bagian di log untuk melihat output ini.
Langkah 4: Gunakan dan otomatiskan Chrome headless
- Klik tombol Code untuk menambahkan kode baru sel kode.
- Selanjutnya Anda bisa menulis kode kustom untuk memanggil project Node.js dengan
parameter pilihan (atau cukup panggil
google-chrome-stable
secara langsung dalam command line). Kami memiliki contoh untuk kedua hal berikut.
Bagian A: Gunakan Chrome Headless langsung di command line
# 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
Dalam contoh, kita menyimpan pengambilan PDF yang dihasilkan di /content/gpu.pdf
. Kepada
melihat file tersebut, luaskan konten .
Kemudian, klik untuk mendownload PDF
ke komputer lokal Anda.
Bagian B: Perintahkan Chrome dengan Puppeteer
Kami telah menyediakan contoh minimalis penggunaan Puppeteer untuk mengontrol Headless Chrome yang dapat dijalankan seperti berikut:
# 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
Pada contoh jPuppet, kita dapat memanggil skrip Node.js untuk membuat dalam layar. Tapi bagaimana cara kerjanya? Lihat panduan Node.js ini kode di jPuppet.js.
Perincian kode Node jPuppet.js
Pertama, impor Puppeteer. Hal ini memungkinkan Anda mengontrol Chrome dari jarak jauh dengan Node.js:
import puppeteer from 'puppeteer';
Selanjutnya, periksa argumen command line apa yang diteruskan ke aplikasi Node. Pastikan argumen ketiga ditetapkan, yang mewakili URL yang akan dibuka. Anda memeriksa argumen ketiga di sini karena dua argumen pertama memanggil Node itu sendiri dan skrip yang kita jalankan. Elemen ke-3 sebenarnya berisikan yang diteruskan ke program Node:
const url = process.argv[2];
if (!url) {
throw "Please provide a URL as the first argument";
}
Sekarang tentukan fungsi asinkron bernama runWebpage()
. Ini menciptakan sebuah browser
objek yang dikonfigurasikan dengan argumen command line untuk menjalankan
biner dengan cara yang diperlukan agar WebGL dan WebGPU berfungsi seperti yang dijelaskan di
Aktifkan dukungan WebGPU dan 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'
]
});
Buat objek halaman browser baru yang nanti dapat Anda gunakan untuk mengunjungi URL apa pun:
const page = await browser.newPage();
Kemudian, tambahkan pemroses peristiwa untuk memproses peristiwa console.log
saat halaman web
menjalankan JavaScript. Ini memungkinkan Anda mencatat pesan pada command line Node
dan juga memeriksa teks konsol untuk frasa khusus (dalam hal ini,
captureAndEnd
) yang memicu screenshot, lalu mengakhiri proses browser di
Node. Hal ini berguna untuk halaman web yang perlu melakukan beberapa pekerjaan sebelum
{i>screenshot<i} dapat diambil, dan memiliki waktu yang tidak
dalam proses eksekusi.
page.on('console', async function(msg) {
console.log(msg.text());
if (msg.text() === 'captureAndEnd') {
await page.screenshot({ path: '/content/screenshotEnd.png' });
await browser.close();
}
});
Terakhir, perintahkan halaman untuk mengunjungi URL yang ditentukan dan mengambil screenshot awal saat halaman telah dimuat.
Jika memilih untuk mengambil screenshot chrome://gpu
, Anda dapat menutup browser
sesi segera alih-alih menunggu {i>output<i} konsol, karena halaman ini
tidak dikontrol oleh kode Anda sendiri.
await page.goto(url, { waitUntil: 'networkidle2' });
await page.screenshot({path: '/content/screenshot.png'});
if (url === 'chrome://gpu') {
await browser.close();
}
}
runWebpage();
Mengubah package.json
Anda mungkin telah memperhatikan bahwa kita
menggunakan pernyataan impor di awal
File jPuppet.js
. package.json
Anda harus menetapkan nilai jenis sebagai module
, atau
Anda akan menerima pesan {i>error<i} bahwa
modul tersebut tidak valid.
{
"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"
}
Itu saja, tidak ada lagi yang lain. Menggunakan Puppeteer membuat antarmuka lebih mudah dengan Chrome secara terprogram.
Berhasil
Sekarang kita dapat memverifikasi bahwa Pengklasifikasi MNIST Mode TensorFlow.js bisa mengenali sepasang celana panjang dalam gambar, dengan sisi klien diproses di browser menggunakan GPU.
Anda dapat menggunakan ini untuk workload berbasis GPU sisi klien, dari machine learning hingga pengujian grafis dan game.
Resource
Menambahkan bintang di repo GitHub untuk menerima pembaruan berikutnya.