Racks & WattsLOCAL HARDWARE / CLEAR PICKS

Lab notes · September 25, 2026

GPU bench notes, September 2026

The raw numbers our articles cite. Read the method first; repeat it before you trust us.

Bench under test

A desktop board with two NVIDIA cards installed together: a GeForce RTX 3060 Ti 8 GB (PCIe x4 slot) and a GeForce RTX 2060 6 GB (PCIe x16 slot). Both cards run under a software power cap set with nvidia-smi -pl: 150 W on the 3060 Ti and 125 W on the 2060, the 2060's minimum. For these first runs roughly 3 GB of the 2060's memory was already taken by another workload, so Ollama had about 3 GB of the 2060 and all 8 GB of the 3060 Ti to work with. (The card-vs-card runs further down had both cards empty.) Ollama 0.34.2 in Docker, models from the Ollama library, Q4_K_M quantisation. Driver telemetry sampled with nvidia-smi --query-gpu during generation. Idle GPU draw is the driver's reported board power with no model loaded, not wall power.

Method

One request to /api/generate with stream:false and num_predict:320, a 40-word prompt, after one warm-up run of the same model. Tokens per second is Ollama's own eval_count / eval_duration. Prompt processing is prompt_eval_count / prompt_eval_duration. Power and temperature were sampled once mid-generation. Single runs, so treat ±5% as noise.

Results

Model (Q4_K_M)Weights on diskWhere it ranGenerationPromptGPU power during runGPU temp
qwen2.5:7b4.4 GBRTX 3060 Ti, fully in VRAM (4.6 GB used)76.3 tok/s3,847 tok/s149.6 W (at the 150 W cap)51 °C
llama3.1:8b4.6 GBRTX 3060 Ti, fully in VRAM (5.0 GB used)73.9 tok/s515 tok/s (cold prompt cache)149.9 W51 °C
qwen2.5:14b8.4 GBSplit: 6.7 GB on the 3060 Ti + 1.7 GB on the 2060; ~0.5 GB spilled to CPU24.9 tok/s1,293 tok/s117.7 W + 39.4 W49 °C / 43 °C

Idle board power with no model loaded: RTX 3060 Ti 16.8 W, RTX 2060 6.6 W (driver-reported). Idle temperatures 40 °C and 37 °C in a case with poor airflow. Earlier in the week, with the 2060 idle and both cards available, the same 14B model ran fully in VRAM across the two cards at about 38 tok/s; the 25 tok/s above is what a partial CPU spill costs.

Power-limit sweep: RTX 3060 Ti, qwen2.5:7b

Same card, same model, five software power caps set with nvidia-smi -i <GPU> -pl <W>. At each cap: three generation runs of 512 tokens (seed 1, temperature 0) after one warm-up; driver telemetry sampled every 250 ms during each run. Tokens per second is the mean of the three runs; draw is the mean of samples above 40 W across runs two and three (run one includes ramp-up); temperature is the peak across all three runs. The runs went from lowest to highest cap back to back, so the later steps started warmer. The card went back to its 150 W cap afterwards.

CapGenerationAvg draw under loadTokens per wattAvg core clockPeak tempvs stock 200 W
100 W (card minimum)58.8 tok/s99.6 W0.591,092 MHz50 °C−24% speed, −49% power
125 W72.3 tok/s122.5 W0.591,516 MHz53 °C−7% speed, −37% power
150 W75.5 tok/s145.4 W0.521,675 MHz57 °C−3% speed, −25% power
175 W76.9 tok/s172.0 W0.451,789 MHz61 °C−1% speed, −11% power
200 W (stock)77.8 tok/s193.4 W0.401,855 MHz66 °Cbaseline

For interpreting driver clock-event flags, see the SW Power Cap diagnostic guide. Its counter-duration example is hypothetical and separate from the measured sweep here.

Memory clock stayed at 6,801 MHz at every cap. The cap only pulled the core clock down, and token generation on a 7B model is mostly limited by memory bandwidth, which is why the first 75 W of cuts cost so little speed.

Card vs card: RTX 3060 Ti and RTX 2060, each on its own

