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...
Read more »
SpiritualCreations42