Dobra wiadomość! Masz już gotową fajną aplikację Web AI, która uruchamia modele systemów uczących się bezpośrednio na urządzeniu użytkownika. Działa ona całkowicie w przeglądarce po stronie klienta, bez korzystania z chmury. To na urządzeniu Zapewnia ochronę prywatności użytkowników, zwiększa wydajność i obniża koszty znacznie obniżył się.
Istnieje jednak przeszkoda. Twoje Model TensorFlow.js może działać na zarówno przez CPU (WebAssembly), jak i wydajniejsze układy GPU WebGL oraz WebGPU). Pytanie: jak w spójny sposób zautomatyzować testowanie przeglądarki za pomocą wybranego sprzętu?
Utrzymywanie spójności jest kluczowe dla porównywania skuteczności modelu uczenia maszynowego w ciągu czasu, gdy go ulepszasz i wprowadzasz kolejne wersje przed wdrożeniem, aby użytkownicy mogli go używać na swoich urządzeniach.
Skonfigurowanie spójnego środowiska testowego z układami GPU może być trudniejsze niż nie jest oczekiwany. W tym poście opowiemy o napotkanych problemach i o tym, jak je rozwiązaliśmy. aby poprawić wydajność aplikacji.
Dotyczy to nie tylko programistów internetowych AI! Jeśli zajmujesz się grami internetowymi lub grafiki, post jest również przydatny dla Ciebie.
Co znajduje się w naszych narzędziach do automatyzacji
Korzystamy z tych rozwiązań:
- Środowisko: oparta na systemie Linux usługa Google Colab notebook podłączony do NVIDIA GPU: T4 lub V100. Możesz używać innych platform chmurowych, takich jak Google Cloud (GCP), jeśli jest to preferowane.
- Przeglądarka: Chrome obsługuje WebGPU, potężnym następcą WebGL, przenosi postępy nowoczesnych interfejsów API GPU do internetu.
- Automatyzacja: Puppeteer to biblioteka Node.js, która umożliwia zarządzać przeglądarkami automatycznie za pomocą JavaScriptu. Dzięki Puppeteer możemy automatyzować Chrome w trybie bez interfejsu graficznego, co oznacza, że przeglądarka działa bez widoczny interfejs na serwerze. Używamy ulepszonego nowy tryb bez interfejsu graficznego, a nie starszej wersji.
Weryfikacja środowiska
Najlepszym sposobem na sprawdzenie, czy akceleracja sprzętowa jest włączona w Chrome, jest wpisanie chrome://gpu
na pasku adresu. Dostępne opcje
automatycznie wykonywać odpowiednik za pomocą Puppeteer.
za pomocą console.log
lub zapisz pełny raport w formacie PDF, aby sprawdzić go ręcznie:
/* Incomplete example.js */
import puppeteer from 'puppeteer';
// Configure launch parameters: Expands later
const browser = await puppeteer.launch({
headless: 'new',
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.goto('chrome://gpu');
// Verify: log the WebGPU status or save the GPU report as PDF
const txt = await page.waitForSelector('text/WebGPU');
const status = await txt.evaluate(g => g.parentElement.textContent);
console.log(status);
await page.pdf({ path: './gpu.pdf' });
await browser.close();
Otwórz plik chrome://gpu
. Powinien pojawić się następujący wynik:
Stan funkcji graficznej | |
---|---|
OpenGL: | Wyłączono |
Vulkan: | Wyłączono |
WebGL: | Tylko oprogramowanie, akceleracja sprzętowa niedostępna. |
WebGL 2 | Tylko oprogramowanie, akceleracja sprzętowa niedostępna. |
WebGPU: | Wyłączono |
Wykryto problemy. |
Nie był to dobry początek. Od razu widać, że nie udało się wykryć sprzętu. WebGL, WebGL2 i WebGPU są wyłączone lub mogą mieć tylko oprogramowanie. Śr nie są sami w tym problemie – w internecie wiele osób mówi o nich, w podobnej sytuacji, m.in. w oficjalnych kanałach pomocy Chrome, (1), (2)
Włącz obsługę WebGPU i WebGL
Domyślnie Chrome bez interfejsu wyłącza GPU. Aby włączyć ten tryb w Linuksie, podczas uruchamiania bez interfejsu graficznego zastosuj wszystkie te flagi Chrome:
- Flaga
--no-sandbox
wyłącza bezpieczną piaskownicę Chrome, która izoluje z reszty systemu. Uruchamianie Chrome jako root bez ta piaskownica nie jest obsługiwana. - Flaga
--headless=new
uruchamia Chrome w nowym, ulepszonym interfejsie tryb bez interfejsu graficznego bez widocznego interfejsu użytkownika. - Flaga
--use-angle=vulkan
informuje Chrome, aby używać podsystemu Vulkan w ANGLE, który tłumaczy wywołania OpenGL ES 2/3 na wywołania interfejsu Vulkan API. - Flaga
--enable-features=Vulkan
włącza backend graficzny Vulkan do kompozytowania i rasteryzacji w Chrome. - Flaga
--disable-vulkan-surface
wyłącza interfejs VulkanVK_KHR_surface
instancji. Zamiast łańcucha wymiany używana jest operacja Bit blit do wyświetlania wyniku renderowania na ekranie. - Flaga
--enable-unsafe-webgpu
włącza eksperymentalny interfejs WebGPU API w Chrome na Linuksie i wyłącza listę blokowania kart graficznych.
Teraz połączymy wszystkie zmiany, które do tej pory wprowadziliśmy. Oto pełny skrypt.
/* Complete example.js */
import puppeteer from 'puppeteer';
// Configure launch parameters
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();
await page.goto('chrome://gpu');
// Verify: log the WebGPU status or save the GPU report as PDF
const txt = await page.waitForSelector('text/WebGPU');
const status = await txt.evaluate(g => g.parentElement.textContent);
console.log(status);
await page.pdf({path: './gpu.pdf'});
await browser.close();
Ponownie uruchom skrypt. Nie wykryto problemów z WebGPU, a wartość zmienia się z tylko do oprogramowania.
Stan funkcji graficznej | |
---|---|
OpenGL: | Wyłączono |
Vulkan: | Wyłączono |
WebGL: | Tylko oprogramowanie, akceleracja sprzętowa niedostępna. |
WebGL 2 | Tylko oprogramowanie, akceleracja sprzętowa niedostępna. |
WebGPU: | Tylko oprogramowanie, akceleracja sprzętowa niedostępna. |
Akceleracja sprzętowa jest nadal niedostępna, a procesor GPU NVIDIA T4 – wykryto.
Zainstaluj odpowiednie sterowniki GPU.
We współpracy z kilkoma specjalistami ds. GPU dokładniej zbadaliśmy wynik działania chrome://gpu
w zespole Chrome. Wykryliśmy problemy z domyślnymi sterownikami zainstalowanymi na urządzeniu
Linux Colab
powodują problemy z interfejsem Vulkan, przez co Chrome nie może wykryć
Procesor graficzny NVIDIA T4 na poziomie GL_RENDERER
, jak pokazano poniżej. Ten
powoduje problemy z Chrome bez interfejsu graficznego.
Informacje o kierowcy | |
---|---|
GL_RENDERER | ANGLE (Google, Vulkan 1.3.0 (SwiftShader Urządzenie (Subzero) (0x0000C0DE)), sterownik SwiftShader-5.0.0) |
Zainstalowanie zgodnych sterowników rozwiąże problem.
Informacje o kierowcy | |
---|---|
GL_RENDERER | ANGLE (NVIDIA Corporation, Tesla T4/PCIe/SSE2, OpenGL ES 3.2 NVIDIA 525.105.17) |
Aby zainstalować prawidłowe sterowniki, podczas konfiguracji uruchom te polecenia.
ostatnie 2 wiersze pozwalają zapisać dane wyjściowe wykryte przez sterowniki NVIDIA
dzięki vulkaninfo
.
apt-get install -y vulkan-tools libnvidia-gl-525
// Verify the NVIDIA drivers detects along with vulkaninfo
nvidia-smi
vulkaninfo --summary
Teraz uruchom skrypt jeszcze raz. Otrzymasz następujący wynik. 🎉
Stan funkcji graficznej | |
---|---|
OpenGL: | Włączono |
Interfejs Vulkan: | Włączono |
WebGL: | Akceleracja sprzętowa przy zmniejszonej wydajności. |
WebGL 2 | Akceleracja sprzętowa przy zmniejszonej wydajności. |
WebGPU: | Akceleracja sprzętowa, ale przy zmniejszonej wydajności. |
Dzięki zastosowaniu właściwych sterowników i flag w Chrome mamy teraz WebGPU i obsługę WebGL dzięki nowemu, atrakcyjnemu trybowi bez interfejsu graficznego.
Za kulisami: śledztwo naszego zespołu
Po wielu badaniach nie znaleźliśmy metod pracy dla środowiska, którą trzeba wykonać w Google Colab, chociaż zostały posty z nadzieją która sprawdzała się w innych środowiskach, co było obiecujące. Ostatecznie udało nam się odtworzyć sukces w środowisku Colab NVIDIA T4, bo mieliśmy kluczowe problemy:
- Niektóre kombinacje flag umożliwiają wykrywanie GPU, ale nie pozwalają używać GPU.
- Przykłady działających rozwiązań innych firm, w których używano starej wersji Chrome bez interfejsu graficznego który w pewnym momencie zostanie wycofany i zastąpiony przez Nowa wersja. Potrzebowaliśmy rozwiązania pracował z nową wersją Chrome bez interfejsu graficznego, dzięki czemu jest lepiej przygotowana na przyszłość.
Potwierdiliśmy, że GPU jest niewykorzystane, uruchamiając przykładową stronę internetową TensorFlow.js do rozpoznawania obrazów, w której wytrenowaliśmy model do rozpoznawania próbek odzieży (coś w rodzaju „hello world” dla systemów uczących się).
Na zwykłym komputerze 50 cykli treningowych (zwanych też eponami) powinno trwać mniej niż 1 sekundę. Wywołuję Chrome bez interfejsu graficznego w stanie domyślnym, więc udało nam się zapisać danych wyjściowych konsoli JavaScript do wiersza poleceń Node.js po stronie serwera, ale ich szybkie cykle treningowe.
Zgodnie z oczekiwaniami każda epoka trenowania trwała znacznie dłużej niż oczekiwano (kilka sekund), co sugeruje, że Chrome korzysta ze zwykłego trybu uruchamiania procesora JS. zamiast korzystać z GPU:
Po naprawieniu sterowników i użyciu odpowiedniej kombinacji flag dla bez interfejsu graficznego Chrome ponowne uruchomienie przykładowego trenowania TensorFlow.js działa znacznie szybciej epok trenowania.
Podsumowanie
Internetowa AI rozwinęła się w gwałtowny sposób od czasu powstania w 2017 r. Z technologiami przeglądarek, takimi jak WebGPU, WebGL WebAssembly to model systemów uczących się może też przyśpieszyć operacje matematyczne po stronie klienta.
W 2023 r. biblioteki TensorFlow.js i MediaPipe Web przekroczyły miliard pobrań i biblioteki – historyczny kamień milowy, który pokazuje, jak internet deweloperzy i inżynierowie przechodzą na AI w swojej nowej generacji, i aplikacjami internetowymi, aby tworzyć naprawdę niesamowite rozwiązania.
Duża odpowiedzialność wynika z dużej odpowiedzialności. Przy tym poziomie użycia w systemach produkcyjnych pojawia się potrzeba testowania AI opartej na przeglądarce po stronie klienta w prawdziwym środowisku przeglądarki, a jednocześnie są skalowalne, oraz w ramach znanej, ustandaryzowanej konfiguracji sprzętowej.
Wykorzystując połączone możliwości nowej wersji Chrome bez interfejsu graficznego i aplikacji Puppeteer, mogą śmiało testować takie zbiory zadań w ustandaryzowanym i możliwym do replikacji co zapewnia spójne i wiarygodne wyniki.
Podsumowanie
Szczegółowy przewodnik jest dostępny: naszą dokumentację, dzięki czemu możesz samodzielnie wypróbować pełną konfigurację.
Jeśli te informacje były przydatne, wspomnij o nich na stronie LinkedIn, X (dawniej Twitter) lub cokolwiek innego sieć społecznościowa, z której korzystasz, używając hashtagu #WebAI. Jeśli masz jakieś pytania, Waszej opinii. Dzięki temu będziemy mogli napisać więcej podobnych rzeczy w przyszłości.
Dodawanie gwiazdki do repozytorium GitHub .
Podziękowania
Serdecznie dziękujemy wszystkim członkom zespołu Chrome, którzy pomagali w debugowaniu sterownika problemów z WebGPU, które napotkaliśmy w tym rozwiązaniu, ze szczególnym uwzględnieniem Jecelyn Yeen i Alexandra White za pomoc w pracy słownej tego posta na blogu. Dzięki Julijowi Novikowi, Andriejowi Kosiakowi Alex Rudenko, odegrał ważną rolę w tworzeniu ostatecznego, działającego rozwiązania.