From b1373ff77e4fffb1f6d66df3f5a5fdde3ac2a0bb Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:16:34 +0800 Subject: [PATCH] feat: Support gpu of schema v11 (#7988) --- backend/utils/ai_tools/gpu/gpu.go | 15 +++++++++------ .../ai_tools/gpu/{schema_v12 => schema}/parser.go | 13 +++++++++---- .../ai_tools/gpu/{schema_v12 => schema}/types.go | 2 +- frontend/src/views/ai/gpu/index.vue | 2 +- 4 files changed, 20 insertions(+), 12 deletions(-) rename backend/utils/ai_tools/gpu/{schema_v12 => schema}/parser.go (80%) rename backend/utils/ai_tools/gpu/{schema_v12 => schema}/types.go (99%) diff --git a/backend/utils/ai_tools/gpu/gpu.go b/backend/utils/ai_tools/gpu/gpu.go index 9378f490e..ea139d5fb 100644 --- a/backend/utils/ai_tools/gpu/gpu.go +++ b/backend/utils/ai_tools/gpu/gpu.go @@ -12,7 +12,7 @@ import ( "github.com/1Panel-dev/1Panel/backend/global" "github.com/1Panel-dev/1Panel/backend/utils/ai_tools/gpu/common" - "github.com/1Panel-dev/1Panel/backend/utils/ai_tools/gpu/schema_v12" + "github.com/1Panel-dev/1Panel/backend/utils/ai_tools/gpu/schema" "github.com/1Panel-dev/1Panel/backend/utils/cmd" ) @@ -28,7 +28,7 @@ func (n NvidiaSMI) LoadGpuInfo() (*common.GpuInfo, error) { return nil, fmt.Errorf("calling nvidia-smi failed, err: %v", std) } data := []byte(std) - schema := "v11" + version := "v11" buf := bytes.NewBuffer(data) decoder := xml.NewDecoder(buf) @@ -51,15 +51,18 @@ func (n NvidiaSMI) LoadGpuInfo() (*common.GpuInfo, error) { parts := strings.Split(directive, " ") s := strings.Trim(parts[len(parts)-1], "\" ") if strings.HasPrefix(s, "nvsmi_device_") && strings.HasSuffix(s, ".dtd") { - schema = strings.TrimSuffix(strings.TrimPrefix(s, "nvsmi_device_"), ".dtd") + version = strings.TrimSuffix(strings.TrimPrefix(s, "nvsmi_device_"), ".dtd") } else { global.LOG.Debugf("Cannot find schema version in %q", directive) } break } - if schema != "v12" { - return &common.GpuInfo{}, nil + if version == "v12" || version == "v11" { + return schema.Parse(data, version) + } else { + global.LOG.Errorf("don't support such schema version %s", version) } - return schema_v12.Parse(data) + + return &common.GpuInfo{}, nil } diff --git a/backend/utils/ai_tools/gpu/schema_v12/parser.go b/backend/utils/ai_tools/gpu/schema/parser.go similarity index 80% rename from backend/utils/ai_tools/gpu/schema_v12/parser.go rename to backend/utils/ai_tools/gpu/schema/parser.go index 1c50badab..d81404bd6 100644 --- a/backend/utils/ai_tools/gpu/schema_v12/parser.go +++ b/backend/utils/ai_tools/gpu/schema/parser.go @@ -1,4 +1,4 @@ -package schema_v12 +package schema import ( "encoding/xml" @@ -6,7 +6,7 @@ import ( "github.com/1Panel-dev/1Panel/backend/utils/ai_tools/gpu/common" ) -func Parse(buf []byte) (*common.GpuInfo, error) { +func Parse(buf []byte, version string) (*common.GpuInfo, error) { var ( s smi info common.GpuInfo @@ -36,8 +36,13 @@ func Parse(buf []byte) (*common.GpuInfo, error) { gpuItem.Temperature = s.Gpu[i].Temperature.GpuTemp gpuItem.PerformanceState = s.Gpu[i].PerformanceState - gpuItem.PowerDraw = s.Gpu[i].GpuPowerReadings.PowerDraw - gpuItem.MaxPowerLimit = s.Gpu[i].GpuPowerReadings.MaxPowerLimit + if version == "v12" { + gpuItem.PowerDraw = s.Gpu[i].GpuPowerReadings.PowerDraw + gpuItem.MaxPowerLimit = s.Gpu[i].GpuPowerReadings.MaxPowerLimit + } else { + gpuItem.PowerDraw = s.Gpu[i].PowerReadings.PowerDraw + gpuItem.MaxPowerLimit = s.Gpu[i].PowerReadings.MaxPowerLimit + } gpuItem.MemUsed = s.Gpu[i].FbMemoryUsage.Used gpuItem.MemTotal = s.Gpu[i].FbMemoryUsage.Total gpuItem.GPUUtil = s.Gpu[i].Utilization.GpuUtil diff --git a/backend/utils/ai_tools/gpu/schema_v12/types.go b/backend/utils/ai_tools/gpu/schema/types.go similarity index 99% rename from backend/utils/ai_tools/gpu/schema_v12/types.go rename to backend/utils/ai_tools/gpu/schema/types.go index d878ca8ba..39328dd0c 100644 --- a/backend/utils/ai_tools/gpu/schema_v12/types.go +++ b/backend/utils/ai_tools/gpu/schema/types.go @@ -1,4 +1,4 @@ -package schema_v12 +package schema type smi struct { AttachedGpus string `xml:"attached_gpus"` diff --git a/frontend/src/views/ai/gpu/index.vue b/frontend/src/views/ai/gpu/index.vue index a4d94eb71..ed8abbef0 100644 --- a/frontend/src/views/ai/gpu/index.vue +++ b/frontend/src/views/ai/gpu/index.vue @@ -329,7 +329,7 @@ const loadEcc = (val: string) => { if (val === 'Enabled') { return i18n.global.t('ai_tools.gpu.enabled'); } - return val; + return val || 0; }; const loadProcessType = (val: string) => {