当前位置:   article > 正文

基于Pytorch使用GPU运行模型方法及可能出现的问题解决方法_在pycharm中用gpu跑模型

在pycharm中用gpu跑模型

基于Pytorch使用GPU运行模型方法及注意事项

一、在基于pytorch深度学习进行模型训练和预测的时候,往往数据集比较大,而且模型也可能比较复杂,但如果直接训练调用CPU运行的话,计算运行速度很慢,因此使用GPU进行模型训练和预测是非常有必要的,可以大大提高实验效率。如果还没有配置好运行环境的博友们可以参考下面博主的文章。

1、点击打开《基于Windows中学习Deep Learning之搭建Anaconda+Cudnn+Cuda+Pytorch+Pycharm工具和配置环境完整最简版》文章
2、点击打开《基于Pytorch查看本地或者远程服务器GPU及使用方法》文章

二、具体方法分为两个大部分(模型和数据集)。

  • 首先将模型model移动到cuda设备也就是GPU上,注意:此大模型可以内含多个子模型,子模型无需再重复移动到GPU上
model = Net() # 举例模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
model.to(device) # 移动举例模型到cuda
  • 1
  • 2
  • 3

或者

model = Net() # 举例模型
device = torch.cuda.current_device() if args.cuda else torch.device('cpu')
model.to(device) # 移动举例模型到cuda
  • 1
  • 2
  • 3
  • 将数据集(包含训练集和测试集及所包含的标签数据集)移动到cuda设备也就是GPU上,使用数据集.cuda()形式完成。
drug_embeddings = drug_embeddings.cuda()
protein_embeddings = protein_embeddings.cuda()
effectives = effectives.cuda()
  • 1
  • 2
  • 3

或者

drug_embeddings = drug_embeddings.to(device)
protein_embeddings = protein_embeddings.to(device)
effectives = effectives.to(device)
  • 1
  • 2
  • 3

三、问题及方法

  • 问题 1:torch.FloatTensor和torch.cuda.FloatTensor的差异
    在这里插入图片描述
Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same or input should be a MKLDNN tensor and weight is a dense tensor
  • 1

问题中文翻译成

输入类型(torch.FloatTensor)和权重类型(torch.cuda.FloatTensor)应该相同,或者输入应该是MKLDNN张量,权重是密集张量
  • 1
  • 问题 2:数据运算过程中需交互的情况下不在同一个设备上
    在这里插入图片描述
Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!
  • 1

问题中文翻译成

预期所有张量都在同一设备上,但至少找到了两个设备,cuda:0 和 cpu !
  • 1
  • 问题1和问题2解决方法(相同):首先根据错误的提示找到代码中是哪行数据出现的问题,然后针对性的解决,以数据XR出问题举例,分两种情况:第一种情况是如果此数据XR通过torch.FloatTensor(数据XR)构造,那么改成torch.cuda.FloatTensor(数据XR)即可;第二种情况是并非构造数据XR,而是将数据XR传输到另一个子模型中,那么直接在数据XR的后面加上cuda即可,也就是“数据XR.cuda()”即可。
    在这里插入图片描述
    在这里插入图片描述

  • 问题 3:代码运行过程中CUDA运输内存不够分配
    在这里插入图片描述

CUDA out of memory. Tried to allocate 490.00 MiB (GPU 0; 2.00 GiB total capacity; 954.66 MiB already allocated; 62.10 MiB free; 978.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
  • 1

问题中文翻译成

CUDA内存不足。尝试分配490.00 MiB(GPU 02.00 GiB总容量;954.66 MiB已分配;62.10 MiB可用;PyTorch总共保留978.00 MiB)如果保留内存>>已分配内存,请尝试设置max_split_size_mb以避免碎片。请参阅内存管理和PYTORCH_CUDA_ALLOC_CONF的文档
  • 1
  • 问题3解决方法:运算内存不够的情况下有两种解决方法,第一种方法一般缩小数据集批次大小,也就是batch_size缩小,比如:可以将原来batch_size=256那么缩小成batch_size=16;第二种就是去服务器上跑代码,也就是更换更好的GPU去运行,如果还是出现同样的问题,那么此两种方法结合使用最好。
    在这里插入图片描述
  • 后续出现新的问题会继续更新,敬请期待!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/371040
推荐阅读
相关标签
  

闽ICP备14008679号