【深度学习】记录为什么没有调用GPU

排查CLIP为什么评测推理没有调用GPU,主要是这个代码:https://github.com/OFA-Sys/Chinese-CLIP/blob/master/cn_clip/eval/extract_features.py

第一次认为:因为model并没有to.cuda()。

但是又发现,model.cuda(args.gpu) # 已经加载到GPU上了。

并且,pytorch中 model.cuda() 和mode.to(cuda) 没有区别。

第二次,还是在P40上启动一下,使用nvidia-smi看看GPU是否被使用了。

以下from GPT-4o,

在使用图像模型提取图片特征时,GPU利用率为0可能是由于多种原因导致的。以下是一些常见的原因和解决方法:

1. 确认使用了GPU

确保你的代码实际上是使用了GPU而不是CPU。以下是一些检查和设置GPU使用的步骤:

  • TensorFlow:

    python 复制代码
    import tensorflow as tf
    print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
  • PyTorch:

    python 复制代码
    import torch
    print("Is CUDA available: ", torch.cuda.is_available())

2. 确认GPU驱动和CUDA版本

确保你安装了正确版本的GPU驱动和CUDA工具包,并且它们与所使用的深度学习框架兼容。

  • 检查CUDA版本:

    bash 复制代码
    nvcc --version
  • 检查驱动版本:

    bash 复制代码
    nvidia-smi

3. 确认模型和数据在GPU上

确保你的模型和数据都被正确地加载到GPU上。

  • TensorFlow:

    python 复制代码
    with tf.device('/GPU:0'):
        # Your model and data operations
  • PyTorch:

    python 复制代码
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model.to(device)
    inputs = inputs.to(device)

4. 检查批处理大小

如果批处理大小(batch size)太小,GPU利用率可能会很低。尝试增加批处理大小以更好地利用GPU。

5. 确认数据加载器的效率

数据加载器可能成为瓶颈,导致GPU等待数据。确保数据加载器使用了多线程或多进程来加速数据加载。

  • TensorFlow:

    python 复制代码
    dataset = dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
  • PyTorch:

    python 复制代码
    data_loader = torch.utils.data.DataLoader(dataset, batch_size=32, num_workers=4, pin_memory=True)

6. 确认模型推理代码

确保你在进行特征提取时,模型推理代码没有问题,并且确实在GPU上运行。

7. 确认没有GPU内存不足

如果GPU内存不足,可能会导致程序回退到CPU。使用nvidia-smi查看GPU内存使用情况。

8. 确认GPU没有被其他进程占用

使用nvidia-smi查看当前GPU的使用情况,确保没有其他进程占用GPU资源。

9. 检查框架和库的版本

确保你使用的深度学习框架和相关库是最新版本,因为旧版本可能存在性能问题或不支持某些功能。

10. 检查代码逻辑

确保你的代码逻辑没有问题,特别是数据预处理和模型推理部分。

示例代码

以下是一个简单的示例代码,展示了如何在PyTorch中确保模型和数据在GPU上运行:

python 复制代码
import torch
import torchvision.models as models
from torchvision import transforms
from PIL import Image

# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 加载预训练模型并将其移动到GPU
model = models.resnet50(pretrained=True)
model = model.to(device)
model.eval()

# 加载并预处理图像
image = Image.open("path_to_image.jpg")
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
input_tensor = preprocess(image)
input_batch = input_tensor.unsqueeze(0)  # 创建一个批次

# 将输入数据移动到GPU
input_batch = input_batch.to(device)

# 确保模型在GPU上进行推理
with torch.no_grad():
    output = model(input_batch)

# 提取特征
features = output.cpu().numpy()
print(features)

通过上述步骤和检查,你应该能够找到GPU利用率为0的原因并解决问题。

相关推荐
Codebee4 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º4 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56784 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子4 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能5 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_160144875 小时前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile5 小时前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
人工不智能5775 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
盟接之桥5 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造