The tests that needed accelerators never ran in CI, and most of what they check does not depend on GPU speed, so they move to real vLLM CPU servers inside the existing E2E Test on change job. This is the #703 pattern (a CPU vLLM as the real-server oracle, implemented for token accounting and /metrics in #697) applied to the rest of the accelerator-backed surface.
What was accelerator-backed
tests/optional, the hand-run @pytest.mark.live tier: eight multimodal cases (images, video, mixed, frame sampling, two shared-prefix variants, VisionArena, audio) and one text chat case, each deploying Qwen3-VL-8B or Qwen2-Audio-7B on an H100 node through deploy/manifests.yaml and asserting that every request completes. With no accelerator capacity in CI (#641), the tier ran only when someone ran it by hand, so changes to multimodal payload building shipped with no real-server check.
The rule for what moves
Fake the conditions, never the oracle (#606): a case moves when its oracle is the server accepting a payload, or the server's own numbers, because neither depends on model size or speed, and the sim cannot stand in (it matches multimodal blocks by type string and never decodes bytes). A case stays on a cluster only when the cluster is the oracle.
Work
Stays accelerator-backed, on purpose
Part of the v0.7.0 release (#606), Test infrastructure and gating.
The tests that needed accelerators never ran in CI, and most of what they check does not depend on GPU speed, so they move to real vLLM CPU servers inside the existing
E2E Test on changejob. This is the #703 pattern (a CPU vLLM as the real-server oracle, implemented for token accounting and/metricsin #697) applied to the rest of the accelerator-backed surface.What was accelerator-backed
tests/optional, the hand-run@pytest.mark.livetier: eight multimodal cases (images, video, mixed, frame sampling, two shared-prefix variants, VisionArena, audio) and one text chat case, each deploying Qwen3-VL-8B or Qwen2-Audio-7B on an H100 node throughdeploy/manifests.yamland asserting that every request completes. With no accelerator capacity in CI (#641), the tier ran only when someone ran it by hand, so changes to multimodal payload building shipped with no real-server check.The rule for what moves
Fake the conditions, never the oracle (#606): a case moves when its oracle is the server accepting a payload, or the server's own numbers, because neither depends on model size or speed, and the sim cannot stand in (it matches multimodal blocks by type string and never decodes bytes). A case stays on a cluster only when the cluster is the oracle.
Work
e2e/tests/test_vllm_cpu_multimodal.pyagainstOpenGVLab/InternVL3-1B-hf(image + video) andibm-granite/granite-4.0-1b-speech(audio), run by amultimodal-e2ejob on ARM runners per release ine2e/vllm_multimodal_releases.txt, merge-blocking from its first run.tests/optionalkeepstext/chatonly.Stays accelerator-backed, on purpose
tests/optional/text/chat: the deploy path itself (manifests, published image, ConfigMap, Job on a GPU node) is the oracle, and nothing else exercises it. Hand-run with--kubeconfigs.-intel-cpuimage and can follow later. Neither is vLLM, so both are out of scope here.Part of the v0.7.0 release (#606), Test infrastructure and gating.