Lancer Chrome avec le GPU sur un serveur Linux
Par défaut, Chrome en mode headless n’utilise pas le GPU, même quand le serveur en a un. Il rend WebGL avec SwiftShader, un GPU émulé sur le CPU : lent, et il occupe les cœurs dont vos tests ont besoin. Deux options suffisent pour changer ça.
Testé le 29/10/2026 sur un serveur Linux GPU (Intel UHD 770, Debian 13, 4 vCPU) avec Chromium 156, et Playwright 1.64 dans Docker.
1. Prérequis
apt install chromium # ou google-chrome-stable : mêmes options
ls /dev/dri # doit montrer renderD128
En utilisateur non-root, ajoutez-le au groupe render pour qu’il puisse
ouvrir le GPU : usermod -aG render,video monutilisateur.
2. La commande
chromium --headless=new \
--use-angle=vulkan \
--ignore-gpu-blocklist \
https://exemple.com
--use-angle=vulkan: Chrome rend via Vulkan sur le GPU. Alternative :--use-gl=angle --use-angle=gl-egl(OpenGL ES via EGL), aussi rapide ;--ignore-gpu-blocklist: sans écran, Chrome considère souvent le GPU comme « non fiable » et se replie sur le CPU. Cette option l’en empêche ;- en root (cas courant sur un serveur ou dans Docker), ajoutez
--no-sandbox.
Ces options fonctionnent aussi sous Xvfb, si votre outil a besoin d’un vrai affichage X (voir notre guide Xvfb).
3. Vérifier que le GPU est utilisé
chrome://gpu n’est pas pratique sans écran. Ce petit fichier affiche le
moteur de rendu WebGL :
cat > /tmp/gl.html <<'EOF'
<script>
const g = document.createElement('canvas').getContext('webgl2');
const e = g && g.getExtension('WEBGL_debug_renderer_info');
document.write(g ? g.getParameter(e.UNMASKED_RENDERER_WEBGL) : 'PAS DE WEBGL');
</script>
EOF
chromium --headless=new --use-angle=vulkan --ignore-gpu-blocklist \
--no-sandbox --dump-dom file:///tmp/gl.html
Résultat attendu : ANGLE (Intel, Vulkan … Intel(R) UHD Graphics 770 …).
Si vous voyez SwiftShader, le GPU n’est pas utilisé.
4. Le gain, mesuré
Même page WebGL (shader plein écran en 1920×1080), images par seconde :
| Configuration | Rendu | Images/s |
|---|---|---|
--headless=new (défaut) | SwiftShader, CPU | 13 |
--use-angle=vulkan | UHD 770 | ~260 |
--use-gl=angle --use-angle=gl-egl | UHD 770 | ~230 |
Mesure faite sans limite de fréquence d’images (--disable-gpu-vsync --disable-frame-rate-limit), 10 rendus plein écran par frame, lecture d’un
pixel à chaque frame pour garantir que le rendu a vraiment eu lieu. Pendant
ce test, SwiftShader occupe 3,9 vCPU sur 4 ; le GPU, 0,6 vCPU. Le script est
public : webgl-bench.html. En usage normal, Chrome
se cale sur 60 images/s, que le GPU tient sans effort.
5. Playwright
// playwright.config.ts
export default defineConfig({
use: {
launchOptions: {
args: ['--use-angle=vulkan', '--ignore-gpu-blocklist'],
},
},
});
6. Puppeteer
const browser = await puppeteer.launch({
headless: true,
args: ['--use-angle=vulkan', '--ignore-gpu-blocklist', '--no-sandbox'],
});
7. Selenium (Python)
from selenium import webdriver
o = webdriver.ChromeOptions()
for a in ['--headless=new', '--use-angle=vulkan',
'--ignore-gpu-blocklist', '--no-sandbox']:
o.add_argument(a)
driver = webdriver.Chrome(options=o)
8. Dans Docker
Piège fréquent : l’image officielle Playwright ne contient pas le pilote
Vulkan Intel. Même avec les bonnes options et /dev/dri monté, Chrome y
retombe sur SwiftShader (vérifié avec Playwright 1.64). Ajoutez le pilote :
FROM mcr.microsoft.com/playwright:v1.64.1-noble
RUN apt-get update && apt-get install -y mesa-vulkan-drivers \
&& rm -rf /var/lib/apt/lists/*
Puis donnez le GPU au conteneur :
docker run --device /dev/dri \
--group-add "$(stat -c %g /dev/dri/renderD128)" \
-e ANV_SPARSE=0 \
mon-image-playwright npx playwright test
ANV_SPARSE=0 désactive une fonction Vulkan (« sparse ») qui provoque des
blocages GPU avec le pilote Mesa Intel dans une VM. Nos VM la désactivent
déjà ; un conteneur a son propre environnement, il faut donc la repasser.
Questions fréquentes
Et --disable-gpu que je vois partout ?
C’est l’inverse de ce que vous voulez : à retirer.
Faut-il --enable-features=Vulkan ?
Non, --use-angle=vulkan suffit avec les versions récentes de Chrome.
WebGPU ? Hors du périmètre de ce guide : les options ci-dessus couvrent WebGL, Canvas et la composition de page.
Essayer
Les serveurs Linux GPU ont un GPU Intel UHD 770 dans la VM, avec Mesa et Vulkan déjà installés. À partir de 14,99 € HT/mois, accès root, IPv6 dédiée, option cluster k3s pour paralléliser vos tests.