Ejecutar Chrome con GPU en un servidor Linux
Por defecto, Chrome en modo headless no usa la GPU, aunque el servidor tenga una. Renderiza WebGL con SwiftShader, una GPU emulada en la CPU: lento, y además ocupa los núcleos que necesitan tus pruebas. Bastan dos opciones para cambiarlo.
Probado el 29/10/2026 en un servidor Linux GPU (Intel UHD 770, Debian 13, 4 vCPU) con Chromium 156, y Playwright 1.64 en Docker.
1. Requisitos previos
apt install chromium # o google-chrome-stable: mismas opciones
ls /dev/dri # debe mostrar renderD128
Si usas un usuario que no es root, añádelo al grupo render para que pueda
abrir la GPU: usermod -aG render,video miusuario.
2. El comando
chromium --headless=new \
--use-angle=vulkan \
--ignore-gpu-blocklist \
https://example.com
--use-angle=vulkan: Chrome renderiza mediante Vulkan en la GPU. Alternativa:--use-gl=angle --use-angle=gl-egl(OpenGL ES mediante EGL), igual de rápida;--ignore-gpu-blocklist: sin pantalla, Chrome suele considerar la GPU «poco fiable» y recurre a la CPU. Esta opción lo impide;- como root (lo habitual en un servidor o en Docker), añade
--no-sandbox.
Estas opciones también funcionan bajo Xvfb, si tu herramienta necesita un display X real (consulta nuestra guía de Xvfb).
3. Comprobar que se usa la GPU
chrome://gpu no es práctico sin pantalla. Este pequeño archivo muestra el
motor de renderizado 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) : 'SIN WEBGL');
</script>
EOF
chromium --headless=new --use-angle=vulkan --ignore-gpu-blocklist \
--no-sandbox --dump-dom file:///tmp/gl.html
Resultado esperado: ANGLE (Intel, Vulkan … Intel(R) UHD Graphics 770 …).
Si ves SwiftShader, la GPU no se está usando.
4. La ganancia, medida
Misma página WebGL (shader a pantalla completa en 1920×1080), imágenes por segundo:
| Configuración | Renderizado | Imágenes/s |
|---|---|---|
--headless=new (por defecto) | SwiftShader, CPU | 13 |
--use-angle=vulkan | UHD 770 | ~260 |
--use-gl=angle --use-angle=gl-egl | UHD 770 | ~230 |
Medición hecha sin límite de frecuencia de imagen (--disable-gpu-vsync --disable-frame-rate-limit), 10 renderizados a pantalla completa por frame,
lectura de un píxel en cada frame para garantizar que el renderizado se ha
hecho de verdad. Durante esta prueba, SwiftShader ocupa 3,9 vCPU de 4; la GPU,
0,6 vCPU. El script es público: webgl-bench.html.
En uso normal, Chrome se ajusta a 60 imágenes/s, que la GPU mantiene sin
esfuerzo.
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. En Docker
Trampa habitual: la imagen oficial de Playwright no incluye el driver
Vulkan de Intel. Incluso con las opciones correctas y /dev/dri montado,
Chrome vuelve a SwiftShader (comprobado con Playwright 1.64). Añade el driver:
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/*
Después dale la GPU al contenedor:
docker run --device /dev/dri \
--group-add "$(stat -c %g /dev/dri/renderD128)" \
-e ANV_SPARSE=0 \
mi-imagen-playwright npx playwright test
ANV_SPARSE=0 desactiva una función de Vulkan («sparse») que provoca
bloqueos de la GPU con el driver Mesa de Intel dentro de una VM. Nuestras VM ya
la desactivan; un contenedor tiene su propio entorno, así que hay que volver a
pasarla.
Preguntas frecuentes
¿Y el --disable-gpu que veo por todas partes?
Es justo lo contrario de lo que quieres: quítalo.
¿Hace falta --enable-features=Vulkan?
No, --use-angle=vulkan basta con las versiones recientes de Chrome.
¿WebGPU? Queda fuera del alcance de esta guía: las opciones anteriores cubren WebGL, Canvas y la composición de la página.
Probar
Los servidores Linux GPU tienen una GPU Intel UHD 770 dentro de la VM, con Mesa y Vulkan ya instalados. Desde 14,99 €/mes sin IVA, acceso root, IPv6 dedicada, opción clúster k3s para paralelizar tus pruebas.