{{define "node"}}
{{.Node.State}} {{with .Node.OS}} · {{.}}{{end}}{{with .Node.MgmtAddr}} · {{.}}{{end}} · last seen {{or .Node.LastSeenAgo "never"}} ago · logs
{{if .OnAdminListener}}{{else}}{{template "nav" .Nav}}{{end}}{{.}}
{{end}}{{end}} {{if .Unhealthy}}{{join .Unhealthy}}
{{end}} {{with .Load}}{{if .GPUs}}| GPU | Busy | Memory used | Temperature | Memory temp. | Power | Clock | Held back by, and wear |
|---|---|---|---|---|---|---|---|
| {{.Index}} | {{/* From the last sample; a dash where the driver or an older agent did not say, rather than a zero nobody measured. */}}{{if and .MemoryTotalMB (ge .UtilPercent 0.0)}}{{template "minibar" pctbar .UtilPercent}}{{printf "%.0f" .UtilPercent}}%{{if ge .MemUtilPercent 0.0}} memory {{printf "%.0f" .MemUtilPercent}}%{{end}}{{else}}—{{end}} | {{if .MemoryTotalMB}}{{template "minibar" pctbar (percent .MemoryUsedMB .MemoryTotalMB)}}{{printf "%.1f" (gib .MemoryUsedMB)}} of {{printf "%.0f" (gib .MemoryTotalMB)}} GB{{else}}—{{end}} | {{if .TempC}}{{printf "%.0f" .TempC}} °C{{else}}—{{end}} | {{if .MemoryTempC}}{{printf "%.0f" .MemoryTempC}} °C{{else}}—{{end}} | {{if and .PowerW .PowerLimitW}}{{template "minibar" pctbar (percent .PowerW .PowerLimitW)}}{{printf "%.0f" .PowerW}} W of {{printf "%.0f" .PowerLimitW}}{{else if .PowerW}}{{printf "%.0f" .PowerW}} W{{else}}—{{end}} | {{if .SMClockMHz}}{{printf "%.0f" .SMClockMHz}} MHz{{else}}—{{end}} | {{if .Throttle}}{{join .Throttle}}{{else}}nothing{{end}}{{if gt .ECCUncorrected 0.0}} {{printf "%.0f" .ECCUncorrected}} uncorrected ECC errors{{end}}{{with .Wear}}{{with .Problems}} {{join .}}{{end}}{{if gt .PCIeReplays 0}} {{.PCIeReplays}} PCIe retries{{end}}{{end}} |
{{if .Node.Fabrics}}On {{join .Node.Fabrics}} · the map →{{else}}On no fabric: no port a declared fabric names can carry traffic, so no multi-node replica is placed here.{{end}}
{{if .Node.IBPorts}}| Adapter | State | Rate | Fabric | Physically on | Errors since boot | Sent | Received |
|---|---|---|---|---|---|---|---|
{{.HCA}}/{{.Port}}{{if eq .LinkLayer "Ethernet"}} RoCE{{end}} |
{{.State}}{{with .PhysState}} {{.}}{{end}} | {{if .RateGbps}}{{.RateGbps}} Gb/s{{else}}—{{end}} | {{or .Fabric "—"}} | {{if .Physical}}{{.Physical}}{{else if .SMError}}unknown{{else}}—{{end}} | {{if .Errors}}{{range $k, $v := .Errors}}{{$k}} {{$v}} {{end}}{{else}}none{{end}} | {{if .TxBytes}}{{bytes (u64 .TxBytes)}}{{else}}—{{end}} | {{if .RxBytes}}{{bytes (u64 .RxBytes)}}{{else}}—{{end}} |
Re-read on every heartbeat. A port that goes down takes its fabric off this node within seconds; one that comes back returns it. Errors are cumulative since the adapter came up: a number that grows is the one to look at.
{{end}} {{end}} {{if .Node.GPUs}}
{{with .Node.NVLinkDomain}}In NVLink domain {{.}}: tensor parallelism can span this node and the rest of its domain.
{{else}}NVLink ends at this machine.{{end}}
{{if or .Node.NVLinkDomain .Node.IMEX}} · IMEX {{if eq .Node.IMEX "active"}}active, {{.Node.IMEXChannels}} channel{{if ne .Node.IMEXChannels 1}}s{{end}}{{else}}{{or .Node.IMEX "not installed"}}{{end}}{{end}}
| {{range .Node.GPUs}} | {{.Index}} | {{end}}||
|---|---|---|---|
| GPU {{$a.Index}} | {{range $b := $.Node.GPUs}}{{if eq $a.Index $b.Index}}{{else if hasInt $a.NVLinkPeers $b.Index}} | NV | {{else}}· | {{end}}{{end}}
| GPU | Name | Compute | NUMA | Nearest adapter | Multi-node NVLink |
|---|---|---|---|---|---|
| {{.Index}} | {{.Name}} | {{.ComputeCapability}} | {{.NUMA}} | {{if .NearestNIC}}{{.NearestNIC}} {{.NICPath}}{{else}}—{{end}} |
{{if .Domain}}joined{{if and .Bandwidth (ne .Bandwidth "Full")}} {{.Bandwidth}} bandwidth{{end}}{{else if .FabricState}}{{.FabricState}}{{else}}—{{end}} |
NV is a pair of cards joined by NVLink; a tensor-parallel group kept to NV pairs runs its all-reduces at NVLink speed, and placement picks it that way. The nearest adapter is where a card's share of traffic between nodes should go: PIX and PXB are under the same PCIe switch, SYS is across the processors.
{{end}}| Model | Replica | State | CPU | Memory |
|---|---|---|---|---|
| {{.Model}} | {{.Replica}} |
{{.State}} | {{template "minibar" pctbar .CPUShare}}{{printf "%.1f" .CPUCores}} cores | {{if .MemoryBytes}}{{bytes .MemoryBytes}}{{else}}—{{end}} |
No engines are placed on this node.
{{end}}Engines: {{if .Node.Engines}}{{join .Node.Engines}}{{else}}none installed{{end}}{{if .Node.Models}} · {{len .Node.Models}} model file(s) on disk{{end}}.
No history: {{.Err}}
{{else}}No metrics store is configured, so there is no history here; monitoring.prometheus in the server configuration adds it.