安装nvitop
# 使用pip安装nvitop
pip install nvitop
# 从源码安装(最新版本)
pip install git+https://github.com/XuehaiPan/nvitop.git
快速启动
# 启动交互式监控界面
nvitop
# 监控特定GPU(如第0号GPU)
nvitop -i 0
# 监控进程(通过PID过滤)
nvitop -p 1234
# 启动Web仪表盘
nvitop --dashboard
核心功能使用
实时监控
from nvitop import Device, colored
device = Device(0) # 选择第一个GPU
# 打印GPU基本信息
print(f"GPU {device.index}: {device.name()}")
print(f"利用率: {colored(f'{device.gpu_utilization()}%', 'green')}")
print(f"内存使用: {device.memory_used_human()}/{device.memory_total_human()}")
print(f"温度: {device.temperature()}°C")
进程级监控
from nvitop import Device
device = Device(0)
processes = device.processes() # 获取GPU上所有进程
for pid, process in processes.items():
print(f"PID: {pid}")
print(f" 进程名: {process.name()}")
print(f" GPU内存: {process.gpu_memory_human()}")
print(f" 利用率: {process.gpu_sm_utilization()}%")
性能数据收集
from nvitop import ResourceMetricCollector, time
# 创建收集器,监控间隔1秒
collector = ResourceMetricCollector(interval=1)
collector.start()
# 收集10秒数据
time.sleep(10)
metrics = collector.collect()
# 打印指标
print("收集到的GPU指标:")
for metric, value in metrics.items():
print(f"{metric}: {value}")
collector.stop()
告警功能
from nvitop import AlertManager
alert_manager = AlertManager()
# 设置告警阈值
alert_manager.add_threshold(
metric="memory.used",
operator=">",
threshold=90, # 90%
message="GPU内存使用率超过阈值"
)
# 检查告警
if alert_manager.check():
print("发现告警:")
for alert in alert_manager.get_alerts():
print(f"- {alert}")
高级应用示例
语音识别GPU监控仪表盘
import time
from nvitop import Device, colored
def monitor_speech_recognition_gpu(interval=2):
"""实时监控语音识别GPU资源使用情况"""
devices = Device.all()
if not devices:
print("未发现GPU设备")
return
print(colored("实时监控语音识别GPU资源使用情况 (按Ctrl+C停止)", attrs=['bold']))
print(f"刷新间隔: {interval}秒")
print("=" * 80)
try:
while True:
# 清除屏幕
print("\033c", end="")
for device in devices:
gpu_util = device.gpu_utilization()
mem_used = device.memory_used_human()
temp = device.temperature()
# 设置颜色
util_color = 'green' if gpu_util < 70 else 'yellow' if gpu_util < 90 else 'red'
print(f"GPU {device.index}: {device.name()}")
print(f" 利用率: {colored(f'{gpu_util}%', util_color)}")
print(f" 内存: {mem_used}")
print(f" 温度: {temp}°C")
# 查看语音识别相关进程
processes = device.processes()
speech_processes = []
for pid, process in processes.items():
if "speech" in process.command().lower():
speech_processes.append((pid, process))
if speech_processes:
print(" 语音识别进程:")
for pid, process in speech_processes:
mem = process.gpu_memory_human()
util = process.gpu_sm_utilization()
print(f" PID: {pid}, 内存: {mem}, 利用率: {util}%")
print("-" * 80)
time.sleep(interval)
except KeyboardInterrupt:
print("\n监控已停止")
# 运行监控
monitor_speech_recognition_gpu(interval=2)
与Prometheus集成(用于Grafana可视化)
# 启动nvitop-exporter
nvitop-exporter --web-listen-address 0.0.0.0:9400
在Prometheus配置文件中添加:
scrape_configs:
- job_name: 'nvitop'
static_configs:
- targets: ['localhost:9400']
然后在Grafana中导入nvitop仪表盘模板(ID: 1860)即可创建语音识别专用监控面板。
问题排查与优化
-
无法识别GPU:
nvidia-smi # 检查驱动是否正常 sudo nvitop # 尝试以管理员权限运行 -
GPU利用率低但服务慢:
# 检查是否存在IO瓶颈 from nvitop import host print(f"CPU使用率: {host.cpu_percent()}%") print(f"内存使用率: {host.memory_percent()}%") -
内存泄漏:
import psutil process = psutil.Process(os.getpid()) print(f"内存使用: {process.memory_info().rss / 1024**2:.2f}MB")
总结
nvitop为GPU加速的语音识别系统提供了全面的监控能力,通过实时监控、性能分析和智能告警,帮助优化资源利用、提升系统稳定性并加速问题诊断。结合Prometheus和Grafana构建的可视化仪表盘,能够直观展示语音识别系统的GPU资源使用情况,为数据驱动的优化决策提供支持。
通过本文介绍的方法,您可以轻松构建一个高效的语音识别系统监控方案,确保在处理大规模音频数据时,GPU资源得到最优利用,系统性能和稳定性达到最佳状态。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



