NVIDIA-SMI:GPU监控与管理完全指南

NVIDIA-SMI:GPU监控与管理完全指南

NVIDIA System Management Interface (SMI) 使用指南

1. 基本信息查询

1.1 GPU基础信息

# 显示所有GPU信息
nvidia-smi

# 周期性监控(每1秒刷新一次)
nvidia-smi -l 1

# 查看详细信息
nvidia-smi -q

# 查看特定GPU信息
nvidia-smi -i 0 # 查看GPU 0的信息

1.2 显存使用情况

# 显示显存使用详情
nvidia-smi --query-gpu=memory.used,memory.free,memory.total --format=csv

# 查看显存使用最多的进程
nvidia-smi --query-compute-apps=pid,used_memory --format=csv

2. 性能监控

2.1 GPU使用率监控

# 监控GPU使用率
nvidia-smi --query-gpu=utilization.gpu --format=csv -l 1

# 监控显存使用率
nvidia-smi --query-gpu=utilization.memory --format=csv -l 1

# 监控温度
nvidia-smi --query-gpu=temperature.gpu --format=csv -l 1

2.2 功耗监控

# 查看功耗信息
nvidia-smi --query-gpu=power.draw,power.limit --format=csv

# 设置功耗限制
nvidia-smi -pl 150 # 设置功耗限制为150W

3. 进程管理

3.1 查看进程

# 列出所有GPU进程
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

# 按GPU分组显示进程
nvidia-smi --query-compute-apps=gpu_uuid,pid,process_name --format=csv

3.2 进程控制

# 终止指定进程
nvidia-smi --gpu-reset

# 终止特定GPU上的所有进程
nvidia-smi --gpu-reset -i 0

4. 高级配置

4.1 时钟频率管理

# 查看当前时钟频率
nvidia-smi --query-gpu=clocks.current.graphics --format=csv

# 设置应用程序时钟
nvidia-smi -ac 877,1530 # 设置内存和图形时钟

# 重置时钟设置
nvidia-smi -rgc # 重置图形时钟
nvidia-smi -rmc # 重置内存时钟

4.2 ECC内存管理

# 查看ECC状态
nvidia-smi --query-gpu=ecc.mode.current --format=csv

# 切换ECC模式(需要重启)
nvidia-smi -e 1 # 启用ECC
nvidia-smi -e 0 # 禁用ECC

5. 监控和日志

5.1 持续监控

# 创建持续监控脚本
cat << 'EOF' > gpu_monitor.sh
#!/bin/bash
while true; do
    nvidia-smi --query-gpu=timestamp,name,pci.bus_id,temperature.gpu,utilization.gpu,utilization.memory,memory.used,memory.total,power.draw --format=csv,noheader >> gpu_stats.log
    sleep 60
done
EOF
chmod +x gpu_monitor.sh

5.2 性能分析

# 导出详细性能数据
nvidia-smi --query-gpu=timestamp,name,pci.bus_id,temperature.gpu,utilization.gpu,utilization.memory,memory.used,memory.total,power.draw --format=csv,noheader > gpu_performance.csv

6. 故障排除

6.1 常见问题诊断

# 检查驱动程序状态
nvidia-smi -q | grep "Driver Version"

# 检查CUDA版本
nvidia-smi -q | grep "CUDA Version"

# 检查GPU错误
nvidia-smi -q | grep "Error"

6.2 性能优化

# 设置持久模式(提高性能)
sudo nvidia-smi -pm 1

# 禁用持久模式
sudo nvidia-smi -pm 0

# 设置计算模式
nvidia-smi -c 0 # 默认模式
nvidia-smi -c 3 # 仅计算模式

7. 最佳实践

7.1 监控脚本示例

#!/bin/bash
# GPU监控脚本

LOG_FILE="gpu_monitoring.log"
INTERVAL=300 # 5分钟间隔

monitor_gpu() {
    while true; do
        date >> $LOG_FILE
        nvidia-smi --query-gpu=timestamp,name,temperature.gpu,utilization.gpu,memory.used,memory.total,power.draw \
            --format=csv,noheader >> $LOG_FILE
        echo "----------------------------------------" >> $LOG_FILE
        sleep $INTERVAL
    done
}

monitor_gpu &

7.2 告警设置

#!/bin/bash
# GPU告警脚本

TEMP_THRESHOLD=80
UTIL_THRESHOLD=90
EMAIL="admin@example.com"

