Skonfigurowanie spójnego środowiska testowego z układami GPU może być trudniejsze niż nie jest oczekiwany. Oto kroki, które pozwalają przetestować modele AI oparte na przeglądarce po stronie klienta prawdziwych środowisk przeglądarek przy jednoczesnej skalowalności, automatyzacji i ustandaryzowanej konfiguracji sprzętu.
W tym przypadku jest to prawdziwa przeglądarka Chrome z obsługą sprzętu, w przeciwieństwie do emulacji oprogramowania.
Niezależnie od tego, czy zajmujesz się tworzeniem sztucznej inteligencji, gier internetowych, grafiki czy też zajmujesz się interesuje Cię testowanie modeli sztucznej inteligencji w internecie, ten przewodnik jest przeznaczony dla Ciebie.
Krok 1. Utwórz nowy notatnik Google Colab
1. Otwórz stronę colab.new, aby utworzyć nowy notatnik Colab. Powinien wyglądać podobnie do ilustracji 1. 2. Postępuj zgodnie z instrukcjami, aby zalogować się na konto Google.Krok 2. Połącz się z serwerem z włączoną obsługą GPU T4
- Kliknij Połącz w prawym górnym rogu notatnika.
- Wybierz Zmień typ środowiska wykonawczego: .
- W oknie modalnym wybierz GPU T4 jako akcelerator sprzętowy. Podczas połączenia Colab będzie używać instancji z systemem Linux z podłączonym procesorem graficznym NVIDIA T4. .
- Kliknij Zapisz.
- Kliknij przycisk Połącz, aby połączyć się ze środowiskiem wykonawczym. Po pewnym czasie pojawi się zielony znacznik wyboru oraz wykresy wykorzystania pamięci RAM i dysku. Oznacza to, że został utworzony serwer z wymaganymi sprzęt.
Dobra robota! Właśnie udało Ci się utworzyć serwer z podłączonym GPU.
Krok 3. Zainstaluj odpowiednie sterowniki i zależności
Skopiuj następujące dwa wiersze i wklej je do pierwszej komórki kodu w notatniku. W środowisku Colab wykonanie wiersza poleceń rozpoczyna się ciągiem z wykrzyknikiem.
!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
- Skrypt możesz sprawdzić w GitHubie. aby zobaczyć nieprzetworzony kod wiersza poleceń, który wykonuje ten skrypt.
# 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
Kliknij
obok komórki, aby wykonaj kod.Po zakończeniu wykonywania kodu sprawdź, czy
nvidia-smi
coś wydrukował podobnie jak na tym zrzucie ekranu, aby potwierdzić, że faktycznie masz GPU. jest rozpoznawany przez Twój serwer. Być może trzeba będzie przewinąć do wcześniejszego etapu w dziennikach, aby wyświetlić te dane wyjściowe.
Krok 4. Używaj Chrome bez interfejsu graficznego i zautomatyzuj go
- Kliknij przycisk Kod, aby dodać nowy z komórką z kodem.
- Następnie możesz napisać własny kod, który będzie wywoływał projekt Node.js za pomocą
(lub po prostu wywołaj
google-chrome-stable
bezpośrednio w wiersza poleceń). Poniżej podajemy przykłady.
Część A. Używaj Chrome bez interfejsu graficznego bezpośrednio z wiersza poleceń
# 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
W tym przykładzie wynikowy zapis pliku PDF został zapisany w programie /content/gpu.pdf
. Do
wyświetl go, rozwiń treść .
Następnie kliknij , aby pobrać plik PDF
na komputer lokalny.
Część B. Polecanie Chrome w Puppeteer
Oto minimalistyczny przykład sterowania Chrome bez interfejsu graficznego za pomocą Puppeteer które można uruchomić w ten sposób:
# 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
W przykładzie jPuppet możemy wywołać skrypt Node.js, by utworzyć zrzut ekranu. Jak to działa? Zapoznaj się z tym przewodnikiem po Node.js. kod w jPuppet.js.
Zestawienie kodu węzła jPuppet.js
Najpierw zaimportuj Puppeteer. Dzięki temu zdalne sterowanie Chrome przy użyciu środowiska Node.js:
import puppeteer from 'puppeteer';
Następnie sprawdź, które argumenty wiersza poleceń zostały przekazane do aplikacji węzła. Upewnij się, że ustawiono trzeci argument reprezentujący adres URL, do którego należy przejść. Ty należy sprawdzić trzeci argument, ponieważ pierwsze dwa argumenty wywołują argument Node i uruchomiony skrypt. Trzeci element zawiera tak naprawdę pierwszy element parametr przekazywany do programu węzłów:
const url = process.argv[2];
if (!url) {
throw "Please provide a URL as the first argument";
}
Zdefiniuj funkcję asynchroniczną o nazwie runWebpage()
. Spowoduje to utworzenie przeglądarki
obiekt skonfigurowany za pomocą argumentów wiersza poleceń w celu uruchomienia Chrome
w taki sposób, by interfejsy WebGL i WebGPU działały w sposób opisany w
Włącz obsługę WebGPU i 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'
]
});
Utwórz nowy obiekt strony przeglądarki, którego będzie można później użyć do otwarcia dowolnego adresu URL:
const page = await browser.newPage();
Następnie dodaj detektor zdarzeń, który będzie nasłuchiwać zdarzeń console.log
, gdy strona internetowa
wykonuje JavaScript. Dzięki temu możesz rejestrować wiadomości w wierszu poleceń węzła
oraz sprawdzić tekst konsoli pod kątem specjalnego wyrażenia (w tym przypadku
captureAndEnd
), który powoduje wyświetlenie zrzutu ekranu, a następnie kończy proces przeglądania w
Węzeł. Jest to przydatne w przypadku stron internetowych, które muszą zostać wykonane przed
i można zrobić zrzut ekranu. Jego długość nie jest deterministyczna
page.on('console', async function(msg) {
console.log(msg.text());
if (msg.text() === 'captureAndEnd') {
await page.screenshot({ path: '/content/screenshotEnd.png' });
await browser.close();
}
});
Na koniec poleć stronie przejście do podanego adresu URL i pobierz początkowy zrzut ekranu po załadowaniu strony.
Jeśli zdecydujesz się zrobić zrzut ekranu strony chrome://gpu
, możesz zamknąć przeglądarkę
sesja natychmiastowa, zamiast czekać na dane wyjściowe konsoli, bo ta strona
które nie są kontrolowane przez Twój kod.
await page.goto(url, { waitUntil: 'networkidle2' });
await page.screenshot({path: '/content/screenshot.png'});
if (url === 'chrome://gpu') {
await browser.close();
}
}
runWebpage();
Modyfikowanie pliku package.json
Jak być może zauważyliście, na początku
jPuppet.js
. package.json
musi ustawić wartości typu module
lub
wyświetli się błąd informujący o tym, że moduł jest nieprawidłowy.
{
"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"
}
To wszystko. Użycie Puppeteer ułatwia interfejs. automatycznie za pomocą Chrome.
Sukces
Możemy teraz sprawdzić, czy Klasyfikator MNIST TensorFlow.js Fashion poprawnie rozpoznają parę spodni na zdjęciu, jeśli po stronie klienta podczas przetwarzania w przeglądarce za pomocą GPU.
Możesz go używać do wszystkich zbiorów zadań opartych na GPU po stronie klienta, od systemów uczących się do testowania grafiki i gier.
Zasoby
Dodawanie gwiazdki do repozytorium GitHub , aby otrzymywać informacje w przyszłości.