基于Pytorch使用GPU运行模型方法及可能出现的问题解决方法

简介: 基于Pytorch使用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

或者

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

或者

drug_embeddings = drug_embeddings.to(device)
protein_embeddings = protein_embeddings.to(device)
effectives = effectives.to(device)

三、问题及方法

  • 问题 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

问题中文翻译成

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

问题中文翻译成

预期所有张量都在同一设备上,但至少找到了两个设备,cuda:0 和 cpu !
  • 问题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

问题中文翻译成

CUDA内存不足。尝试分配490.00 MiB(GPU 0;2.00 GiB总容量;954.66 MiB已分配;62.10 MiB可用;PyTorch总共保留978.00 MiB)如果保留内存>>已分配内存,请尝试设置max_split_size_mb以避免碎片。请参阅内存管理和PYTORCH_CUDA_ALLOC_CONF的文档
  • 问题3解决方法:运算内存不够的情况下有两种解决方法,第一种方法一般缩小数据集批次大小,也就是batch_size缩小,比如:可以将原来batch_size=256那么缩小成batch_size=16;第二种就是去服务器上跑代码,也就是更换更好的GPU去运行,如果还是出现同样的问题,那么此两种方法结合使用最好。
  • 后续出现新的问题会继续更新,敬请期待!


相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
6天前
|
机器学习/深度学习 自然语言处理 PyTorch
【PyTorch实战演练】基于AlexNet的预训练模型介绍
【PyTorch实战演练】基于AlexNet的预训练模型介绍
101 0
|
6天前
|
人工智能 并行计算 PyTorch
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
61 0
|
6天前
|
机器学习/深度学习 关系型数据库 MySQL
大模型中常用的注意力机制GQA详解以及Pytorch代码实现
GQA是一种结合MQA和MHA优点的注意力机制,旨在保持MQA的速度并提供MHA的精度。它将查询头分成组,每组共享键和值。通过Pytorch和einops库,可以简洁实现这一概念。GQA在保持高效性的同时接近MHA的性能,是高负载系统优化的有力工具。相关论文和非官方Pytorch实现可进一步探究。
143 4
|
6天前
|
机器学习/深度学习 人工智能 算法
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
23 0
|
6天前
|
PyTorch 算法框架/工具 异构计算
pytorch 模型保存与加载
pytorch 模型保存与加载
8 0
|
6天前
|
PyTorch 算法框架/工具 Python
【pytorch框架】对模型知识的基本了解
【pytorch框架】对模型知识的基本了解
|
6天前
|
机器学习/深度学习 算法 PyTorch
PyTorch模型优化与调优:正则化、批归一化等技巧
【4月更文挑战第18天】本文探讨了PyTorch中提升模型性能的优化技巧,包括正则化(L1/L2正则化、Dropout)、批归一化、学习率调整策略和模型架构优化。正则化防止过拟合,Dropout提高泛化能力;批归一化加速训练并提升性能;学习率调整策略动态优化训练效果;模型架构优化涉及网络结构和参数的调整。这些方法有助于实现更高效的深度学习模型。
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch与迁移学习:利用预训练模型提升性能
【4月更文挑战第18天】PyTorch支持迁移学习,助力提升深度学习性能。预训练模型(如ResNet、VGG)在大规模数据集(如ImageNet)训练后,可在新任务中加速训练,提高准确率。通过选择模型、加载预训练权重、修改结构和微调,可适应不同任务需求。迁移学习节省资源,但也需考虑源任务与目标任务的相似度及超参数选择。实践案例显示,预训练模型能有效提升小数据集上的图像分类任务性能。未来,迁移学习将继续在深度学习领域发挥重要作用。
|
6天前
|
机器学习/深度学习 PyTorch 调度
PyTorch进阶:模型保存与加载,以及断点续训技巧
【4月更文挑战第17天】本文介绍了PyTorch中模型的保存与加载,以及断点续训技巧。使用`torch.save`和`torch.load`可保存和加载模型权重和状态字典。保存模型时,可选择仅保存轻量级的状态字典或整个模型对象。加载时,需确保模型结构与保存时一致。断点续训需保存训练状态,包括epoch、batch index、optimizer和scheduler状态。中断后,加载这些状态以恢复训练,节省时间和资源。
|
6天前
|
机器学习/深度学习 数据采集 PyTorch
构建你的第一个PyTorch神经网络模型
【4月更文挑战第17天】本文介绍了如何使用PyTorch构建和训练第一个神经网络模型。首先,准备数据集,如MNIST。接着,自定义神经网络模型`SimpleNet`,包含两个全连接层和ReLU激活函数。然后,定义交叉熵损失函数和SGD优化器。训练模型涉及多次迭代,计算损失、反向传播和参数更新。最后,测试模型性能,计算测试集上的准确率。这是一个基础的深度学习入门示例,为进一步探索复杂项目打下基础。