• 【深度学习】记录为什么没有调用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:

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

      import torch
      print("Is CUDA available: ", torch.cuda.is_available())
      

    2. 确认GPU驱动和CUDA版本

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

    • 检查CUDA版本:

      nvcc --version
      
    • 检查驱动版本:

      nvidia-smi
      

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

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

    • TensorFlow:

      with tf.device('/GPU:0'):
          # Your model and data operations
      
    • PyTorch:

      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:

      dataset = dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
      
    • PyTorch:

      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上运行:

    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的原因并解决问题。

  • 相关阅读:
    Excel文件损坏打不开怎么办?可用这三招解决!
    阿里云OSS存储前端API上传(签名上传)
    STM8应用笔记5.8位定时器应用之一
    直播相关——声网rtc SDK
    Redis的神奇之处:为什么它如此快速?【redis第三部分】
    python定时器
    vue:如何实现通过判断数组中每个对象的其中一个属性,从而更改另一个属性的值
    四足机器人软件架构现状分析
    ubuntu install Python3
    加密与安全_探索签名算法
  • 原文地址:https://blog.csdn.net/weixin_31866177/article/details/139855777