基于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去运行,如果还是出现同样的问题,那么此两种方法结合使用最好。
  • 后续出现新的问题会继续更新,敬请期待!


相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
1138 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
8月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
741 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
7月前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。
621 6
|
9月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.0性能优化实战:4种常见代码错误严重拖慢模型
我们将深入探讨图中断(graph breaks)和多图问题对性能的负面影响,并分析PyTorch模型开发中应当避免的常见错误模式。
519 9
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
2280 0
|
机器学习/深度学习 并行计算 PyTorch
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
本文记录了在RTX 5070 Ti上运行PyTorch时遇到的CUDA兼容性问题,分析其根源为预编译二进制文件不支持sm_120架构,并提出解决方案:使用PyTorch Nightly版本、更新CUDA工具包至12.8。通过清理环境并安装支持新架构的组件,成功解决兼容性问题。文章总结了深度学习环境中硬件与框架兼容性的关键策略,强调Nightly构建版本和环境一致性的重要性,为开发者提供参考。
8652 64
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
|
11月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
485 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
本文将深入探讨L1、L2和ElasticNet正则化技术,重点关注其在PyTorch框架中的具体实现。关于这些技术的理论基础,建议读者参考相关理论文献以获得更深入的理解。
360 4
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现

热门文章

最新文章

推荐镜像

更多