import numpy 和 torch 的顺序 会影响运行速度

项目场景:

复现 以下开源项目:

GitHub - facebookresearch/mae_st: Official Open Source code for "Masked Autoencoders As Spatiotemporal Learners"

对应原文:

https://arxiv.org/abs/2205.09113


问题描述

在其官方源码和其成员发布的早期源码运行本地finetune 的运行速度有差异,将近一倍,按理来说即使官方发布做了优化,但是其内源码通过手动排查差异并不大


原因分析:

通过最愚蠢的方式:将差异的脚本通过复制粘贴来取消差异

最后的排查原因:定位到 对库的import 顺序导致了最后的时间差异

即:

import numpy as np

import torch

import torch

import numpy as np

在 epoch 循环内导致的结果不同


总结:

并不是很确定本机的环境是否有很大的影响,

但是通过调整import 的顺序确实提升了近一倍的速度

但就本项目来说非常重要::::: torch 要 先于 numpy 导入 

如果有什么运行复现的问题也可评论哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这个错误是因为numpy数组没有cpu属性。可能是因为你在尝试使用PyTorch的cpu()方法,但是你的数据类型是numpy数组,而不是PyTorch的张量。你需要将numpy数组转换为PyTorch张量,然后才能使用cpu()方法。 ### 回答2: attributeerror: 'numpy.ndarray' object has no attribute 'cpu'是一个常见的Python错误,它通常出现在使用PyTorch框架进行深度学习研究时。这个错误信息的意思是,你试图将一个numpy的ndarray对象转换成PyTorch的tensor,并在这个tensor上调用一个名为“cpu”的方法。但是,这个方法在ndarray对象中是不存在的,因此,Python抛出一个AttributeError异常。 通常,这个错误发生在使用PyTorch的GPU版本时,因为PyTorch使用CUDA来加速tensor计算。CPU和GPU之间的计算操作是不同的,因此需要在PyTorch中显式地指定使用CPU或GPU。在这种情况下,你可以使用以下代码将ndarray转换为PyTorch的tensor并将其转移到CPU上执行: import torch # 将ndarray转换为tensor tensor = torch.from_numpy(ndarray) # 将tensor转移到CPU上执行 tensor = tensor.cpu() 另外,要避免这个错误,你需要确保你的代码既可以在CPU上运行也可以在GPU上运行。为了实现这个目标,你可以使用以下代码: import torch # 检查是否支持CUDA if torch.cuda.is_available(): # 如果支持CUDA则使用GPU device = torch.device('cuda') else: # 如果不支持CUDA则使用CPU device = torch.device('cpu') # 将ndarray转换为tensor并将其转移到设备上执行 tensor = torch.from_numpy(ndarray).to(device) 这样,你的代码就可以在GPU和CPU之间切换,而不出现“attributeerror: 'numpy.ndarray' object has no attribute 'cpu'”错误。 ### 回答3: 在使用numpy.ndarray对象进行深度学习计算时,可能遇到attributeerror: 'numpy.ndarray' object has no attribute 'cpu'这个错误。这个错误通常出现在使用PyTorch等深度学习框架时,因为PyTorch中的tensor对象有一个cpu方法,但是numpy.ndarray对象没有这个方法。 原因是,numpy.ndarray是Python中的一种多维数组类型,它并没有对应的GPU加速计算的实现,而PyTorch中的tensor对象则可以在GPU上加速计算。因此,当我们使用numpy.ndarray进行深度学习计算时,无法使用cpu()方法。 解决这个问题的方法是将numpy.ndarray对象转换为PyTorch的tensor对象,这样就可以使用cpu()方法了。具体实现可以使用如下代码: import torch # 将numpy.ndarray对象转换为PyTorch的tensor对象 tensor = torch.from_numpy(ndarray) # 使用cpu()方法 tensor.cpu() 另外,需要注意的是,在进行深度学习计算时,如果计算量非常大,建议使用GPU进行加速计算,这样可以大大提升计算速度。因此,我们可以在转换为PyTorch的tensor对象后,调用cuda()方法将tensor对象移动到GPU上进行计算,具体实现可以使用如下代码: # 将tensor对象移动到GPU上 tensor.cuda() 总之,attributeerror: 'numpy.ndarray' object has no attribute 'cpu'这个错误是因为numpy.ndarray对象没有cpu()方法,需要将其转换为PyTorch的tensor对象才能使用cpu()方法。同时,需要注意在进行深度学习计算时,可以使用GPU进行加速计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值