diff --git a/agent/app/dto/dashboard.go b/agent/app/dto/dashboard.go index 78596986e..5ea423444 100644 --- a/agent/app/dto/dashboard.go +++ b/agent/app/dto/dashboard.go @@ -177,6 +177,7 @@ type DiskInfo struct { } type GPUInfo struct { + SharedMemory bool `json:"sharedMemory"` Type string `json:"type"` Index uint `json:"index"` NPUIndex uint `json:"npuIndex"` diff --git a/agent/app/dto/monitor.go b/agent/app/dto/monitor.go index 2bf977ea2..1f1f6b7ce 100644 --- a/agent/app/dto/monitor.go +++ b/agent/app/dto/monitor.go @@ -56,17 +56,18 @@ type MonitorGPUOptions struct { Options []string `json:"options"` } type GPUChartHide struct { - DeviceID string `json:"deviceID"` - Legacy bool `json:"legacy"` - ProductName string `json:"productName"` - Type string `json:"type"` - Process bool `json:"process"` - GPU bool `json:"gpu"` - Memory bool `json:"memory"` - Power bool `json:"power"` - PowerLimit bool `json:"powerLimit"` - Temperature bool `json:"temperature"` - Speed bool `json:"speed"` + SharedMemory bool `json:"sharedMemory"` + DeviceID string `json:"deviceID"` + Legacy bool `json:"legacy"` + ProductName string `json:"productName"` + Type string `json:"type"` + Process bool `json:"process"` + GPU bool `json:"gpu"` + Memory bool `json:"memory"` + Power bool `json:"power"` + PowerLimit bool `json:"powerLimit"` + Temperature bool `json:"temperature"` + Speed bool `json:"speed"` } type MonitorGPUSearch struct { Aggregation string `json:"aggregation" validate:"omitempty,oneof=avg max"` diff --git a/agent/app/service/monitor.go b/agent/app/service/monitor.go index a3df565ce..2ae4c5d5e 100644 --- a/agent/app/service/monitor.go +++ b/agent/app/service/monitor.go @@ -8,6 +8,7 @@ import ( "path/filepath" "sort" "strconv" + "strings" "sync" "time" @@ -19,6 +20,7 @@ import ( "github.com/1Panel-dev/1Panel/agent/app/model" "github.com/1Panel-dev/1Panel/agent/global" "github.com/1Panel-dev/1Panel/agent/utils/ai_tools/accelerator" + "github.com/1Panel-dev/1Panel/agent/utils/ai_tools/gpu" "github.com/1Panel-dev/1Panel/agent/utils/common" "github.com/1Panel-dev/1Panel/agent/utils/psutil" "github.com/robfig/cron/v3" @@ -205,7 +207,14 @@ func (m *MonitorService) LoadGPUOptions() dto.MonitorGPUOptions { continue } seen[key] = true - data.ChartHide = append(data.ChartHide, dto.GPUChartHide{DeviceID: device.DeviceID, ProductName: device.ProductName, Type: device.DeviceType, Legacy: device.DeviceID == ""}) + _, productName, _ := strings.Cut(device.ProductName, " - ") + data.ChartHide = append(data.ChartHide, dto.GPUChartHide{ + DeviceID: device.DeviceID, + ProductName: device.ProductName, + Type: device.DeviceType, + Legacy: device.DeviceID == "", + SharedMemory: strings.HasPrefix(device.DeviceID, "nvidia:") && gpu.UsesSystemMemory(productName), + }) data.Options = append(data.Options, device.ProductName) } return data @@ -800,9 +809,10 @@ func loadGPUOptions(snapshot *accelerator.Snapshot) dto.MonitorGPUOptions { }) for _, item := range snapshot.Devices { chartHide := dto.GPUChartHide{ - DeviceID: item.ID, - ProductName: item.Label, - Type: string(item.Kind), + SharedMemory: item.GPU != nil && item.GPU.SharedMemory, + DeviceID: item.ID, + ProductName: item.Label, + Type: string(item.Kind), } data.ChartHide = append(data.ChartHide, chartHide) data.Options = append(data.Options, chartHide.ProductName) diff --git a/agent/utils/ai_tools/gpu/nvidia.go b/agent/utils/ai_tools/gpu/nvidia.go index 62ba1ae2f..60cb2c604 100644 --- a/agent/utils/ai_tools/gpu/nvidia.go +++ b/agent/utils/ai_tools/gpu/nvidia.go @@ -4,10 +4,12 @@ import ( "context" "encoding/xml" "fmt" + "slices" "strings" "time" "github.com/1Panel-dev/1Panel/agent/utils/cmd" + "github.com/shirou/gopsutil/v4/mem" ) const nvidiaSMICommand = "nvidia-smi" @@ -20,7 +22,31 @@ func (n nvidiaSMI) LoadInfo(ctx context.Context) (*Info, error) { if err != nil { return nil, fmt.Errorf("calling %s failed: %w", nvidiaSMICommand, err) } - return parseNvidiaSMI([]byte(itemData)) + info, err := parseNvidiaSMI([]byte(itemData)) + if err != nil { + return nil, err + } + if slices.ContainsFunc(info.Devices, func(device Device) bool { return device.SharedMemory }) { + memory, err := mem.VirtualMemoryWithContext(ctx) + if err != nil { + info.Warnings = append(info.Warnings, fmt.Sprintf("read system shared memory: %v", err)) + } else { + for index := range info.Devices { + device := &info.Devices[index] + if !device.SharedMemory { + continue + } + device.MemUsed = fmt.Sprintf("%d B", memory.Used) + device.MemTotal = fmt.Sprintf("%d B", memory.Total) + device.MemoryFree = fmt.Sprintf("%.2f MiB", float64(memory.Available)/(1024*1024)) + } + } + } + return info, nil +} + +func UsesSystemMemory(productName string) bool { + return strings.EqualFold(strings.TrimSpace(productName), "NVIDIA GB10") } func parseNvidiaSMI(buf []byte) (*Info, error) { @@ -38,6 +64,7 @@ func parseNvidiaSMI(buf []byte) (*Info, error) { for i := range s.Gpu { gpuItem := Device{ Type: "nvidia", + SharedMemory: UsesSystemMemory(s.Gpu[i].ProductName), MemoryActivity: s.Gpu[i].Utilization.MemoryUtil, EncoderUtil: s.Gpu[i].Utilization.EncoderUtil, DecoderUtil: s.Gpu[i].Utilization.DecoderUtil, @@ -72,6 +99,12 @@ func parseNvidiaSMI(buf []byte) (*Info, error) { ComputeMode: s.Gpu[i].ComputeMode, MigMode: s.Gpu[i].MigMode.CurrentMig, } + if gpuItem.SharedMemory { + gpuItem.MemUsed = "N/A" + gpuItem.MemTotal = "N/A" + gpuItem.MemoryFree = "N/A" + gpuItem.MemoryReserved = "N/A" + } gpuItem.ECCPending = s.Gpu[i].EccMode.PendingEcc gpuItem.ECCErrors = []ECCError{ {Scope: "Volatile Total", Correctable: s.Gpu[i].EccErrors.Volatile.SingleBit.Total, Uncorrectable: s.Gpu[i].EccErrors.Volatile.DoubleBit.Total}, diff --git a/agent/utils/ai_tools/gpu/types.go b/agent/utils/ai_tools/gpu/types.go index 5e96a97f7..d8888d137 100644 --- a/agent/utils/ai_tools/gpu/types.go +++ b/agent/utils/ai_tools/gpu/types.go @@ -17,6 +17,7 @@ type ECCError struct { } type Device struct { + SharedMemory bool `json:"sharedMemory"` ECCPending string `json:"eccPending"` ECCErrors []ECCError `json:"eccErrors"` MemoryActivity string `json:"memoryActivity"` diff --git a/frontend/src/api/interface/ai.ts b/frontend/src/api/interface/ai.ts index 75cd34b9e..1e76c0468 100644 --- a/frontend/src/api/interface/ai.ts +++ b/frontend/src/api/interface/ai.ts @@ -49,6 +49,7 @@ export namespace AI { xpu: XpuInfo['xpu']; } export interface GPU { + sharedMemory?: boolean; eccPending?: string; eccErrors?: { scope: string; correctable: string; uncorrectable: string }[]; memoryActivity?: string; @@ -139,6 +140,7 @@ export namespace AI { chartHide: Array; } export interface ChartHide { + sharedMemory?: boolean; deviceID?: string; legacy?: boolean; productName: string; diff --git a/frontend/src/api/interface/dashboard.ts b/frontend/src/api/interface/dashboard.ts index a33f02f8f..a15bd3d3d 100644 --- a/frontend/src/api/interface/dashboard.ts +++ b/frontend/src/api/interface/dashboard.ts @@ -151,6 +151,7 @@ export namespace Dashboard { inodesUsedPercent: number; } export interface GPUInfo { + sharedMemory?: boolean; type: string; index: number; npuIndex: number; diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 68d76e1bc..0adf9d404 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1071,11 +1071,11 @@ const message = { onlineModel: 'Online models', instanceDeployment: 'Deploy by instance', nvidiaDeployment: 'NVIDIA-optimized deployment', - engines: 'Inference engines', + engines: 'Local inference engines', modelManagement: 'Model management', serviceDetails: 'Service details', deployments: 'Local deployments', - files: 'Model files', + files: 'Model hub', connectExternal: 'Connect external service', deploymentTemplates: 'vLLM startup command templates', engineProvider: 'Engine / Provider', @@ -1643,6 +1643,11 @@ const message = { timePerOutputTokenChart: 'Inter-token latency', }, gpu: { + systemMemory: 'Shared system memory', + systemMemoryUsed: 'System memory used', + systemMemoryTotal: 'Total system memory', + systemMemoryAvailable: 'Available system memory', + systemMemoryHelper: 'Shared by the CPU and GPU. Shows system-wide memory usage, not GPU-only usage.', memoryActivity: 'Memory read/write activity', hotspotTemperature: 'Hotspot temperature', fanRPM: 'Fan speed (RPM)', @@ -1678,7 +1683,6 @@ const message = { historyPeak: 'Peak', historyAggregated: '{count} samples aggregated into {seconds}-second intervals; processes show counts only.', - historyRaw: '{count} original samples.', historyMetricEmpty: 'No data for this metric in the selected time range', historyLoadFailed: 'Failed to load history. Please retry.', collectedAt: 'Collected at', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index 6410ef510..968174887 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -1073,11 +1073,11 @@ const message = { onlineModel: 'Modelos en línea', instanceDeployment: 'Despliegue por instancia', nvidiaDeployment: 'Despliegue optimizado para NVIDIA', - engines: 'Motores de inferencia', + engines: 'Motores de inferencia locales', modelManagement: 'Gestión de modelos', serviceDetails: 'Detalles del servicio', deployments: 'Despliegues locales', - files: 'Archivos de modelos', + files: 'Catálogo de modelos', connectExternal: 'Conectar servicio externo', deploymentTemplates: 'Plantillas de comandos de inicio de vLLM', engineProvider: 'Motor / Proveedor', @@ -1653,6 +1653,12 @@ const message = { timePerOutputTokenChart: 'Latencia entre tokens', }, gpu: { + systemMemory: 'Memoria compartida del sistema', + systemMemoryUsed: 'Memoria del sistema utilizada', + systemMemoryTotal: 'Memoria total del sistema', + systemMemoryAvailable: 'Memoria disponible del sistema', + systemMemoryHelper: + 'Compartida por la CPU y la GPU. Muestra el uso de memoria de todo el sistema, no solo de la GPU.', memoryActivity: 'Actividad de lectura/escritura de memoria', hotspotTemperature: 'Temperatura del punto caliente', fanRPM: 'Velocidad del ventilador (RPM)', @@ -1688,7 +1694,6 @@ const message = { historyPeak: 'Máximo', historyAggregated: '{count} muestras agrupadas en intervalos de {seconds} segundos; los procesos solo muestran cantidades.', - historyRaw: '{count} muestras originales.', historyMetricEmpty: 'No hay datos de esta métrica en el período seleccionado', historyLoadFailed: 'No se pudo cargar el historial. Inténtelo de nuevo.', collectedAt: 'Fecha de recopilación', diff --git a/frontend/src/lang/modules/fa.ts b/frontend/src/lang/modules/fa.ts index 08e0b5fbd..ebbd95e9f 100644 --- a/frontend/src/lang/modules/fa.ts +++ b/frontend/src/lang/modules/fa.ts @@ -1055,11 +1055,11 @@ const message = { onlineModel: 'مدل‌های آنلاین', instanceDeployment: 'استقرار بر اساس نمونه', nvidiaDeployment: 'استقرار بهینه‌شده برای NVIDIA', - engines: 'موتورهای استنتاج', + engines: 'موتورهای استنتاج محلی', modelManagement: 'مدیریت مدل‌ها', serviceDetails: 'جزئیات سرویس', deployments: 'استقرارهای محلی', - files: 'فایل‌های مدل', + files: 'مرکز مدل‌ها', connectExternal: 'اتصال به سرویس خارجی', deploymentTemplates: 'الگوهای فرمان راه‌اندازی vLLM', engineProvider: 'موتور / ارائه‌دهنده', @@ -1625,6 +1625,11 @@ const message = { timePerOutputTokenChart: 'تأخیر بین توکن‌ها', }, gpu: { + systemMemory: 'حافظهٔ مشترک سیستم', + systemMemoryUsed: 'حافظهٔ مصرف‌شدهٔ سیستم', + systemMemoryTotal: 'کل حافظهٔ سیستم', + systemMemoryAvailable: 'حافظهٔ در دسترس سیستم', + systemMemoryHelper: 'بین CPU و GPU مشترک است. مصرف حافظهٔ کل سیستم را نشان می‌دهد، نه فقط مصرف GPU.', memoryActivity: 'فعالیت خواندن/نوشتن حافظه', hotspotTemperature: 'دمای نقطه داغ', fanRPM: 'سرعت فن (RPM)', @@ -1660,7 +1665,6 @@ const message = { historyPeak: 'بیشینه', historyAggregated: '{count} نمونه در بازه‌های {seconds} ثانیه‌ای تجمیع شده‌اند؛ فقط تعداد فرایندها نمایش داده می‌شود.', - historyRaw: '{count} نمونه اصلی.', historyMetricEmpty: 'در بازه زمانی انتخاب‌شده داده‌ای برای این شاخص وجود ندارد', historyLoadFailed: 'بارگیری سابقه ناموفق بود. دوباره تلاش کنید.', collectedAt: 'زمان گردآوری', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 0cdb11f35..a1f49aa88 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1059,11 +1059,11 @@ const message = { onlineModel: 'オンラインモデル', instanceDeployment: 'インスタンス単位でデプロイ', nvidiaDeployment: 'NVIDIA 向け最適化デプロイ', - engines: '推論エンジン', + engines: 'ローカル推論エンジン', modelManagement: 'モデル管理', serviceDetails: 'サービス詳細', deployments: 'ローカルデプロイ', - files: 'モデルファイル', + files: 'モデル広場', connectExternal: '外部サービスに接続', deploymentTemplates: 'vLLM 起動コマンドテンプレート', engineProvider: 'エンジン / プロバイダー', @@ -1629,6 +1629,11 @@ const message = { timePerOutputTokenChart: 'トークン間遅延', }, gpu: { + systemMemory: '共有システムメモリ', + systemMemoryUsed: 'システムメモリ使用量', + systemMemoryTotal: 'システムメモリ合計', + systemMemoryAvailable: '利用可能なシステムメモリ', + systemMemoryHelper: 'CPU と GPU で共有します。GPU 単体ではなく、システム全体のメモリ使用量を表示します。', memoryActivity: 'メモリ読み書き稼働率', hotspotTemperature: 'ホットスポット温度', fanRPM: 'ファン回転数(RPM)', @@ -1663,7 +1668,6 @@ const message = { historyAverage: '平均値', historyPeak: '最大値', historyAggregated: '{count} 件のサンプルを {seconds} 秒間隔で集計。プロセスは件数のみ表示します。', - historyRaw: '元のサンプル {count} 件。', historyMetricEmpty: '選択した期間にこの指標のデータはありません', historyLoadFailed: '履歴の読み込みに失敗しました。再試行してください。', collectedAt: '収集日時', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index aaa2eacbc..d6eea982c 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -1049,11 +1049,11 @@ const message = { onlineModel: '온라인 모델', instanceDeployment: '인스턴스별 배포', nvidiaDeployment: 'NVIDIA 최적화 배포', - engines: '추론 엔진', + engines: '로컬 추론 엔진', modelManagement: '모델 관리', serviceDetails: '서비스 상세 정보', deployments: '로컬 배포', - files: '모델 파일', + files: '모델 허브', connectExternal: '외부 서비스 연결', deploymentTemplates: 'vLLM 시작 명령 템플릿', engineProvider: '엔진 / 공급자', @@ -1614,6 +1614,11 @@ const message = { timePerOutputTokenChart: '토큰 간 지연', }, gpu: { + systemMemory: '공유 시스템 메모리', + systemMemoryUsed: '사용 중인 시스템 메모리', + systemMemoryTotal: '전체 시스템 메모리', + systemMemoryAvailable: '사용 가능한 시스템 메모리', + systemMemoryHelper: 'CPU와 GPU가 공유합니다. GPU만의 사용량이 아닌 시스템 전체 메모리 사용량을 표시합니다.', memoryActivity: '메모리 읽기/쓰기 활성률', hotspotTemperature: '핫스폿 온도', fanRPM: '팬 회전 속도 (RPM)', @@ -1648,7 +1653,6 @@ const message = { historyAverage: '평균', historyPeak: '최댓값', historyAggregated: '샘플 {count}개를 {seconds}초 간격으로 집계합니다. 프로세스는 개수만 표시합니다.', - historyRaw: '원본 샘플 {count}개.', historyMetricEmpty: '선택한 기간에 이 지표의 데이터가 없습니다', historyLoadFailed: '기록을 불러오지 못했습니다. 다시 시도하세요.', collectedAt: '수집 시간', diff --git a/frontend/src/lang/modules/lo.ts b/frontend/src/lang/modules/lo.ts index a33d70df2..654554336 100644 --- a/frontend/src/lang/modules/lo.ts +++ b/frontend/src/lang/modules/lo.ts @@ -1046,11 +1046,11 @@ const message = { onlineModel: 'ໂມເດວອອນລາຍ', instanceDeployment: 'ນຳໃຊ້ຕາມອິນສະແຕນ', nvidiaDeployment: 'ການນຳໃຊ້ທີ່ປັບໃຫ້ເໝາະກັບ NVIDIA', - engines: 'ເຄື່ອງຈັກອະນຸມານ', + engines: 'ເຄື່ອງຈັກອະນຸມານພາຍໃນ', modelManagement: 'ຈັດການໂມເດວ', serviceDetails: 'ລາຍລະອຽດບໍລິການ', deployments: 'ການນຳໃຊ້ພາຍໃນເຄື່ອງ', - files: 'ໄຟລ໌ໂມເດວ', + files: 'ສູນລວມໂມເດວ', connectExternal: 'ເຊື່ອມຕໍ່ບໍລິການພາຍນອກ', deploymentTemplates: 'ແມ່ແບບຄຳສັ່ງເລີ່ມຕົ້ນ vLLM', engineProvider: 'ເຄື່ອງຈັກ / ຜູ້ໃຫ້ບໍລິການ', @@ -1606,6 +1606,11 @@ const message = { timePerOutputTokenChart: 'ເວລາລໍຖ້າລະຫວ່າງ Token', }, gpu: { + systemMemory: 'ໜ່ວຍຄວາມຈຳລະບົບທີ່ໃຊ້ຮ່ວມກັນ', + systemMemoryUsed: 'ໜ່ວຍຄວາມຈຳລະບົບທີ່ໃຊ້ແລ້ວ', + systemMemoryTotal: 'ໜ່ວຍຄວາມຈຳລະບົບທັງໝົດ', + systemMemoryAvailable: 'ໜ່ວຍຄວາມຈຳລະບົບທີ່ພ້ອມໃຊ້', + systemMemoryHelper: 'CPU ແລະ GPU ໃຊ້ຮ່ວມກັນ. ສະແດງການໃຊ້ໜ່ວຍຄວາມຈຳຂອງທັງລະບົບ ບໍ່ແມ່ນສະເພາະ GPU.', memoryActivity: 'ກິດຈະກຳອ່ານ/ຂຽນໜ່ວຍຄວາມຈຳ', hotspotTemperature: 'ອຸນຫະພູມຈຸດຮ້ອນ', fanRPM: 'ຄວາມໄວພັດລົມ (RPM)', @@ -1640,7 +1645,6 @@ const message = { historyAverage: 'ຄ່າສະເລ່ຍ', historyPeak: 'ຄ່າສູງສຸດ', historyAggregated: 'ລວມ {count} ຕົວຢ່າງເປັນຊ່ວງ {seconds} ວິນາທີ; ສະແດງພຽງຈຳນວນໂປຣເຊສ.', - historyRaw: '{count} ຕົວຢ່າງຕົ້ນສະບັບ.', historyMetricEmpty: 'ບໍ່ມີຂໍ້ມູນຕົວຊີ້ວັດນີ້ໃນຊ່ວງເວລາທີ່ເລືອກ', historyLoadFailed: 'ໂຫຼດປະຫວັດບໍ່ສຳເລັດ. ກະລຸນາລອງໃໝ່.', collectedAt: 'ເວລາເກັບຂໍ້ມູນ', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 4cf0fcd52..b974f6def 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1081,11 +1081,11 @@ const message = { onlineModel: 'Model dalam talian', instanceDeployment: 'Pengerahan mengikut instans', nvidiaDeployment: 'Pengerahan dioptimumkan untuk NVIDIA', - engines: 'Enjin inferens', + engines: 'Enjin inferens setempat', modelManagement: 'Pengurusan model', serviceDetails: 'Butiran perkhidmatan', deployments: 'Pengerahan setempat', - files: 'Fail model', + files: 'Hab model', connectExternal: 'Sambungkan perkhidmatan luaran', deploymentTemplates: 'Templat arahan permulaan vLLM', engineProvider: 'Enjin / Pembekal', @@ -1655,6 +1655,12 @@ const message = { timePerOutputTokenChart: 'Kependaman antara token', }, gpu: { + systemMemory: 'Memori sistem dikongsi', + systemMemoryUsed: 'Memori sistem digunakan', + systemMemoryTotal: 'Jumlah memori sistem', + systemMemoryAvailable: 'Memori sistem tersedia', + systemMemoryHelper: + 'Dikongsi oleh CPU dan GPU. Memaparkan penggunaan memori seluruh sistem, bukan GPU sahaja.', memoryActivity: 'Aktiviti baca/tulis memori', hotspotTemperature: 'Suhu titik panas', fanRPM: 'Kelajuan kipas (RPM)', @@ -1690,7 +1696,6 @@ const message = { historyPeak: 'Puncak', historyAggregated: '{count} sampel diagregatkan dalam sela {seconds} saat; proses hanya memaparkan bilangan.', - historyRaw: '{count} sampel asal.', historyMetricEmpty: 'Tiada data untuk metrik ini dalam julat masa yang dipilih', historyLoadFailed: 'Gagal memuatkan sejarah. Sila cuba lagi.', collectedAt: 'Masa pengumpulan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 19b9f992e..3dcecd6a8 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1077,11 +1077,11 @@ const message = { onlineModel: 'Modelos online', instanceDeployment: 'Implantação por instância', nvidiaDeployment: 'Implantação otimizada para NVIDIA', - engines: 'Mecanismos de inferência', + engines: 'Mecanismos de inferência locais', modelManagement: 'Gerenciamento de modelos', serviceDetails: 'Detalhes do serviço', deployments: 'Implantações locais', - files: 'Arquivos de modelos', + files: 'Central de modelos', connectExternal: 'Conectar serviço externo', deploymentTemplates: 'Modelos de comandos de inicialização do vLLM', engineProvider: 'Mecanismo / Provedor', @@ -1654,6 +1654,12 @@ const message = { timePerOutputTokenChart: 'Latência entre tokens', }, gpu: { + systemMemory: 'Memória compartilhada do sistema', + systemMemoryUsed: 'Memória do sistema em uso', + systemMemoryTotal: 'Memória total do sistema', + systemMemoryAvailable: 'Memória disponível do sistema', + systemMemoryHelper: + 'Compartilhada pela CPU e GPU. Exibe o uso de memória de todo o sistema, não apenas da GPU.', memoryActivity: 'Atividade de leitura/escrita da memória', hotspotTemperature: 'Temperatura do ponto quente', fanRPM: 'Rotação da ventoinha (RPM)', @@ -1689,7 +1695,6 @@ const message = { historyPeak: 'Pico', historyAggregated: '{count} amostras agregadas em intervalos de {seconds} segundos; processos exibem apenas contagens.', - historyRaw: '{count} amostras originais.', historyMetricEmpty: 'Sem dados desta métrica no período selecionado', historyLoadFailed: 'Falha ao carregar o histórico. Tente novamente.', collectedAt: 'Data da coleta', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 39ce9a80a..cde353c2b 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1070,11 +1070,11 @@ const message = { onlineModel: 'Онлайн-модели', instanceDeployment: 'Развертывание по экземплярам', nvidiaDeployment: 'Развертывание с оптимизацией для NVIDIA', - engines: 'Движки инференса', + engines: 'Локальные движки инференса', modelManagement: 'Управление моделями', serviceDetails: 'Сведения о сервисе', deployments: 'Локальные развертывания', - files: 'Файлы моделей', + files: 'Каталог моделей', connectExternal: 'Подключить внешний сервис', deploymentTemplates: 'Шаблоны команд запуска vLLM', engineProvider: 'Движок / Поставщик', @@ -1644,6 +1644,12 @@ const message = { timePerOutputTokenChart: 'Задержка между токенами', }, gpu: { + systemMemory: 'Общая системная память', + systemMemoryUsed: 'Использовано системной памяти', + systemMemoryTotal: 'Всего системной памяти', + systemMemoryAvailable: 'Доступная системная память', + systemMemoryHelper: + 'Память совместно используется CPU и GPU. Показано потребление всей системы, а не только GPU.', memoryActivity: 'Активность чтения/записи памяти', hotspotTemperature: 'Температура горячей точки', fanRPM: 'Скорость вентилятора (об/мин)', @@ -1679,7 +1685,6 @@ const message = { historyPeak: 'Максимум', historyAggregated: '{count} измерений сгруппированы по {seconds} с; для процессов показано только количество.', - historyRaw: 'Исходных измерений: {count}.', historyMetricEmpty: 'Нет данных этой метрики за выбранный период', historyLoadFailed: 'Не удалось загрузить историю. Повторите попытку.', collectedAt: 'Время сбора', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index bd0d71a36..f5ee54181 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -1080,11 +1080,11 @@ const message = { onlineModel: 'Çevrimiçi modeller', instanceDeployment: 'Örnek bazında dağıtım', nvidiaDeployment: 'NVIDIA için optimize edilmiş dağıtım', - engines: 'Çıkarım motorları', + engines: 'Yerel çıkarım motorları', modelManagement: 'Model yönetimi', serviceDetails: 'Hizmet ayrıntıları', deployments: 'Yerel dağıtımlar', - files: 'Model dosyaları', + files: 'Model merkezi', connectExternal: 'Harici hizmete bağlan', deploymentTemplates: 'vLLM başlatma komutu şablonları', engineProvider: 'Motor / Sağlayıcı', @@ -1652,6 +1652,12 @@ const message = { timePerOutputTokenChart: 'Token arası gecikme', }, gpu: { + systemMemory: 'Paylaşılan sistem belleği', + systemMemoryUsed: 'Kullanılan sistem belleği', + systemMemoryTotal: 'Toplam sistem belleği', + systemMemoryAvailable: 'Kullanılabilir sistem belleği', + systemMemoryHelper: + 'CPU ve GPU tarafından paylaşılır. Yalnızca GPU kullanımını değil, tüm sistemin bellek kullanımını gösterir.', memoryActivity: 'Bellek okuma/yazma etkinliği', hotspotTemperature: 'Sıcak nokta sıcaklığı', fanRPM: 'Fan hızı (RPM)', @@ -1687,7 +1693,6 @@ const message = { historyPeak: 'En yüksek', historyAggregated: '{count} örnek {seconds} saniyelik aralıklarla toplandı; işlemler için yalnızca sayılar gösterilir.', - historyRaw: '{count} ham örnek.', historyMetricEmpty: 'Seçilen zaman aralığında bu metriğe ait veri yok', historyLoadFailed: 'Geçmiş yüklenemedi. Lütfen tekrar deneyin.', collectedAt: 'Toplanma zamanı', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index ed8ce3981..ecfd6cd37 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -1009,11 +1009,11 @@ const message = { onlineModel: '線上模型', instanceDeployment: '按執行個體部署', nvidiaDeployment: 'NVIDIA 最佳化部署', - engines: '推理引擎', + engines: '本機推理引擎', modelManagement: '模型管理', serviceDetails: '服務詳情', deployments: '本機部署', - files: '模型檔案', + files: '模型廣場', connectExternal: '接入外部服務', deploymentTemplates: 'vLLM 啟動命令範本', engineProvider: '引擎 / 供應商', @@ -1555,6 +1555,11 @@ const message = { timePerOutputTokenChart: 'Token 間延遲', }, gpu: { + systemMemory: '系統共享記憶體', + systemMemoryUsed: '系統已用記憶體', + systemMemoryTotal: '系統總記憶體', + systemMemoryAvailable: '系統可用記憶體', + systemMemoryHelper: 'CPU 與 GPU 共用,顯示整機記憶體使用情況,不代表 GPU 獨占用量。', memoryActivity: '顯示記憶體讀寫活躍率', hotspotTemperature: '熱點溫度', fanRPM: '風扇轉速(RPM)', @@ -1589,7 +1594,6 @@ const message = { historyAverage: '平均值', historyPeak: '峰值', historyAggregated: '共 {count} 筆取樣,按 {seconds} 秒彙整;程序僅顯示統計數量。', - historyRaw: '共 {count} 筆原始取樣。', historyMetricEmpty: '所選時間範圍內沒有此指標的資料', historyLoadFailed: '歷史記錄載入失敗,請重試', collectedAt: '採集時間', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 573e6f398..03f22f6bb 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1022,11 +1022,11 @@ const message = { onlineModel: '在线模型', instanceDeployment: '按实例部署', nvidiaDeployment: 'NVIDIA 优化部署', - engines: '推理引擎', + engines: '本地推理引擎', modelManagement: '模型管理', serviceDetails: '服务详情', deployments: '本地部署', - files: '模型文件', + files: '模型广场', connectExternal: '接入外部服务', deploymentTemplates: 'vLLM 启动命令模板', engineProvider: '引擎 / 供应商', @@ -1568,6 +1568,11 @@ const message = { timePerOutputTokenChart: 'Token 间延迟', }, gpu: { + systemMemory: '系统共享内存', + systemMemoryUsed: '系统已用内存', + systemMemoryTotal: '系统总内存', + systemMemoryAvailable: '系统可用内存', + systemMemoryHelper: 'CPU 与 GPU 共用,显示整机内存使用情况,不代表 GPU 独占用量。', memoryActivity: '显存读写活跃率', hotspotTemperature: '热点温度', fanRPM: '风扇转速(RPM)', @@ -1602,7 +1607,6 @@ const message = { historyAverage: '平均值', historyPeak: '峰值', historyAggregated: '共 {count} 条采样,按 {seconds} 秒聚合;进程仅展示统计数量。', - historyRaw: '共 {count} 条原始采样。', historyMetricEmpty: '所选时间范围内没有该指标的数据', historyLoadFailed: '历史记录加载失败,请重试', collectedAt: '采集时间', diff --git a/frontend/src/views/ai/gpu/current/index.vue b/frontend/src/views/ai/gpu/current/index.vue index 2b786c5ab..ff02d076e 100644 --- a/frontend/src/views/ai/gpu/current/index.vue +++ b/frontend/src/views/ai/gpu/current/index.vue @@ -79,6 +79,9 @@ > {{ $t('commons.button.view') }} + + {{ $t('aiTools.gpu.history') }} + @@ -97,7 +100,21 @@ />
- {{ $t('aiTools.gpu.memoryUsed') }} + + {{ + $t( + item.type !== 'ascend' && item.sharedMemory + ? 'aiTools.gpu.systemMemory' + : 'aiTools.gpu.memoryUsed', + ) + }} + + + + {{ formatMemory(item.memUsed, item.memTotal) }} {{ $t('commons.button.view') }} + + {{ $t('aiTools.gpu.history') }} +
@@ -321,6 +341,8 @@