Hardware

Everything in NaviMed-UMB runs on one workstation built from parts anyone can buy. No datacentre accelerators, no cloud. This page documents what it is, how it is wired, and what was measured on it.

Wszystko w NaviMed-UMB działa na jednej stacji roboczej złożonej z podzespołów dostępnych w sklepie. Bez akceleratorów serwerowych, bez chmury. Ta strona dokumentuje, co to jest, jak jest połączone i co na tym zmierzono.

Bill of materials

Zestawienie podzespołów

ComponentPodzespół ModelModel
CPUProcesorAMD Ryzen 9 9950X3D (16C/32T, 3D V-Cache)(16 rdzeni / 32 wątki, 3D V-Cache)
GPUKarty graficzne2× GIGABYTE Radeon AI PRO R9700 AI TOP 32G (gfx1201, RDNA 4)
MotherboardPłyta głównaASUS ProArt X870E-Creator WiFi
RAMPamięćCorsair 96 GB (2×48 GB) DDR5-6000 CL30, EXPO II
StorageDyskiGOODRAM PX700 4 TB NVMe (primary)(główny) + 1 TB
PSUZasilaczFSP PTM PRO 1650 W 80+ Platinum, ATX 3.1 (IEC C20)
CPU coolingChłodzenie CPUNoctua NL-LC1-42 (420 mm AIO, 3× NF-A14x25 G2, Asetek Emma V2 pump)(AIO 420 mm, 3× NF-A14x25 G2, pompa Asetek Emma V2)
Case fansWentylatory obudowy2× Noctua NF-A14 140 mm
CaseObudowaASUS ProArt PA602
UPSUPSARMAC OFFICE ON-LINE PF1 2000VA (VFI double conversion)(VFI, podwójna konwersja)
OS / kernelSystem / jądroKubuntu 24.04 LTS · 7.0.0-30-generic
Compute stackStos obliczeniowyROCm 7.2.0 · vLLM 0.19.0+rocm721

PCIe topology

Topologia PCIe

Two graphics cards on a consumer platform share the CPU's sixteen graphics lanes. The allocation that actually results is the single most consequential number on this page, because it sets the ceiling on tensor-parallel inference.

Dwie karty graficzne na platformie konsumenckiej dzielą szesnaście linii graficznych procesora. To, jak ten podział wypadnie w praktyce, jest najważniejszą liczbą na tej stronie. Wyznacza sufit dla inferencji tensor-parallel.

Root portRoot port FeedsObsługuje Link widthSzerokość SpeedPrędkość IOMMU
00:01.1GPU0x8Gen4, 16 GT/s17
00:01.3GPU1x8Gen4, 16 GT/s22

Both GPUs sit on separate root ports, in separate IOMMU groups, at a symmetric x8/x8. That symmetry was restored on 14 June 2026 by moving one NVMe drive from an M.2 slot on CPU lanes to a chipset slot; before that, two CPU-lane NVMe drives had starved GPU1 down to x4.

Obie karty siedzą na osobnych root portach, w osobnych grupach IOMMU, symetrycznie x8/x8. Symetrię przywrócono 14 czerwca 2026, przekładając jeden dysk NVMe z gniazda M.2 na liniach procesora do gniazda chipsetowego. Wcześniej dwa dyski na liniach CPU ścinały GPU1 do x4.

Measurement gotcha. The GPU endpoints (03:00.0, 07:00.0) always report x16 at 32 GT/s. That is the card-internal GPU-to-switch link, not the CPU-to-GPU link, and reading it as system bandwidth is simply wrong. Read max_link_width on the root port instead. current_link_width also under-reports at idle, because ASPM collapses both width and speed. Measure under load or use max_link_width.

Pułapka pomiarowa. Endpointy kart (03:00.0, 07:00.0) zawsze pokazują x16 przy 32 GT/s. To link wewnętrzny karty, między GPU a jej switchem (nie link CPU↔GPU), i czytanie go jako pasma systemowego jest po prostu błędem. Odczytuj max_link_width na root porcie. current_link_width dodatkowo zaniża w bezczynności, bo ASPM zwija i szerokość, i prędkość. Mierz pod obciążeniem albo patrz na max_link_width.

Power and UPS

Zasilanie i UPS

The workstation PSU is connected directly to the UPS with a single IEC C13-to-C20 16 A cable, with no intermediate adapters. Monitors, router and peripherals hang off a second UPS output. Power-failure detection is monitored with NUT via the nutdrv_qx driver and has been tested against a real cut.

Zasilacz stacji jest podłączony wprost do UPS-a jednym kablem IEC C13→C20 16 A, bez przejściówek. Monitory, router i peryferia wiszą na drugim wyjściu UPS-a. Wykrywanie zaniku zasilania obsługuje NUT przez sterownik nutdrv_qx i zostało sprawdzone na realnym zaniku.

ARMAC OFFICE ON-LINE PF1 2000VA: 2000 VA / 2000 W at PF 1.0, online double conversion with 0 ms transfer, 72 V battery pack, eight IEC C13 outputs.

ARMAC OFFICE ON-LINE PF1 2000VA: 2000 VA / 2000 W przy PF 1,0, podwójna konwersja online z czasem przełączenia 0 ms, akumulatory 72 V, osiem gniazd IEC C13.

CPU cooling

Chłodzenie procesora

The air tower was swapped for a 420 mm liquid cooler in August 2026, and both were measured under a 40-minute all-core load. The headline result is that they are indistinguishable: the same 81.2 °C peak, the same clocks, a 0.7 K difference in temperature rise that sits below the resolution of the test.

W sierpniu 2026 wieżę powietrzną zastąpiło chłodzenie cieczą 420 mm; oba zmierzono pod 40-minutowym obciążeniem wszystkich rdzeni. Wynik główny: są nieodróżnialne, ten sam szczyt 81,2 °C, te same zegary, a różnica 0,7 K w przyroście temperatury leży poniżej rozdzielczości testu.

The study is worth reading less for the verdict than for what went wrong on the way to it. One run produced a clear, wrong answer because the radiator fans were not turning, and the sensor reporting 0 was misread as a missing sensor rather than a stopped fan.

Badanie warto przeczytać nie tyle dla werdyktu, ile dla tego, co poszło po drodze nie tak. Jeden przebieg dał jasną i nieprawdziwą odpowiedź, bo wentylatory chłodnicy się nie kręciły, a czujnik pokazujący 0 odczytano jako brak czujnika zamiast jako zatrzymany wentylator.

Validation status

Stan walidacji

  • Hardware assembled and validated
  • Sprzęt złożony i zwalidowany
  • UPS monitoring operational (NUT + nutdrv_qx), power-failure detection tested
  • Monitoring UPS działa (NUT + nutdrv_qx), wykrywanie zaniku sprawdzone
  • PCIe link width verified at the root ports
  • Szerokość linku PCIe zweryfikowana na root portach
  • IOMMU group separation confirmed for both GPUs
  • Rozdzielenie grup IOMMU potwierdzone dla obu kart
  • CPU cooling characterised under sustained all-core load
  • Chłodzenie CPU scharakteryzowane pod ciągłym obciążeniem wszystkich rdzeni

Raw bills of materials, the PCIe map, power topology and the cooling test scripts and CSVs live in bom/ in the repository.

Surowe zestawienia, mapa PCIe, topologia zasilania oraz skrypty i pliki CSV testu chłodzenia leżą w katalogu bom/ w repozytorium.