问题:

跑深度学习代码,使用GPU,但是跑的过程中GPU和CPU的利用率都低于10%(出现问问题的前一次跑相同代码,GPU利用率很高)

 

---------------------

分界线2025.3.26

我先提取的特征再用gpu跑就很快。

 

问题排查:

1、数据加载太慢

DataLoader的num_workers参数为8,不存在这个问题

batch_size = 256

2、GPU 驱动或 CUDA 配置问题

  • 检查 nvidia-smi 是否能看到进程;  能看到进程

  • 检查 torch.cuda.is_available() 是否为 True;  为True

  • CUDA、cuDNN、PyTorch 版本是否匹配; 版本匹配

  • 代码没有正确使用GPU; 代码检查过了,正确使用了GPU

3、查看CUDA是否可用

import torch
print(torch.cuda.is_available())   # True 表示 CUDA 可用
print(torch.cuda.device_count())   # 查看可用 GPU 数量
print(torch.cuda.get_device_name(0))  # 查看第一个 GPU 名称

4、测试GPU简单运算性能

import torch
import time

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 创建一个大张量
x = torch.randn(10000, 10000, device=device)
y = torch.randn(10000, 10000, device=device)

# 计算并计时
start_time = time.time()
z = x @ y
torch.cuda.synchronize()  # 等待 GPU 计算完成
end_time = time.time()

print(f"矩阵乘法耗时: {end_time - start_time:.4f} 秒")
print(f"结果张量设备: {z.device}")

我的运行结果,CPU时间明显大于GPU

5、对GPU进行压力测试

这段代码会在 GPU 上做一个非常大的矩阵乘法,正常情况下一定会出现高 GPU 占用(在 nvidia-smi 可以看到 >90% 的利用率)。

import torch
import time

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Running on {torch.cuda.get_device_name(0)}")

# 创建超大矩阵
size = 30000
x = torch.randn(size, size, device=device)
y = torch.randn(size, size, device=device)

start = time.time()
z = x @ y
torch.cuda.synchronize()
end = time.time()

print(f"大矩阵乘法耗时: {end - start:.2f} 秒")

压力测试结果:gpu没有用起来,利用率没有超过10%,大矩阵乘法耗时 7.21秒

现象总结:

  • 大矩阵乘法耗时 7.2 秒(正常情况下应该是 1~2 秒以内)

  • nvidia-smi 监控到 GPU 利用率始终低于 10%

  • 已确认 PyTorch 是 2.6.0+cu126,CUDA 和驱动正常

  • 说明 代码已经在 GPU 上运行,但 GPU 没有真的全力计算

6、查看硬件节能模式(P-State)

命令行输入:nvidia-smi

看输出里面 P-State 是不是一直是 P8P5

nvidia-smi
  • P0 表示性能全开

  • P2 / P5 表示部分性能

  • P8 表示低功耗模式

我的结果:

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