KyleHessling1/v100-homelab-field-guide

Space

14

stars

5

commits

Aug 30, 2026

updated

dflash2
guide
homelab
llama.cpp
speculative-decoding
static
tesla-v100
Browse cluster: LLM Inference Optimization & Speculative Decoding

README

The V100 Homelab Field Guide

Getting a used PCIe Tesla V100 32GB from "just arrived in the post" to 60+ tokens/sec on a 27B dense model, on Pop!_OS, with llama.cpp.

Everything in here was hit for real on one build — the driver that won't load, the phantom hang that isn't a hang, the passive heatsink with no fan, and the flags that silently undo each other.

What's here

  • index.html — the full illustrated guide: quick recipe, big takeaways, and the complete annotated build log with every gotcha.
  • V100-DUAL-GPU-COMPLETE-GUIDE.md — the same material as a plain markdown reference, if you'd rather grep it than read it.

Before you order anything

The PCIe V100's single 8-pin power socket is not a standard PCIe 8-pin — you cannot plug a normal PSU lead into it. You need an adapter that converts it to two PCIe 8-pin connections, fed from two separate PSU cables (the card pulls 250W; one PCIe 8-pin is rated ~150W).

The one used here: COMeap 8-pin to dual PCIe 8-pin (6+2). Order it with the card — it's easy to miss and it blocks the whole build.

The short version

sudo apt install nvidia-driver-580        # Volta needs the proprietary driver
export CUDA_DEVICE_ORDER=PCI_BUS_ID       # do this before anything else
sudo nvidia-smi -e 0                      # ECC off (one reboot, then permanent)
sudo nvidia-smi -pm 1 -pl 250             # persistence + full power
sudo nvidia-smi -lgc 1380                 # lock clocks (check YOUR card's max)

Build llama.cpp dual-arch with gcc-10 (-DCMAKE_CUDA_ARCHITECTURES="70;86"), then:

CUDA_DEVICE_ORDER=PCI_BUS_ID CUDA_VISIBLE_DEVICES=0 \
./build/bin/llama-server \
  -m target-Q4_K_M.gguf -md dflash2-draft.gguf \
  -ngl 99 -ngld 99 \
  --spec-type draft-dflash --spec-draft-n-max 4 \
  -c 114688 -np 1 -fa on --jinja -b 512 -ub 256 \
  --reasoning on --reasoning-format deepseek --reasoning-effort low

Headline findings

FindingDetail
Power caps aren't universally freeIdentical throughput at 150W vs 250W on sparse MoE; 15–30% cost on dense + speculative decoding
ECC-off helps unevenlyMTP +12.5%, DFlash2 +4.3% — different bottlenecks
Method ranking flips with power stateMTP wins at 150W; DFlash2 wins at 250W + ECC off
Reasoning halves throughput~55 tok/s → 24–32 tok/s, near-identically for both methods
Manual placement flags break auto-fit-ncmoe / -ot / --tensor-split disable it entirely → OOM on device 0
KV cache is cheap on GQA models8K → 128K context cost only ~7.5 GB

Questions

Building one of these? Find me at @kylehessling1 — happy to help anyone getting a V100 running, and equally happy to be told what we got wrong.


Measured August 2026. Single-run samples throughout — treat small differences as noise.

Contributors

KyleHessling1

5 commits

KyleHessling1/v100-homelab-field-guide

Space

14

stars

5

commits

Aug 30, 2026

updated

dflash2
guide
homelab
llama.cpp
speculative-decoding
static
tesla-v100
Browse cluster: LLM Inference Optimization & Speculative Decoding

README

The V100 Homelab Field Guide

Getting a used PCIe Tesla V100 32GB from "just arrived in the post" to 60+ tokens/sec on a 27B dense model, on Pop!_OS, with llama.cpp.

Everything in here was hit for real on one build — the driver that won't load, the phantom hang that isn't a hang, the passive heatsink with no fan, and the flags that silently undo each other.

What's here

  • index.html — the full illustrated guide: quick recipe, big takeaways, and the complete annotated build log with every gotcha.
  • V100-DUAL-GPU-COMPLETE-GUIDE.md — the same material as a plain markdown reference, if you'd rather grep it than read it.

Before you order anything

The PCIe V100's single 8-pin power socket is not a standard PCIe 8-pin — you cannot plug a normal PSU lead into it. You need an adapter that converts it to two PCIe 8-pin connections, fed from two separate PSU cables (the card pulls 250W; one PCIe 8-pin is rated ~150W).

The one used here: COMeap 8-pin to dual PCIe 8-pin (6+2). Order it with the card — it's easy to miss and it blocks the whole build.

The short version

sudo apt install nvidia-driver-580        # Volta needs the proprietary driver
export CUDA_DEVICE_ORDER=PCI_BUS_ID       # do this before anything else
sudo nvidia-smi -e 0                      # ECC off (one reboot, then permanent)
sudo nvidia-smi -pm 1 -pl 250             # persistence + full power
sudo nvidia-smi -lgc 1380                 # lock clocks (check YOUR card's max)

Build llama.cpp dual-arch with gcc-10 (-DCMAKE_CUDA_ARCHITECTURES="70;86"), then:

CUDA_DEVICE_ORDER=PCI_BUS_ID CUDA_VISIBLE_DEVICES=0 \
./build/bin/llama-server \
  -m target-Q4_K_M.gguf -md dflash2-draft.gguf \
  -ngl 99 -ngld 99 \
  --spec-type draft-dflash --spec-draft-n-max 4 \
  -c 114688 -np 1 -fa on --jinja -b 512 -ub 256 \
  --reasoning on --reasoning-format deepseek --reasoning-effort low

Headline findings

FindingDetail
Power caps aren't universally freeIdentical throughput at 150W vs 250W on sparse MoE; 15–30% cost on dense + speculative decoding
ECC-off helps unevenlyMTP +12.5%, DFlash2 +4.3% — different bottlenecks
Method ranking flips with power stateMTP wins at 150W; DFlash2 wins at 250W + ECC off
Reasoning halves throughput~55 tok/s → 24–32 tok/s, near-identically for both methods
Manual placement flags break auto-fit-ncmoe / -ot / --tensor-split disable it entirely → OOM on device 0
KV cache is cheap on GQA models8K → 128K context cost only ~7.5 GB

Questions

Building one of these? Find me at @kylehessling1 — happy to help anyone getting a V100 running, and equally happy to be told what we got wrong.


Measured August 2026. Single-run samples throughout — treat small differences as noise.

Contributors

KyleHessling1

5 commits