mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-10-09 16:00:29 +00:00
147 lines
5.4 KiB
Go
147 lines
5.4 KiB
Go
package accelerator
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/1Panel-dev/1Panel/agent/utils/ai_tools/gpu"
|
|
"github.com/1Panel-dev/1Panel/agent/utils/ai_tools/npu"
|
|
"github.com/1Panel-dev/1Panel/agent/utils/ai_tools/xpu"
|
|
)
|
|
|
|
func normalizeGPU(item *gpu.Device) Device {
|
|
metrics := Metrics{
|
|
MemoryActivity: metric(item.MemoryActivity, "%"),
|
|
EncoderUtil: metric(item.EncoderUtil, "%"),
|
|
DecoderUtil: metric(item.DecoderUtil, "%"),
|
|
JPEGUtil: metric(item.JPEGUtil, "%"),
|
|
OFAUtil: metric(item.OFAUtil, "%"),
|
|
MediaUtil: metric(item.MediaUtil, "%"),
|
|
HotspotTemperature: metric(item.HotspotTemperature, "°C"),
|
|
FanRPM: metric(item.FanRPM, "RPM"),
|
|
MediaFrequency: metric(item.MediaFrequency, "MHz"),
|
|
Utilization: metric(item.GPUUtil, "%"),
|
|
Temperature: metric(item.Temperature, "°C"),
|
|
MemoryTemperature: metric(item.MemoryTemperature, "°C"),
|
|
Power: metric(item.PowerDraw, "W"),
|
|
PowerLimit: metric(item.PowerLimit, "W"),
|
|
Frequency: metric(item.Frequency, "MHz"),
|
|
MemoryFrequency: metric(item.MemoryFrequency, "MHz"),
|
|
MemoryUsed: memoryMetric(item.MemUsed),
|
|
MemoryTotal: memoryMetric(item.MemTotal),
|
|
FanSpeed: metric(item.FanSpeed, "%"),
|
|
}
|
|
device := Device{
|
|
ProcessStatus: item.ProcessStatus,
|
|
ID: stableID(item.Type, item.UUID, stableID("pci", item.BusID, strconv.FormatUint(uint64(item.Index), 10))),
|
|
Kind: KindGPU,
|
|
Vendor: item.Type,
|
|
Index: int(item.Index),
|
|
Name: item.ProductName,
|
|
Label: fmt.Sprintf("%d - %s", item.Index, item.ProductName),
|
|
BusID: item.BusID,
|
|
Metrics: metrics,
|
|
GPU: item,
|
|
}
|
|
for _, process := range item.Processes {
|
|
device.Processes = append(device.Processes, Process{
|
|
PID: process.PID,
|
|
Type: process.Type,
|
|
Name: process.ProcessName,
|
|
Memory: normalizedMemoryDisplay(process.UsedMemory),
|
|
})
|
|
}
|
|
return device
|
|
}
|
|
|
|
func normalizeNPU(item *npu.Device) Device {
|
|
metrics := Metrics{
|
|
AICPUUtil: metric(item.AICPUUtil, "%"),
|
|
CtrlCPUUtil: metric(item.CtrlCPUUtil, "%"),
|
|
DDRBandwidth: metric(item.DDRBandwidth, "%"),
|
|
HBMBandwidth: metric(item.HBMBandwidth, "%"),
|
|
DDRUsed: metric(item.MemoryUsed, "MiB"),
|
|
DDRTotal: metric(item.MemoryTotal, "MiB"),
|
|
HBMUsed: metric(item.HBMUsed, "MiB"),
|
|
HBMTotal: metric(item.HBMTotal, "MiB"),
|
|
HugepagesUsed: metric(item.HugepagesUsed, "pages"),
|
|
HugepagesTotal: metric(item.HugepagesTotal, "pages"),
|
|
Utilization: metric(item.AICore, "%"),
|
|
Temperature: metric(item.Temperature, "°C"),
|
|
Power: metric(item.PowerDraw, "W"),
|
|
MemoryUsed: memoryMetric(item.MemUsed),
|
|
MemoryTotal: memoryMetric(item.MemTotal),
|
|
}
|
|
device := Device{
|
|
ProcessStatus: item.ProcessStatus,
|
|
ID: fmt.Sprintf("%s:%d", stableID("ascend", item.BusID, strconv.FormatUint(uint64(item.NPUIndex), 10)), item.ChipIndex),
|
|
Kind: KindNPU,
|
|
Vendor: "ascend",
|
|
Index: int(item.Index),
|
|
NPUIndex: int(item.NPUIndex),
|
|
ChipIndex: int(item.ChipIndex),
|
|
Name: item.ProductName,
|
|
Label: fmt.Sprintf("NPU %d / Chip %d - %s", item.NPUIndex, item.ChipIndex, item.ProductName),
|
|
BusID: item.BusID,
|
|
Metrics: metrics,
|
|
NPU: item,
|
|
}
|
|
for _, process := range item.Processes {
|
|
device.Processes = append(device.Processes, Process{
|
|
PID: process.PID,
|
|
Type: "NPU",
|
|
Name: process.ProcessName,
|
|
Memory: normalizedMemoryDisplay(process.UsedMemory),
|
|
})
|
|
}
|
|
return device
|
|
}
|
|
|
|
func normalizeXPU(item *xpu.Device) Device {
|
|
metrics := Metrics{
|
|
MediaUtil: metric(item.Stats.MediaUtil, "%"),
|
|
ComputeUtil: metric(item.Stats.ComputeUtil, "%"),
|
|
CopyUtil: metric(item.Stats.CopyUtil, "%"),
|
|
MediaFrequency: metric(item.Stats.MediaFrequency, "MHz"),
|
|
MemoryTemperature: metric(item.Stats.MemoryTemperature, "°C"),
|
|
MemoryBandwidth: metric(item.Stats.MemoryBandwidthUtil, "%"),
|
|
Utilization: metric(item.Stats.GPUUtil, "%"),
|
|
Temperature: metric(item.Stats.Temperature, "°C"),
|
|
Power: metric(item.Stats.Power, "W"),
|
|
MemoryUsed: memoryMetric(item.Stats.MemoryUsed),
|
|
MemoryTotal: memoryMetric(item.Basic.Memory),
|
|
MemoryUtil: metric(item.Stats.MemoryUtil, "%"),
|
|
Frequency: metric(item.Stats.Frequency, "MHz"),
|
|
}
|
|
device := Device{
|
|
ProcessStatus: item.ProcessStatus,
|
|
ID: stableID("xpu", item.Basic.UUID, stableID("pci", item.Basic.PciBdfAddress, strconv.Itoa(item.Basic.DeviceID))),
|
|
Kind: KindXPU,
|
|
Vendor: item.Basic.VendorName,
|
|
Index: item.Basic.DeviceID,
|
|
Name: item.Basic.DeviceName,
|
|
Label: fmt.Sprintf("%d - %s", item.Basic.DeviceID, item.Basic.DeviceName),
|
|
BusID: item.Basic.PciBdfAddress,
|
|
Metrics: metrics,
|
|
XPU: item,
|
|
}
|
|
for _, process := range item.Processes {
|
|
device.Processes = append(device.Processes, Process{
|
|
PID: strconv.Itoa(process.PID),
|
|
Type: process.SHR,
|
|
Name: process.Command,
|
|
Memory: normalizedMemoryDisplay(process.Memory),
|
|
SharedMemory: process.SHR,
|
|
})
|
|
}
|
|
return device
|
|
}
|
|
|
|
func stableID(vendor, busID, fallback string) string {
|
|
if busID != "" && !strings.EqualFold(busID, "N/A") {
|
|
return vendor + ":" + busID
|
|
}
|
|
return vendor + ":" + fallback
|
|
}
|