告别手动刷新!教你用PowerShell脚本实现nvidia-smi自动监控(Windows版)

张开发
2026/4/15 23:11:05 15 分钟阅读

分享文章

告别手动刷新!教你用PowerShell脚本实现nvidia-smi自动监控(Windows版)
Windows平台下用PowerShell实现NVIDIA GPU状态自动监控每次调试深度学习模型时你是不是也厌倦了反复手动输入nvidia-smi查看显存占用在Linux下可以用watch命令轻松实现自动刷新但Windows用户往往只能不断重复敲击键盘。今天我们就来彻底解决这个痛点用PowerShell脚本打造一个专属的GPU监控看板。1. 为什么需要自动化监控GPU状态训练神经网络时GPU显存就像油箱里的汽油——你永远不知道它什么时候会突然耗尽。我遇到过太多次因为显存泄漏导致训练意外中断的情况每次都要重新跑几个小时的模型。手动执行nvidia-smi不仅分散注意力还容易错过关键时间点的状态变化。Windows平台虽然没有原生的watch命令但PowerShell的灵活性完全可以实现相同功能。相比第三方工具原生脚本方案有以下优势零依赖不需要安装额外软件可定制可以自由调整刷新频率和显示内容低开销脚本运行几乎不占用系统资源2. 基础监控脚本实现让我们从一个最简单的循环脚本开始这相当于Linux中的watch -n 1 nvidia-smiwhile ($true) { cls nvidia-smi Start-Sleep -Seconds 1 }这个脚本做了三件事cls清空当前控制台内容执行nvidia-smi获取GPU状态暂停1秒后重复实际使用技巧按CtrlC可随时终止脚本调整-Seconds参数改变刷新频率如0.5秒更实时在VS Code的终端中运行效果最佳支持文字选择和复制3. 增强版监控脚本开发基础版本虽然能用但缺乏关键信息高亮和异常预警。下面是我在实际项目中优化后的增强脚本# 设置控制台窗口标题 $Host.UI.RawUI.WindowTitle NVIDIA GPU监控看板 - 按CtrlC退出 # 定义颜色变量 $warningColor Yellow $criticalColor Red $normalColor Green while ($true) { $output nvidia-smi | Out-String # 清屏并显示时间戳 cls Write-Host 最后刷新: $(Get-Date -Format HH:mm:ss)n -ForegroundColor Cyan # 分析显存使用情况 $memMatch [regex]::Match($output, (\d)MiB / (\d)MiB) if ($memMatch.Success) { $usedMem [int]$memMatch.Groups[1].Value $totalMem [int]$memMatch.Groups[2].Value $memPercent ($usedMem / $totalMem) * 100 # 根据使用率设置颜色 $memColor if ($memPercent -gt 90) { $criticalColor } elseif ($memPercent -gt 70) { $warningColor } else { $normalColor } Write-Host 显存使用: $usedMem/$totalMem MiB ($([math]::Round($memPercent))%) -ForegroundColor $memColor } # 输出完整nvidia-smi信息 Write-Host n完整GPU状态:n $output # 5秒刷新一次避免太频繁 Start-Sleep -Seconds 5 }这个增强版增加了以下实用功能显存使用率百分比计算直观了解负载情况颜色预警系统正常(70%)绿色警告(70-90%)黄色危险(90%)红色时间戳显示记录最后刷新时间自定义窗口标题方便识别4. 高级功能扩展对于需要长期监控的场景我们可以进一步扩展脚本功能4.1 日志记录功能# 在循环前添加日志文件设置 $logDir C:\GPU_Logs if (!(Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir } $logFile $logDir\gpu_log_$(Get-Date -Format yyyyMMdd).csv # 在循环内添加日志记录 $timestamp Get-Date -Format yyyy-MM-dd HH:mm:ss $gpuData nvidia-smi --query-gpuutilization.gpu,memory.used,memory.total --formatcsv,noheader $timestamp,$gpuData | Out-File -Append -FilePath $logFile4.2 多GPU监控支持如果你使用的是多GPU工作站这个脚本可以显示每个GPU的独立状态$gpuCount (nvidia-smi -L | Measure-Object).Count for ($i0; $i -lt $gpuCount; $i) { $gpuInfo nvidia-smi -i $i --query-gpuindex,name,utilization.gpu,memory.used,memory.total --formatcsv,noheader Write-Host GPU $i 状态: $gpuInfo }4.3 温度监控与预警$tempInfo nvidia-smi --query-gputemperature.gpu --formatcsv,noheader if ([int]$tempInfo -gt 85) { Write-Host 警告: GPU温度过高! $tempInfo°C -ForegroundColor Red # 可以添加声音报警 [console]::Beep(1000, 500) }5. 常见问题与解决方案5.1 nvidia-smi命令找不到如果遇到命令无法识别的情况可能是PATH环境变量问题。尝试以下解决方案找到nvidia-smi.exe的完整路径通常在C:\Program Files\NVIDIA Corporation\NVSMI通过完整路径执行 C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe或者将路径添加到系统环境变量5.2 脚本执行权限问题PowerShell默认执行策略可能限制脚本运行。以管理员身份运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser5.3 输出格式混乱有时nvidia-smi输出会出现换行错乱可以添加格式参数nvidia-smi --query-gpuutilization.gpu,memory.used,memory.total --formatcsv6. 将脚本转化为便捷工具为了让监控脚本更易用我们可以把它打包成便捷工具将脚本保存为.ps1文件如gpu_monitor.ps1创建快捷方式设置目标powershell.exe -NoExit -File 路径\gpu_monitor.ps1运行方式最小化双击快捷方式即可启动监控对于团队共享使用还可以将脚本放在网络共享位置方便所有成员使用统一监控工具。

更多文章