Build1 distinct publisher3 min readPublished
NVIDIA documents MIG as compute-only, so headless Chromium inside an H100 slice opens no GPU context at all and quietly falls back to CPU rasterising, which surfaces as a frame rate problem rather than a missing driver.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Start with the call that fails. Chromium's ANGLE backend asks the EGL or Vulkan loader for a device, and the loader answers out of the ICD registration files a driver installs; inside the MIG pod that Vulkan list was empty, according to the developer's account on dev.to [6][17]. With nothing to enumerate, ANGLE does the thing it is built to do and falls back to SwiftShader, its CPU rasteriser [3][6]. No error surfaces. The pod schedules, nvidia-smi prints the H100 and its MIG devices, and the frame counter is the only place the fault appears [5].
So the Chromium flags were never the variable. `--use-gl=angle` with egl and with vulkan produced the same fallback [6], because NVIDIA's spec puts graphics APIs outside MIG entirely: the partitions are compute-only, and the largest 7g.80gb profile draws exactly as many frames as the smallest [7]. A scheduler that can place the pod tells you nothing about whether a driver can draw.
Disabling MIG and taking the whole card is the theoretical fix, and it is worth reading what that buys. The H100 keeps only 2 graphics TPCs and has no NVENC [8], so H.264 encoding lands back on the CPU regardless. The developer also could not drain the slices, which were carrying LLM and speech inference at the time [9].
The 4fps figure is a claim about one scene on one rented CPU allocation, and the writeup does not name the CPU [3]. What transfers is the invariance. Frame rate did not move across 720p, 540p and 360p [4]; on the usual reading of those labels that is roughly a fourfold cut in pixels for no gain [16], which locates the cost in per-frame scene work such as skinning and draw setup rather than in fill. Plain WebGL held 60fps on the same software path [3]. If your scene is a couple of textured quads, SwiftShader may well be adequate. If it is a skinned character under a toon shader, the fallback plan of 540p at 24fps is already six times faster than what you actually have [15].
The second way to lose is quieter, because it produces the same log line on hardware that is fine. NVIDIA's container capability variable excludes graphics libraries by default, so a rendering-capable GPU handed to a container without `NVIDIA_DRIVER_CAPABILITIES=all` presents an empty ICD too [12]. That makes the acceptance test identical in both cases: `eglinfo` listing NVIDIA EGL devices, a non-empty `icd.d`, libglvnd present [12]. That test belongs before the instance is signed for, since CUDA core counts and VRAM in the catalogue do not expose any of it [10], and the writeup's own conclusion is to keep compute and rendering GPUs on separate books [13].
Ranked by verification strength, evidence, and original report placement.
Per NVIDIA's official spec, MIG is compute-only and does not support graphics APIs; this is a functionality issue rather than a performance one, so no amount of stacked slices, even the largest 7g.80gb, will render a single frame on the GPU.
"You need a GPU" covers two distinct scenarios: compute (training and inference, where working CUDA is sufficient) and rendering (3D rendering, gaming, video production, which requires OpenGL, Vulkan or EGL). Some models within NVIDIA's lineup can only handle one of the two.
The workload was an unmanned AI avatar streaming system: headless Chromium rendering a 3D avatar with WebGL, screen and audio capture, encoding to H.264 plus AAC with ffmpeg, then streaming to the platform over RTMP, running 24/7.
Chromium's SwiftShader is a CPU-based WebGL backend, so WebGL works without a GPU; plain WebGL ran at 60fps, but the 3D avatar scene using a toon shader and skinning managed only about 4fps.
Frame rate stayed at about 4fps at 720p, 540p and 360p, so the bottleneck was scene processing rather than pixel processing, and the planned fallback of 540p at 24fps was useless from the start.
The cluster's H100 was divided into 1g.10gb MIG slices for LLM and speech inference; a renderer test Pod scheduled successfully on a free slice and nvidia-smi inside the Pod showed the H100 and MIG devices, but Chromium's WebGL still fell back to SwiftShader.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 28, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
product
The GPU fleet's utilisation now hinges on which tenants you dare pack together1 distinct publisher
build
Four concurrent MPS processes fill the L40S that one ASR request leaves 80% idle1 distinct publisher
build
Five pods green, GPU at 99 percent, queue up 70x: the Kubernetes dashboard is the wrong instrument1 distinct publisher
build
China's accelerator swap makes Cambricon supply, not export policy, your ship-date risk1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Own measurements solid, vendor specs borrowed
The numbers carrying this story are the author's own and unusually falsifiable: 60fps for plain WebGL against about 4fps for the avatar scene, flat across three resolutions, and an empty Vulkan driver registry that explains why every Chromium flag failed identically. The weaker material is everything quoted rather than run — MIG's compute-only status, the H100's two graphics TPCs, its missing encoder — none of which arrives with documentation a reader can open.
One pipeline, moved once
What is actually deployed here is a single 24/7 avatar stream and a single cluster: an H100 sliced into 1g.10gb instances for inference, a renderer that failed there, and a rented RTX Ada machine that took over at 720p30. That is a real before-and-after rather than a proposal, which counts for something — but no second team, provider or workload appears anywhere in this reporting.
Sold as a war story, reads as a warning
The headline promises exactly what the evidence delivers — a borrowed H100 that drew nothing — and the recommendation runs against the usual grain by pointing at a sub-thirty-cent-an-hour card. If anything the framing undersells the reach: a silent CPU fallback that surfaces only as a frame rate applies to any containerised browser-render stack, not just one hobbyist avatar, and the post files it under personal failure.
Nothing on sale but a blog
This is a developer cross-posting his own Japanese write-up, and the only thing being promoted is that blog; no vendor, cloud or product stands to gain from the conclusion, which in fact steers spending away from the flagship part. The one soft spot is a specific price band attached to specific cards with the provider unnamed and no relationship stated either way.
Specific and coherent, entirely unreplicated
Take the mechanism as likely and the details as unaudited. The chain — compute-only slice, no EGL or Vulkan driver to bind, Chromium quietly choosing SwiftShader, a frame rate that ignores resolution — hangs together and is specific enough that someone with a MIG-enabled H100 could refute it in an afternoon. Nobody has. One author, one cluster, one publisher, and the vendor documentation at the centre of it still unseen.