check_gpu() {
    TEMP=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader)
    UTIL=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader | cut -d ' ' -f 1)

    if [ $TEMP -gt $TEMP_THRESHOLD ]; then
        echo "警告:GPU温度过高 ($TEMP°C)" | mail -s "GPU温度警告" $EMAIL
    fi

    if [ $UTIL -gt $UTIL_THRESHOLD ]; then
        echo "警告:GPU使用率过高 ($UTIL%)" | mail -s "GPU使用率警告" $EMAIL
    fi
}

8. 自动化管理

8.1 定时任务设置

# 添加到crontab
*/5 * * * * /path/to/gpu_monitor.sh
0 * * * * /path/to/gpu_check.sh

8.2 集成监控系统

# Prometheus格式输出示例
nvidia-smi --query-gpu=timestamp,name,temperature.gpu,utilization.gpu,memory.used,memory.total,power.draw \
    --format=csv,noheader | \
    awk -F, '{printf "gpu_temperature{gpu=\"%s\"} %s\ngpu_utilization{gpu=\"%s\"} %s\n", $2, $3, $2, $4}'

9. 安全建议

  • 定期更新NVIDIA驱动
  • 监控GPU温度和使用率
  • 设置适当的功耗限制
  • 及时清理僵死进程
  • 保持良好的散热环境
  • 定期备份重要的GPU配置

NVIDIA-SMI 命令行工具输出解释

NVIDIA-SMI (NVIDIA System Management Interface) 是一个命令行工具,用于管理和监控 NVIDIA GPU 设备。让我们详细解释一下 nvidia-smi 输出的各个部分:

顶部标题部分

+—————————————————————————————–+ | NVIDIA-SMI 550.78 Driver Version: 550.78 CUDA Version: 12.4 | |—————————————–+————————+———————-+

NVIDIA-SMI 550.78: NVIDIA-SMI 的版本号。
Driver Version: 550.78: GPU 驱动程序的版本号。
CUDA Version: 12.4: 已安装的 CUDA 版本。
GPU 信息部分

| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
这一部分描述了每个 GPU 的状态信息:
  • GPU: GPU 编号。
  • Name: GPU 的型号名称。
  • Persistence-M: 持久模式(Persistence Mode)的状态(启用或禁用)。持久模式可以防止 GPU 在空闲时进入掉电状态,从而减少响应时间。
  • Bus-Id: GPU 所在的总线 ID。
  • Disp.A: Display Active,显示是否启用。
  • Volatile Uncorr. ECC: 易失性不可纠正的 ECC 错误数量,ECC (Error-Correcting Code) 是一种用于检测和纠正内存错误的技术。
  • GPU 性能和使用情况


| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
  • Fan: 风扇速度(以百分比表示)。
  • Temp: GPU 温度(摄氏度)。
  • Perf: GPU 性能状态(P0 至 P12,其中 P0 是最高性能状态,P12 是最低性能状态)。
  • Pwr:Usage/Cap: 当前功耗及其上限(瓦特)。
  • Memory-Usage: 显存使用情况(使用量/总量,单位为 MiB)。
  • GPU-Util: GPU 使用率(以百分比表示)。
  • Compute M.: 计算模式。

MIG 模式(可选)
Copy code
| | | MIG M. |
MIG M.: 多实例 GPU 模式(MIG)的状态,适用于支持 MIG 的 GPU,如 A100。
示例输出
假设 nvidia-smi 输出如下:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.78 Driver Version: 550.78 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Tesla V100-SXM2-16GB On | 00000000:00:1E.0 Off | 0 |
| N/A 35C P0 24W / 300W | 0MiB / 16160MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
  • GPU 0: Tesla V100-SXM2-16GB。
  • Persistence-M: 启用。
  • Bus-Id: 00000000:00:1E.0。
  • Disp.A: 关闭。
  • Volatile Uncorr. ECC: 0。
  • Fan: N/A(不适用,可能是因为 Tesla V100 没有风扇)。
  • Temp: 35C。
  • Perf: P0(最高性能状态)。
  • Pwr:Usage/Cap: 24W / 300W(当前功耗 24 瓦,上限 300 瓦)。
  • Memory-Usage: 0MiB / 16160MiB(显存使用 0 MiB,总量 16160 MiB)。
  • GPU-Util: 0%(GPU 使用率 0%)。
  • Compute M.: Default(默认计算模式)。

这个工具在监控 GPU 性能、优化资源使用和排除故障时非常有用。