GPU监测时问题解决

GPU监测时问题解决

不管在我们使用服务器还是使用自己的桌面版本的时候,跑程序时一方面,有时候我们会监测一下电脑的资源使用情况,但是监测的时候我们可以能会遇到一些问题。

对于CPU资源的使用,我们可以使用top或者使用更高级的htop指令进行监测,这个里面包含了很多的信息。
对于GPU资源的使用,我们一般使用nvidia-smi来进行一个监测,因为该指令是一个静态的,所以如果我们想动态的监测GPU的使用情况,我们可以配合watch指令进行使用,watch -n 1 nvidia-smi.

以上是我们使用一些基本方法,但是我在监测GPU的时候,可能会遇到以下两个问题:

1、GPU明明没有在用,但是显示的时候却显示GPU的利用率却很高,但是再看功率的时候又可以肯定GPU并没有在使用;

2、当一个用户用GPU跑完程序后,关掉了程序,但是GPU依旧显示该程序占用内存。

解决方法

针对以上的两个问题,本人的解决方法如下

GPU监测时显示不准确

对于GPU监测显示不准确时的指令如下:

sudo nvidia-smi -pm 1

GPU内存没有清零

对于程序结束了,但是GPU内存没有被清零的情况,解决方案如下:

使用nvidia-smi指令进行查找没有释放内存的程序的PID;
然后使用如下指令进行释放:

sudo kill -9 PID

参考资料

https://serverfault.com/questions/809038/why-is-my-cuda-gpu-util-70-when-there-are-no-running-processes-found

http://blog.youkuaiyun.com/lgh0824/article/details/77096241

### 如何在程序中监控 GPU 使用情况 #### 工具介绍 gmonitor 是一款专为 NVIDIA GPU 设计的实监控工具,适用于 CUDA 编程开发者和 GPU 性能调试人员,在 GNU/Linux 系统上具有简洁实用的功能和灵活的配置选项[^1]。此外,还可以通过其他方法实现更细粒度的 GPU 监控。 #### 实现方式 以下是几种常见的 GPU 监控方法: 1. **使用 `nvidia-smi`** - `nvidia-smi` 是 NVIDIA 提供的一个命令行工具,用于动态查看 GPU 的使用情况。可以通过定期调用该命令来获取 GPU 的利用率、温度和其他指标。 ```bash watch -n 0.5 nvidia-smi ``` 这一命令可以每隔 0.5 秒刷新一次 GPU 的状态信息[^4]。 2. **集成到 Python 程序中** - 在 Python 中可以直接调用 `subprocess` 模块执行 `nvidia-smi` 并解析返回的结果。 ```python import subprocess def get_gpu_usage(): result = subprocess.run(['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total', '--format=csv'], stdout=subprocess.PIPE, text=True) lines = result.stdout.strip().split('\n') headers = lines[0].split(',') data = [] for line in lines[1:]: values = line.split(',') entry = {headers[i]: values[i] for i in range(len(headers))} data.append(entry) return data usage_data = get_gpu_usage() print(usage_data) ``` 3. **PyTorch 和 TensorFlow 的内置支持** - 如果你在使用 PyTorch 或 TensorFlow 开发深度学习模型,则可以利用这些框架中的模块来监控 GPU 显存和利用率。 - 对于 PyTorch: ```python import torch if torch.cuda.is_available(): device = torch.device('cuda') memory_allocated = torch.cuda.memory_allocated(device) / (1024 * 1024) # 转换为 MB max_memory_reserved = torch.cuda.max_memory_reserved(device) / (1024 * 1024) # 转换为 MB print(f'Memory Allocated: {memory_allocated} MB') print(f'Max Memory Reserved: {max_memory_reserved} MB') ``` - 对于 TensorFlow: ```python from tensorflow.python.client import device_lib local_device_protos = device_lib.list_local_devices() gpus = [x for x in local_device_protos if x.device_type == 'GPU'] for gpu in gpus: print(gpu.physical_device_desc) ``` 4. **第三方库 pynvml** - NVML(NVIDIA Management Library)提供了更高层次的 API 来访问 GPU 数据。Python 库 `pynvml` 可以方便地与之交互。 ```python import pynvml pynvml.nvmlInit() handle = pynvml.nvmlDeviceGetHandleByIndex(0) # 获取第一个 GPU 的句柄 utilization = pynvml.nvmlDeviceGetUtilizationRates(handle) mem_info = pynvml.nvmlDeviceGetMemoryInfo(handle) print(f'GPU Utilization: {utilization.gpu}%') print(f'Memory Usage: {mem_info.used / (1024**2)} MB out of {mem_info.total / (1024**2)} MB') pynvml.nvmlShutdown() ``` 5. **远程监控解决方案** - 针对需要远程监控的情况,可以借助一些专门的小工具完成任务。例如,某些场景下可能需要从 Windows 主机连接 Linux 上的 GPU 状态,此可采用定制化的脚本或图形界面工具[^5]。 #### 注意事项 - 同操作系统下的具体操作可能会有所差异,需根据实际环境调整方案。 - 若涉及大规模集群管理,建议考虑专业的分布式监控平台如 Prometheus 结合 Grafana 展示 GPU 数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值