Running a Jev-Style Decision Model on One TPU v6e: What Fits, What It Costs, and What Changes From a GPU A developer benchmarked a Jev-style decision read of Gemma 4 on a single Google Cloud TPU v6e chip with vLLM, finding that the E2B, E4B and 12B checkpoints fit at bf16 while the 26B-A4B fp8 build also loads, but no 31B checkpoint fits. The TPU produced identical answers to an NVIDIA L4 GPU and decided the 26B model in 27–33 ms versus 61 ms on the L4, though on-demand TPU pricing costs more per decision, making 12B the recommended size. This article provides a step by step guide to running a Jev-style decision model on one Google Cloud TPU v6e chip with Gemma 4 and vLLM, and compares it with the same read on one NVIDIA L4 GPU. The measurement was pre-registered, and every per-item output is committed. One v6e chip serves Gemma 4 E2B, E4B and 12B at bf16 and a 26B-A4B fp8 build; no 31B checkpoint loads. The same checkpoints give the same answers on the TPU and the L4, and the 26B decides in 27 to 33 ms against 61 ms on the L4. On demand, the TPU costs more per decision than the L4 or Jev; 12B is the size to pick. https://github.com/xbill9/gemma4-dev/tree/main/jev-tpu https://github.com/xbill9/gemma4-dev/tree/main/jev-tpu A Jev-style decision model answers a typed question with a probability for each allowed option: end the prompt where the answer starts, read the scores of the allowed label tokens, and apply a softmax over those. TypeSafe's Jev does this as a hosted service, and any open model can be read the same way. A companion article https://dev.to/gde/plain-gemma-4-26b-vs-jev-on-one-ec2-l4-21-points-behind-overall-level-on-yesno-45-behind-on-15k6 measured this read on one NVIDIA L4 and set it beside Jev's published results. This one asks what changes on a TPU: which Gemma 4 sizes fit one v6e chip, whether the read works the same way, and what the chip buys in speed and cost. ct6e-standard-1t , and the gcloud CLI logged in hf-token , readable by the Compute Engine default service account BUCKET in tpu/run.sh and tpu/startup.sh git clone https://github.com/xbill9/gemma4-dev and cd gemma4-dev/jev-tpu The models, image, serving flags, data, metrics and the order of the quantized attempts are written down and committed before any model call, in PREREGISTRATION.md ; each departure from it is recorded there with a date before the affected results are scored. git show -s --oneline e0cce69 4937fb8 e0cce69 jev-tpu: sibling of jev for one TPU v6e chip — copied read, data, suite and scoring code proxy byte-identical ; pre-registration for E2B/E4B/12B bf16 and exploratory quantized 26B-A4B/31B probes 4937fb8 jev-tpu: VM boot, serve and run drivers; pre-registration amended before any model call — suite built locally at 0e67403 13/13 checksums and re-checked on the VM One v6e chip has 31.24 GiB of memory, of which vLLM uses up to 28.74 GiB: Memory statistics | total hbm limit gb=31.24GiB | total hbm limit cap gb=28.74GiB | total hbm used gb=24.56GiB | total hbm avail gb=4.19GiB E2B, E4B and 12B fit at bf16. The 26B-A4B and 31B do not, so the pre-registration lists quantized builds to try in order: | Size | Checkpoint | Format | Size on disk | |---|---|---|---| | E2B | google/gemma-4-E2B-it | bf16 | | | E4B | google/gemma-4-E4B-it | bf16 | | | 12B | google/gemma-4-12B-it | bf16 | | | 26B-A4B | RedHatAI/gemma-4-26B-A4B-it-FP8-dynamic | fp8 | 26.67 GiB | | 31B | google/gemma-4-31B-it-qat-w4a16-ct | w4a16 | 21.67 GiB | | 31B | cyankiwi/gemma-4-31B-it-AWQ-4bit | 4-bit | 19.47 GiB | The 31B fp8 builds are 30.98 GiB, over the chip's usable memory, and were not tried. The VM runs the whole measurement from its startup script, fetching the code and the suite from Cloud Storage, and deletes itself when the run ends. gcloud compute instances create jev-tpu-v6e1 --zone europe-west4-a \ --machine-type ct6e-standard-1t \ --image-family ubuntu-accel-2204-amd64-tpu-v5e-v5p-v6e --image-project ubuntu-os-accelerator-images \ --boot-disk-size 200GB --scopes cloud-platform --maintenance-policy TERMINATE \ --provisioning-model STANDARD --max-run-duration 6h --instance-termination-action DELETE \ --metadata jev-code=