Why this build
The Tesla P4 is a 75 W, passively cooled, half-height data-center card that is very cheap used. A small-form-factor PC has no PCIe slot, but the HP ProDesk 600 G5 Mini does have two M.2 slots, and OCuLink turns each one into an external PCIe x4 link. Pascal (compute capability 6.1) still runs current CUDA drivers, and the P4 has no artificial NVENC concurrent-session cap. The result is a compact, low-power box for local LLM inference, speech-to-text, transcoding and training experiments, with 16 GB of GPU memory for about $600.
How it fits together
- Each M.2 slot in the ProDesk carries an M.2-to-OCuLink adapter, which feeds a JHH OCuLink PCIe 4.0 x4 dock. Each dock holds one Tesla P4.
- Each dock has its own 120 W Pico PSU on its 24-pin header. Both Pico PSUs run from a single 12 V 300 W supply.
- The ProDesk is powered separately by a 90 W universal laptop power brick.
- A XIAO microcontroller polls nvidia-smi for GPU temperature and drives a Thermalright 12-port fan hub, which feeds nine 60 mm fans.
- Storage: a 2 TB PNY 2.5 inch SATA SSD for boot, plus a 512 GB KingSpec NX NVMe drive in a fan-cooled ORICO 40 Gbps enclosure on the USB-C port.
Bill of materials (about $600 total, mostly used parts)
| Item | Qty | Notes |
|---|---|---|
| HP ProDesk 600 G5 Mini, barebones | 1 | Bought on eBay. Both M.2 slots used for the GPU links. Case modded to carry three fans |
| NVIDIA Tesla P4 8 GB | 2 | Used data-center pulls, bought on eBay |
| M.2 to OCuLink adapter | 2 | One per M.2 slot |
| JHH OCuLink PCIe 4.0 x4 dock | 2 | One per GPU. DIP switches for power-on and reset delay |
| 120 W Pico PSU (24-pin ATX) | 2 | One per dock |
| 12 V 300 W power supply | 1 | Feeds both Pico PSUs |
| 90 W universal laptop power brick | 1 | Powers the ProDesk |
| PNY 2 TB 2.5 inch SATA SSD | 1 | Boot drive |
| KingSpec NX 512 GB NVMe SSD | 1 | External data drive |
| ORICO 40 Gbps NVMe enclosure, with fan | 1 | USB-C. Negotiated 10 Gbps on the ProDesk when checked |
| Thermalright 60 x 60 x 25 mm fans, black | 9 | Three per GPU, plus three on the modded ProDesk case |
| Copper-fin heatsink | 2 | Replaces the stock P4 heatsink |
| XIAO microcontroller | 1 | Polls GPU temperature and sets fan speed |
| Thermalright 12-port fan hub | 1 | Distributes the PWM signal to all fans |
| Digital fan-speed readout | 1 | Shows speed as a percentage |
PCIe link (measured)
Both cards link at x4, the most an M.2 slot can offer. The docks are PCIe 4.0 capable, but the P4 is a PCIe 3.0 card, so the link runs at Gen 3. At idle the link drops to a lower speed to save power, so check it under load for the real figure.
| GPU | PCI address | Root port | Negotiated link |
|---|---|---|---|
| GPU 0 | 01:00.0 | 00:1b.0 | x4, Gen 3 under load (Gen 1 at idle) |
| GPU 1 | 02:00.0 | 00:1b.4 | x4, Gen 3 (8 GT/s) |
The two cards sit behind separate PCH root ports, so each has its own link.
Power
The Tesla P4 has a 75 W power limit, confirmed with nvidia-smi, and is powered through its dock. Idle readings: GPU 0 about 6.4 W, GPU 1 about 23.7 W (light load at the time). Under sustained LLM inference on both cards, peak GPU power was 61.6 W (GPU 0) and 64.9 W (GPU 1), below the 75 W limit.
Cooling
The P4 is built for server airflow, so the stock heatsink comes off. Each card gets a copper-fin heatsink and three 60 mm fans in a cut-out shroud. Three more fans are fitted to the modded ProDesk case. All nine fans run from one Thermalright 12-port hub, and a XIAO sets the fan speed automatically from GPU temperature. The GPU driver reports fan speed as N/A because the fans are external.
Idle temperatures: GPU 0 32 C, GPU 1 38 C. Peak under sustained inference on both cards: 61 C (GPU 0) and 59 C (GPU 1).
Software
Readings were taken while the machine ran from bench-test drives, so OS-level details may differ with the final drives.
| Item | Value |
|---|---|
| OS | Ubuntu 26.04.1 LTS, kernel 7.0.0-42 |
| NVIDIA driver | 580.178.04 (proprietary, from the Ubuntu repos), CUDA 13.0 |
| Docker | 29.9.2, Compose v5.6.1, NVIDIA Container Toolkit 1.20.1 |
| Services (Docker Compose) | Ollama, Open WebUI, Meshroom, nvidia_gpu_exporter, node_exporter |
Benchmarks
These are LLM inference runs through Ollama, not a synthetic burn-in, so treat them as a realistic sustained inference load and not the worst case a P4 can produce.
Single GPU: hermes3:8b (4.7 GB, 4-bit) on one P4, about 90 seconds of back-to-back 400-token generations: about 27.7 tokens/s generation (steady over 4 runs), about 600 tokens/s prompt processing (warm), peak 60.6 W and 54 C, SM clock 1113 MHz at 99% utilisation.
Both GPUs at once: hermes3:8b on one card and qwen3:4b-instruct on the other, generating continuously for about 2.5 minutes.
| GPU 0 | GPU 1 | |
|---|---|---|
| Utilisation | up to 99% | up to 98% |
| Power (peak / mean under load) | 61.6 W / 59.0 W | 64.9 W / 62.4 W |
| Temperature (start to peak) | 46 to 61 C | 39 to 59 C |
| SM clock under load | 1113 MHz, steady | 1113 MHz, steady |
| PCIe link | Gen 3 x4 | Gen 3 x4 |
Neither card reached its 75 W limit, because token generation is memory-bound. Temperatures fell back to about 50 C within a minute of unloading the models. The SM clock stayed flat at 1113 MHz (card maximum 1531 MHz) while temperatures were well below the limit, which points to a power-state clock for this kind of load. Throttle reasons were not captured, so that is not confirmed.
Safety
This build uses an external 12 V supply feeding ATX-style power modules, and bare GPU cards on a shelf. The cards are open to the air, so keep fingers, metal and liquids away. Do not run the GPUs without the fans, and use a power supply rated for the load. You build and run this at your own risk.
What is next
- Full-power burn test with throttle reasons logged
- Per-model tokens/s with both GPUs loaded at once
- Wall power draw, idle and loaded
- Whisper speech-to-text and NVENC transcoding benchmarks
- A small training run
- Part numbers and prices in the bill of materials, shroud dimensions, dock DIP-switch settings and compose files
Source files and license
Everything is in the GitHub repo: github.com/SpiritualCreations42/eve-v2. Code is MIT, and documentation and photos are CC BY-SA 4.0. The Spiritual Creations name, logo and label artwork are not covered by those licenses.
Built by Spiritual Creations, a veteran-owned business.
SpiritualCreations42