From 799b41d353b0a867ea6f7eff25687482c1d429bc Mon Sep 17 00:00:00 2001 From: ssongliu Date: Thu, 11 Dec 2025 18:33:33 +0800 Subject: [PATCH] perf: Optimize GPU monitoring style --- agent/app/dto/monitor.go | 15 +- agent/app/service/monitor.go | 37 +- agent/utils/ai_tools/xpu/xpu.go | 17 - frontend/src/api/interface/host.ts | 10 + frontend/src/lang/modules/en.ts | 31 ++ frontend/src/lang/modules/es-es.ts | 32 ++ frontend/src/lang/modules/ja.ts | 30 ++ frontend/src/lang/modules/ko.ts | 30 ++ frontend/src/lang/modules/ms.ts | 32 ++ frontend/src/lang/modules/pt-br.ts | 32 ++ frontend/src/lang/modules/ru.ts | 32 ++ frontend/src/lang/modules/tr.ts | 32 ++ frontend/src/lang/modules/zh-Hant.ts | 29 ++ frontend/src/lang/modules/zh.ts | 30 ++ frontend/src/routers/modules/ai.ts | 27 +- frontend/src/views/ai/gpu/current/index.vue | 349 +++++++++++++ frontend/src/views/ai/gpu/history/index.vue | 545 ++++++++++++++++++++ frontend/src/views/ai/gpu/index.vue | 476 +---------------- frontend/src/views/home/status/index.vue | 1 + 19 files changed, 1296 insertions(+), 491 deletions(-) create mode 100644 frontend/src/views/ai/gpu/current/index.vue create mode 100644 frontend/src/views/ai/gpu/history/index.vue diff --git a/agent/app/dto/monitor.go b/agent/app/dto/monitor.go index 8a275083c98e..636bfdd67862 100644 --- a/agent/app/dto/monitor.go +++ b/agent/app/dto/monitor.go @@ -39,8 +39,18 @@ type MonitorSettingUpdate struct { } type MonitorGPUOptions struct { - GPUType string `json:"gpuType"` - Options []string `json:"options"` + GPUType string `json:"gpuType"` + ChartHide []GPUChartHide `json:"chartHide"` + Options []string `json:"options"` +} +type GPUChartHide struct { + ProductName string `json:"productName"` + Process bool `json:"process"` + GPU bool `json:"gpu"` + Memory bool `json:"memory"` + Power bool `json:"power"` + Temperature bool `json:"temperature"` + Speed bool `json:"speed"` } type MonitorGPUSearch struct { ProductName string `json:"productName"` @@ -59,6 +69,7 @@ type MonitorGPUData struct { MemoryPercent []float64 `json:"memoryPercent"` SpeedValue []int `json:"speedValue"` + ProcessCount []int `json:"processCount"` GPUProcesses [][]GPUProcess `json:"gpuProcesses"` } diff --git a/agent/app/service/monitor.go b/agent/app/service/monitor.go index ee68adf98140..041c893c3b73 100644 --- a/agent/app/service/monitor.go +++ b/agent/app/service/monitor.go @@ -137,16 +137,45 @@ func (m *MonitorService) LoadGPUOptions() dto.MonitorGPUOptions { return gpuInfo.GPUs[i].Index < gpuInfo.GPUs[j].Index }) for _, item := range gpuInfo.GPUs { + var chartHide dto.GPUChartHide + chartHide.ProductName = fmt.Sprintf("%d - %s", item.Index, item.ProductName) + chartHide.GPU = item.GPUUtil == "" || item.GPUUtil == "N/A" + if (item.MemTotal == "" || item.MemTotal == "N/A") && (item.MemUsed == "" || item.MemUsed == "N/A") { + chartHide.Memory = true + } + if (item.MaxPowerLimit == "" || item.MaxPowerLimit == "N/A") && (item.PowerDraw == "" || item.PowerDraw == "N/A") { + chartHide.Power = true + } + chartHide.Temperature = item.Temperature == "" || item.Temperature == "N/A" + chartHide.Speed = item.FanSpeed == "" || item.FanSpeed == "N/A" + data.ChartHide = append(data.ChartHide, chartHide) data.Options = append(data.Options, fmt.Sprintf("%d - %s", item.Index, item.ProductName)) } return data } else { data.GPUType = "xpu" - var err error - data.Options, err = xpuClient.LoadDeviceList() - if err != nil || len(data.Options) == 0 { + xpu, err := xpuClient.LoadGpuInfo() + if err != nil || len(xpu.Xpu) == 0 { global.LOG.Error("Load XPU info failed or no XPU found, err: ", err) } + sort.Slice(xpu.Xpu, func(i, j int) bool { + return xpu.Xpu[i].Basic.DeviceID < xpu.Xpu[j].Basic.DeviceID + }) + for _, item := range xpu.Xpu { + var chartHide dto.GPUChartHide + chartHide.GPU = true + chartHide.Speed = true + chartHide.ProductName = fmt.Sprintf("%d - %s", item.Basic.DeviceID, item.Basic.DeviceName) + if (item.Stats.MemoryUsed == "" || item.Stats.MemoryUsed == "N/A") && (item.Basic.Memory == "" || item.Basic.FreeMemory == "N/A") { + chartHide.Memory = true + } + if item.Stats.Power == "" || item.Stats.Power == "N/A" { + chartHide.Power = true + } + chartHide.Temperature = item.Stats.Temperature == "" || item.Stats.Temperature == "N/A" + data.ChartHide = append(data.ChartHide, chartHide) + data.Options = append(data.Options, fmt.Sprintf("%d - %s", item.Basic.DeviceID, item.Basic.DeviceName)) + } return data } } @@ -182,8 +211,10 @@ func (m *MonitorService) LoadGPUMonitorData(req dto.MonitorGPUSearch) (dto.Monit } var process []dto.GPUProcess if err := json.Unmarshal([]byte(gpu.Processes), &process); err == nil { + data.ProcessCount = append(data.ProcessCount, len(process)) data.GPUProcesses = append(data.GPUProcesses, process) } else { + data.ProcessCount = append(data.ProcessCount, 0) data.GPUProcesses = append(data.GPUProcesses, []dto.GPUProcess{}) } data.SpeedValue = append(data.SpeedValue, gpu.FanSpeed) diff --git a/agent/utils/ai_tools/xpu/xpu.go b/agent/utils/ai_tools/xpu/xpu.go index 5608bb6d17d9..66702ab4d6d8 100644 --- a/agent/utils/ai_tools/xpu/xpu.go +++ b/agent/utils/ai_tools/xpu/xpu.go @@ -120,23 +120,6 @@ func (x XpuSMI) LoadDashData() ([]XPUSimpleInfo, error) { return res, nil } -func (x XpuSMI) LoadDeviceList() ([]string, error) { - cmdMgr := cmd.NewCommandMgr(cmd.WithTimeout(5 * time.Second)) - data, err := cmdMgr.RunWithStdoutBashC("xpu-smi discovery -j") - if err != nil { - return nil, fmt.Errorf("calling xpu-smi failed, %v", err) - } - var deviceInfo DeviceInfo - if err := json.Unmarshal([]byte(data), &deviceInfo); err != nil { - return nil, fmt.Errorf("deviceInfo json unmarshal failed, err: %w", err) - } - var deviceNames []string - for _, device := range deviceInfo.DeviceList { - deviceNames = append(deviceNames, fmt.Sprintf("%d - %s", device.DeviceID, device.DeviceName)) - } - return deviceNames, nil -} - func (x XpuSMI) LoadGpuInfo() (*XpuInfo, error) { cmdMgr := cmd.NewCommandMgr(cmd.WithTimeout(5 * time.Second)) data, err := cmdMgr.RunWithStdoutBashC("xpu-smi discovery -j") diff --git a/frontend/src/api/interface/host.ts b/frontend/src/api/interface/host.ts index 61760ceb285c..e075ea7a4fb6 100644 --- a/frontend/src/api/interface/host.ts +++ b/frontend/src/api/interface/host.ts @@ -169,6 +169,16 @@ export namespace Host { export interface MonitorGPUOptions { gpuType: string; options: Array; + chartHide: Array; + } + export interface ChartHide { + productName: string; + process: boolean; + gpu: boolean; + memory: boolean; + power: boolean; + temperature: boolean; + speed: boolean; } export interface MonitorGPUData { date: Array; diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index e39aa1027ff4..e1d5df97a96c 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -711,6 +711,37 @@ const message = { memoryUsed: 'Memory Used', memoryTotal: 'Total Memory', percent: 'Utilization', + + base: 'Basic Information', + driverVersion: 'Driver Version', + cudaVersion: 'CUDA Version', + processMemoryUsage: 'Memory Usage', + performanceStateHelper: 'From P0 (maximum performance) to P12 (minimum performance)', + busID: 'Bus Address', + persistenceMode: 'Persistence Mode', + enabled: 'Enabled', + disabled: 'Disabled', + persistenceModeHelper: + 'Persistence mode responds to tasks more quickly, but standby power consumption will increase accordingly', + displayActive: 'GPU Initialization', + displayActiveT: 'Yes', + displayActiveF: 'No', + ecc: 'Error Checking and Correcting Technology', + computeMode: 'Compute Mode', + default: 'Default', + exclusiveProcess: 'Exclusive Process', + exclusiveThread: 'Exclusive Thread', + prohibited: 'Prohibited', + defaultHelper: 'Default: Processes can execute concurrently', + exclusiveProcessHelper: + 'Exclusive Process: Only one CUDA context can use the GPU, but it can be shared by multiple threads', + exclusiveThreadHelper: 'Exclusive Thread: Only one thread in a CUDA context can use the GPU', + prohibitedHelper: 'Prohibited: Concurrent process execution is not allowed', + migModeHelper: 'Used to create MIG instances, implementing physical GPU isolation at the user layer.', + migModeNA: 'Not Supported', + current: 'Real-time Monitoring', + history: 'Historical Records', + notSupport: 'The current version or driver does not support displaying this parameter.', }, mcp: { server: 'MCP Server', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index c7f22f19e94d..ef735b56cd1e 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -710,6 +710,38 @@ const message = { memoryUsed: 'Memoria Utilizada', memoryTotal: 'Memoria Total', percent: 'Utilización', + + base: 'Información Básica', + driverVersion: 'Versión del Controlador', + cudaVersion: 'Versión de CUDA', + processMemoryUsage: 'Uso de Memoria', + performanceStateHelper: 'Desde P0 (rendimiento máximo) hasta P12 (rendimiento mínimo)', + busID: 'Dirección del Bus', + persistenceMode: 'Modo de Persistencia', + enabled: 'Habilitado', + disabled: 'Deshabilitado', + persistenceModeHelper: + 'El modo de persistencia responde a las tareas más rápidamente, pero el consumo de energía en espera aumentará en consecuencia', + displayActive: 'Inicialización de GPU', + displayActiveT: 'Sí', + displayActiveF: 'No', + ecc: 'Tecnología de Corrección de Errores', + computeMode: 'Modo de Computación', + default: 'Predeterminado', + exclusiveProcess: 'Proceso Exclusivo', + exclusiveThread: 'Hilo Exclusivo', + prohibited: 'Prohibido', + defaultHelper: 'Predeterminado: Los procesos pueden ejecutarse concurrentemente', + exclusiveProcessHelper: + 'Proceso Exclusivo: Solo un contexto CUDA puede usar la GPU, pero puede ser compartido por múltiples hilos', + exclusiveThreadHelper: 'Hilo Exclusivo: Solo un hilo en un contexto CUDA puede usar la GPU', + prohibitedHelper: 'Prohibido: No se permite la ejecución concurrente de procesos', + migModeHelper: + 'Se utiliza para crear instancias MIG, implementando aislamiento físico de GPU en la capa de usuario.', + migModeNA: 'No Compatible', + current: 'Monitoreo en Tiempo Real', + history: 'Registros Históricos', + notSupport: 'La versión actual o el controlador no admiten mostrar este parámetro.', }, mcp: { server: 'Servidor MCP', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 9e798b431308..a835cf27326d 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -699,6 +699,36 @@ const message = { memoryUsed: '使用メモリ', memoryTotal: '総メモリ', percent: '使用率', + + base: '基本情報', + driverVersion: 'ドライバーバージョン', + cudaVersion: 'CUDA バージョン', + processMemoryUsage: 'メモリ使用量', + performanceStateHelper: 'P0(最大パフォーマンス)から P12(最小パフォーマンス)まで', + busID: 'バスアドレス', + persistenceMode: '永続モード', + enabled: '有効', + disabled: '無効', + persistenceModeHelper: '永続モードはタスクへの応答がより迅速ですが、それに応じて待機電力消費も増加します', + displayActive: 'GPU 初期化', + displayActiveT: 'はい', + displayActiveF: 'いいえ', + ecc: 'エラー修正技術', + computeMode: '計算モード', + default: 'デフォルト', + exclusiveProcess: '排他プロセス', + exclusiveThread: '排他スレッド', + prohibited: '禁止', + defaultHelper: 'デフォルト: プロセスは同時実行可能', + exclusiveProcessHelper: + '排他プロセス: 1つのCUDAコンテキストのみがGPUを使用可能、ただし複数スレッドで共有可能', + exclusiveThreadHelper: '排他スレッド: CUDAコンテキスト内の1つのスレッドのみがGPUを使用可能', + prohibitedHelper: '禁止: プロセスの同時実行は許可されません', + migModeHelper: 'MIGインスタンスを作成するために使用され、ユーザーレイヤーでGPUの物理的隔離を実装します。', + migModeNA: 'サポートされていません', + current: 'リアルタイム監視', + history: '履歴記録', + notSupport: '現在のバージョンまたはドライバーはこのパラメータの表示をサポートしていません。', }, mcp: { server: 'MCP サーバー', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index ffbd5533b779..82220db360a6 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -695,6 +695,36 @@ const message = { memoryUsed: '사용된 메모리', memoryTotal: '전체 메모리', percent: '사용률', + + base: '기본 정보', + driverVersion: '드라이버 버전', + cudaVersion: 'CUDA 버전', + processMemoryUsage: '메모리 사용량', + performanceStateHelper: 'P0(최대 성능)부터 P12(최소 성능)까지', + busID: '버스 주소', + persistenceMode: '지속성 모드', + enabled: '활성화', + disabled: '비활성화', + persistenceModeHelper: '지속성 모드는 작업에 더 빠르게 응답하지만 대기 전력 소비도 그에 따라 증가합니다', + displayActive: 'GPU 초기화', + displayActiveT: '예', + displayActiveF: '아니오', + ecc: '오류 검사 및 수정 기술', + computeMode: '계산 모드', + default: '기본값', + exclusiveProcess: '배타적 프로세스', + exclusiveThread: '배타적 스레드', + prohibited: '금지됨', + defaultHelper: '기본값: 프로세스가 동시에 실행될 수 있음', + exclusiveProcessHelper: + '배타적 프로세스: 하나의 CUDA 컨텍스트만 GPU를 사용할 수 있지만 여러 스레드에서 공유 가능', + exclusiveThreadHelper: '배타적 스레드: CUDA 컨텍스트의 하나의 스레드만 GPU를 사용할 수 있음', + prohibitedHelper: '금지됨: 프로세스 동시 실행이 허용되지 않음', + migModeHelper: 'MIG 인스턴스를 생성하는 데 사용되며 사용자 레이어에서 GPU의 물리적 격리를 구현합니다.', + migModeNA: '지원되지 않음', + current: '실시간 모니터링', + history: '기록', + notSupport: '현재 버전 또는 드라이버는 이 매개변수 표시를 지원하지 않습니다.', }, mcp: { server: 'MCP サーバー', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 25ea2c551c7b..4e8b83c090dc 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -711,6 +711,38 @@ const message = { memoryUsed: 'Memori Digunakan', memoryTotal: 'Jumlah Memori', percent: 'Penggunaan', + base: 'Maklumat Asas', + + driverVersion: 'Versi Pemacu', + cudaVersion: 'Versi CUDA', + processMemoryUsage: 'Penggunaan Memori', + performanceStateHelper: 'Dari P0 (prestasi maksimum) hingga P12 (prestasi minimum)', + busID: 'Alamat Bas', + persistenceMode: 'Mod Kegigihan', + enabled: 'Diaktifkan', + disabled: 'Dilumpuhkan', + persistenceModeHelper: + 'Mod kegigihan bertindak balas kepada tugas dengan lebih cepat, tetapi penggunaan kuasa siap sedia akan meningkat dengan sewajarnya', + displayActive: 'Permulaan GPU', + displayActiveT: 'Ya', + displayActiveF: 'Tidak', + ecc: 'Teknologi Pemeriksaan dan Pembetulan Ralat', + computeMode: 'Mod Pengiraan', + default: 'Lalai', + exclusiveProcess: 'Proses Eksklusif', + exclusiveThread: 'Benang Eksklusif', + prohibited: 'Dilarang', + defaultHelper: 'Lalai: Proses boleh dilaksanakan serentak', + exclusiveProcessHelper: + 'Proses Eksklusif: Hanya satu konteks CUDA boleh menggunakan GPU, tetapi boleh dikongsi oleh berbilang benang', + exclusiveThreadHelper: 'Benang Eksklusif: Hanya satu benang dalam konteks CUDA boleh menggunakan GPU', + prohibitedHelper: 'Dilarang: Pelaksanaan proses serentak tidak dibenarkan', + migModeHelper: + 'Digunakan untuk mencipta contoh MIG, melaksanakan pengasingan fizikal GPU pada lapisan pengguna.', + migModeNA: 'Tidak Disokong', + current: 'Pemantauan Masa Nyata', + history: 'Rekod Sejarah', + notSupport: 'Versi atau pemacu semasa tidak menyokong paparan parameter ini.', }, mcp: { server: 'Pelayan MCP', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 96cef369d23b..0d0082dacdaf 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -706,6 +706,38 @@ const message = { memoryUsed: 'Memória Usada', memoryTotal: 'Memória Total', percent: 'Utilização', + + base: 'Informações Básicas', + driverVersion: 'Versão do Driver', + cudaVersion: 'Versão do CUDA', + processMemoryUsage: 'Uso de Memória', + performanceStateHelper: 'De P0 (desempenho máximo) a P12 (desempenho mínimo)', + busID: 'Endereço do Barramento', + persistenceMode: 'Modo de Persistência', + enabled: 'Habilitado', + disabled: 'Desabilitado', + persistenceModeHelper: + 'O modo de persistência responde às tarefas mais rapidamente, mas o consumo de energia em espera aumentará correspondentemente', + displayActive: 'Inicialização da GPU', + displayActiveT: 'Sim', + displayActiveF: 'Não', + ecc: 'Tecnologia de Verificação e Correção de Erros', + computeMode: 'Modo de Computação', + default: 'Padrão', + exclusiveProcess: 'Processo Exclusivo', + exclusiveThread: 'Thread Exclusiva', + prohibited: 'Proibido', + defaultHelper: 'Padrão: Os processos podem executar simultaneamente', + exclusiveProcessHelper: + 'Processo Exclusivo: Apenas um contexto CUDA pode usar a GPU, mas pode ser compartilhado por múltiplas threads', + exclusiveThreadHelper: 'Thread Exclusiva: Apenas uma thread em um contexto CUDA pode usar a GPU', + prohibitedHelper: 'Proibido: A execução simultânea de processos não é permitida', + migModeHelper: + 'Usado para criar instâncias MIG, implementando isolamento físico da GPU na camada do usuário.', + migModeNA: 'Não Suportado', + current: 'Monitoramento em Tempo Real', + history: 'Registros Históricos', + notSupport: 'A versão atual ou o driver não suportam exibir este parâmetro.', }, mcp: { server: 'Servidor MCP', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 7ae6cbee47a3..6c62659c3976 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -704,6 +704,38 @@ const message = { memoryUsed: 'Использованная Память', memoryTotal: 'Общая Память', percent: 'Использование', + + base: 'Основная Информация', + driverVersion: 'Версия Драйвера', + cudaVersion: 'Версия CUDA', + processMemoryUsage: 'Использование Памяти', + performanceStateHelper: 'От P0 (максимальная производительность) до P12 (минимальная производительность)', + busID: 'Адрес Шины', + persistenceMode: 'Режим Постоянства', + enabled: 'Включено', + disabled: 'Выключено', + persistenceModeHelper: + 'Режим постоянства быстрее реагирует на задачи, но потребление энергии в режиме ожидания соответственно увеличивается', + displayActive: 'Инициализация GPU', + displayActiveT: 'Да', + displayActiveF: 'Нет', + ecc: 'Технология Обнаружения и Исправления Ошибок', + computeMode: 'Режим Вычислений', + default: 'По Умолчанию', + exclusiveProcess: 'Эксклюзивный Процесс', + exclusiveThread: 'Эксклюзивный Поток', + prohibited: 'Запрещено', + defaultHelper: 'По умолчанию: Процессы могут выполняться параллельно', + exclusiveProcessHelper: + 'Эксклюзивный Процесс: Только один контекст CUDA может использовать GPU, но он может быть разделен несколькими потоками', + exclusiveThreadHelper: 'Эксклюзивный Поток: Только один поток в контексте CUDA может использовать GPU', + prohibitedHelper: 'Запрещено: Параллельное выполнение процессов не разрешено', + migModeHelper: + 'Используется для создания экземпляров MIG, реализуя физическую изоляцию GPU на пользовательском уровне.', + migModeNA: 'Не Поддерживается', + current: 'Мониторинг в Реальном Времени', + history: 'Исторические Записи', + notSupport: 'Текущая версия или драйвер не поддерживает отображение этого параметра.', }, mcp: { server: 'Сервер MCP', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 5d4c8b8d46e3..35ab82b9154d 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -718,6 +718,38 @@ const message = { memoryUsed: 'Kullanılan Bellek', memoryTotal: 'Toplam Bellek', percent: 'Kullanım', + + base: 'Temel Bilgiler', + driverVersion: 'Sürücü Sürümü', + cudaVersion: 'CUDA Sürümü', + processMemoryUsage: 'Bellek Kullanımı', + performanceStateHelper: 'P0 (maksimum performans) ile P12 (minimum performans) arası', + busID: 'Veriyolu Adresi', + persistenceMode: 'Kalıcılık Modu', + enabled: 'Etkin', + disabled: 'Devre Dışı', + persistenceModeHelper: + 'Kalıcılık modu görevlere daha hızlı yanıt verir, ancak bekleme güç tüketimi buna bağlı olarak artar', + displayActive: 'GPU Başlatma', + displayActiveT: 'Evet', + displayActiveF: 'Hayır', + ecc: 'Hata Denetleme ve Düzeltme Teknolojisi', + computeMode: 'Hesaplama Modu', + default: 'Varsayılan', + exclusiveProcess: 'Özel Süreç', + exclusiveThread: 'Özel İş Parçacığı', + prohibited: 'Yasak', + defaultHelper: 'Varsayılan: Süreçler eşzamanlı olarak yürütülebilir', + exclusiveProcessHelper: + "Özel Süreç: Yalnızca bir CUDA bağlamı GPU'yu kullanabilir, ancak birden çok iş parçacığı tarafından paylaşılabilir", + exclusiveThreadHelper: "Özel İş Parçacığı: CUDA bağlamındaki yalnızca bir iş parçacığı GPU'yu kullanabilir", + prohibitedHelper: 'Yasak: Eşzamanlı süreç yürütmeye izin verilmez', + migModeHelper: + "MIG örnekleri oluşturmak için kullanılır, GPU'nun kullanıcı katmanında fiziksel izolasyonunu uygular.", + migModeNA: 'Desteklenmiyor', + current: 'Gerçek Zamanlı İzleme', + history: 'Geçmiş Kayıtlar', + notSupport: 'Mevcut sürüm veya sürücü bu parametrenin görüntülenmesini desteklemiyor.', }, mcp: { server: 'MCP Sunucusu', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index fdcce3e12037..16d2af12ebd7 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -684,6 +684,35 @@ const message = { memoryUsed: '顯存使用', memoryTotal: '顯存總計', percent: '使用率', + + base: '基礎資訊', + driverVersion: '驅動程式版本', + cudaVersion: 'CUDA 版本', + processMemoryUsage: '顯存使用', + performanceStateHelper: '從 P0 (最大效能) 到 P12 (最小效能)', + busID: '匯流排位址', + persistenceMode: '持續模式', + enabled: '開啟', + disabled: '關閉', + persistenceModeHelper: '持續模式能更加快速地響應任務,但相應待機功耗也會增加', + displayActive: '顯示卡初始化', + displayActiveT: '是', + displayActiveF: '否', + ecc: '是否開啟錯誤檢查和糾正技術', + computeMode: '計算模式', + default: '預設', + exclusiveProcess: '行程排他', + exclusiveThread: '執行緒排他', + prohibited: '禁止', + defaultHelper: '預設: 行程可以並發執行', + exclusiveProcessHelper: '行程排他: 只有一個 CUDA 上下文可以使用 GPU,但可以由多個執行緒共享', + exclusiveThreadHelper: '執行緒排他: 只有一個執行緒在 CUDA 上下文中可以使用 GPU', + prohibitedHelper: '禁止: 不允許行程同時執行', + migModeHelper: '用於建立 MIG 實例,在用戶層實現 GPU 的物理隔離。', + migModeNA: '不支援', + current: '即時監控', + history: '歷史記錄', + notSupport: '目前版本或驅動不支援顯示該參數。', }, mcp: { server: 'MCP Server', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 22e8908344f2..28ebdacc4085 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -665,6 +665,7 @@ const message = { gpu: 'GPU 监控', gpuHelper: '当前系统未检测到 NVIDIA-SMI 或者 XPU-SMI 指令,请检查后重试!', process: '进程信息', + processCount: '进程数', type: '类型', typeG: '图形', typeC: '计算', @@ -685,6 +686,35 @@ const message = { memoryUsed: '显存使用', memoryTotal: '显存总计', percent: '使用率', + + base: '基础信息', + driverVersion: '驱动版本', + cudaVersion: 'CUDA 版本', + processMemoryUsage: '显存使用', + performanceStateHelper: '从 P0 (最大性能) 到 P12 (最小性能)', + busID: '总线地址', + persistenceMode: '持续模式', + enabled: '开启', + disabled: '关闭', + persistenceModeHelper: '持续模式能更加快速地响应任务,但相应待机功耗也会增加', + displayActive: '显卡初始化', + displayActiveT: '是', + displayActiveF: '否', + ecc: '是否开启错误检查和纠正技术', + computeMode: '计算模式', + default: '默认', + exclusiveProcess: '进程排他', + exclusiveThread: '线程排他', + prohibited: '禁止', + defaultHelper: '默认: 进程可以并发执行', + exclusiveProcessHelper: '进程排他: 只有一个 CUDA 上下文可以使用 GPU, 但可以由多个线程共享', + exclusiveThreadHelper: '线程排他: 只有一个线程在 CUDA 上下文中可以使用 GPU', + prohibitedHelper: '禁止: 不允许进程同时执行', + migModeHelper: '用于创建 MIG 实例,在用户层实现 GPU 的物理隔离。', + migModeNA: '不支持', + current: '实时监控', + history: '历史记录', + notSupport: '当前版本或驱动不支持显示该参数。', }, mcp: { server: 'MCP Server', diff --git a/frontend/src/routers/modules/ai.ts b/frontend/src/routers/modules/ai.ts index a84789340bd4..e4bf716ec5d7 100644 --- a/frontend/src/routers/modules/ai.ts +++ b/frontend/src/routers/modules/ai.ts @@ -32,23 +32,34 @@ const databaseRouter = { }, }, { - path: '/ai/gpu', + path: '/ai/model/tensorrt', + hidden: true, + name: 'TensorRTLLm', + component: () => import('@/views/ai/model/tensorrt/index.vue'), + meta: { + title: 'aiTools.tensorRT.llm', + activeMenu: '/ai/model/ollama', + requiresAuth: true, + }, + }, + { + path: '/ai/gpu/current', name: 'GPU', - component: () => import('@/views/ai/gpu/index.vue'), + component: () => import('@/views/ai/gpu/current/index.vue'), meta: { icon: 'p-gpu-menu', title: 'aiTools.gpu.gpu', + activeMenu: '/ai/gpu', requiresAuth: true, }, }, { - path: '/ai/model/tensorrt', - hidden: true, - name: 'TensorRTLLm', - component: () => import('@/views/ai/model/tensorrt/index.vue'), + path: '/ai/gpu/history', + name: 'GPUHistory', + component: () => import('@/views/ai/gpu/history/index.vue'), meta: { - title: 'aiTools.tensorRT.llm', - activeMenu: '/ai/model/ollama', + title: 'aiTools.gpu.history', + activeMenu: '/ai/gpu', requiresAuth: true, }, }, diff --git a/frontend/src/views/ai/gpu/current/index.vue b/frontend/src/views/ai/gpu/current/index.vue new file mode 100644 index 000000000000..1269580a0528 --- /dev/null +++ b/frontend/src/views/ai/gpu/current/index.vue @@ -0,0 +1,349 @@ + + + + + diff --git a/frontend/src/views/ai/gpu/history/index.vue b/frontend/src/views/ai/gpu/history/index.vue new file mode 100644 index 000000000000..0bd0bf9535bb --- /dev/null +++ b/frontend/src/views/ai/gpu/history/index.vue @@ -0,0 +1,545 @@ + + + + + diff --git a/frontend/src/views/ai/gpu/index.vue b/frontend/src/views/ai/gpu/index.vue index 9af44694eeee..9a306344f278 100644 --- a/frontend/src/views/ai/gpu/index.vue +++ b/frontend/src/views/ai/gpu/index.vue @@ -1,469 +1,23 @@ - - - diff --git a/frontend/src/views/home/status/index.vue b/frontend/src/views/home/status/index.vue index 8c0347976d53..4ce7d46567b9 100644 --- a/frontend/src/views/home/status/index.vue +++ b/frontend/src/views/home/status/index.vue @@ -417,6 +417,7 @@ const baseInfo = ref({ cpuModelName: '', cpuMhz: 0, currentInfo: null, + prettyDistro: '', quickJump: [], }); const currentInfo = ref({