Measured September 25, 2026, late evening. Each card got its own Ollama 0.34 instance pinned to that card alone, with the same settings as our everyday setup (flash attention on, q8_0 KV cache), and nothing else loaded on either GPU. Same prompt and method as the sweep above: three 512-token runs per row (seed 1, temperature 0) after a warm-up; speed is the mean of the three runs, draw is the mean of runs two and three, temperature is the peak. "On GPU" is Ollama's own report of how much of the model sat in the card's memory; the rest ran on the CPU. The RTX 2060's software power range is 125–170 W (170 W stock); the 3060 Ti's is 100–220 W (200 W stock).

Model (Q4_K_M)Card · capGenerationOn GPUGPU drawTokens per wattPeak temp
qwen2.5:7bRTX 3060 Ti · 150 W75.8 tok/s100%144.2 W0.5356 °C
RTX 3060 Ti · 200 W77.9 tok/s100%191.9 W0.4162 °C
RTX 2060 · 125 W57.7 tok/s100%121.5 W0.4764 °C
RTX 2060 · 170 W59.1 tok/s100%165.6 W0.3680 °C
llama3.1:8bRTX 3060 Ti · 150 W73.6 tok/s100%148.0 W0.5051 °C
RTX 3060 Ti · 200 W75.3 tok/s100%191.4 W0.3959 °C
RTX 2060 · 125 W44.8 tok/s86%54.7 Wn/a (CPU shares the work)54 °C
RTX 2060 · 170 W45.0 tok/s86%51.1 Wn/a54 °C
qwen2.5:14bRTX 3060 Ti · 150 W14.5 tok/s71%68.7 Wn/a48 °C
RTX 3060 Ti · 200 W14.5 tok/s71%68.8 Wn/a47 °C
RTX 2060 · 125 W8.6 tok/s48%39.5 Wn/a52 °C
RTX 2060 · 170 W8.6 tok/s48%40.6 Wn/a54 °C

Idle board power with no model loaded, same night: RTX 3060 Ti 16.5 W, RTX 2060 6.9 W. Tokens per watt is only shown where the whole model sat on the card; once part of it runs on the CPU, GPU watts no longer describe the work.

These generation results describe language models, not speech synthesis. The ElevenLabs versus Kokoro and Piper guide separates documented speech-output costs and requirements from latency measurements that would need a separate test.

Memory, firmware and unattended boot (the same bench, late September 2026)

Read from the machine itself with dmidecode, ethtool, nmcli, systemd-analyze and the kernel log on September 26, 2026. Nothing here is a vendor number.

WhatReading
Board / firmwareGigabyte B450M DS3H V2, firmware F62b (dated 2021-09-06)
CPUAMD Ryzen 5 5600G (12 threads)
Memory installedFour DIMMs, two different kits: 2 × 8 GB Corsair CMK16GX4M2B3200C16 (single-rank) + 2 × 16 GB Samsung-labelled 16GXMP3200CL16 (dual-rank) = 48 GB
Memory speedAll four reported at 3200 MT/s configured speed (XMP enabled in firmware); firmware reports 1.2 V configured voltage
Stability3 days 13 hours continuous uptime under GPU and LLM load with zero machine-check or memory-error entries in the kernel log (only the EDAC/MCE driver start-up lines)
Boot to fully up24.6 s total: firmware 8.2 s, loader 1.0 s, kernel 2.7 s, initrd 2.1 s, userspace 10.6 s
Wake-on-LANNIC supports p/u/m/b/g; set to g (magic packet) and persisted with NetworkManager wake-on-lan magic
Power lossFirmware set to power the machine back on when AC power returns (the board has no front-panel button connected)
Self-recoverysystemd hardware watchdog RuntimeWatchdogSec = 1 min; kernel.panic = 10 (reboot 10 s after a panic); sleep and suspend targets masked

Boot recovery does not establish a secure remote-access path. For a generic bench, the Tailscale versus Cloudflare Tunnel guide explains access models, authentication and provider visibility separately from the recovery settings above.

What these numbers say

Measured September 25, 2026. We re-run these when the hardware or Ollama version changes.