文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

将PyTorch投入生产的常见错误有哪些

2024-04-02 19:55

关注

这篇文章主要讲解了“将PyTorch投入生产的常见错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“将PyTorch投入生产的常见错误有哪些”吧!

错误 #1 — 在推理模式下保存动态图

如果你以前使用过TensorFlow,那么你可能知道TensorFlow和PyTorch之间的关键区别 —— 静态图和动态图。调试TensorFlow非常困难,因为每次模型更改时都要重新构建graph。这需要时间、努力和你的希望。当然,TensorFlow现在更好了。

总的来说,为了使调试更容易,ML框架使用动态图,这些图与PyTorch中所谓的Variables有关。你使用的每个变量都链接到前一个变量,以构建反向传播的关系。

下面是它在实际中的样子:

将PyTorch投入生产的常见错误有哪些

在大多数情况下,你希望在模型训练完成后优化所有的计算。如果你看一下torch的接口,有很多可选项,特别是在优化方面。eval模式、detach和no_grad的方法造成了很多混乱。让我来解释一下它们是如何工作的。在模型被训练和部署之后,以下是你所关心的事情:速度、速度和CUDA内存溢出异常。

为了加速PyTorch模型,你需要将它切换到eval模式。它通知所有层在推理模式下使用batchnorm和dropout层(简单地说就是不使用dropout)。现在,有一个detach方法可以将变量从它的计算图中分离出来。当你从头开始构建模型时,它很有用,但当你想重用SOTA的模型时,它就不太有用了。一个更全局性的解决方案将是在前向传播的时候在上下文中使用torch.no_grad。这样可以不用在在结果中存储图中变量的梯度,从而减少内存消耗。它节省内存,简化计算,因此,你得到更多的速度和更少的内存使用。

错误 #2 — 没有使能cudnn优化算法

你可以在nn.Module中设置很多布尔标志,有一个是你必须知道的。使用cudnn.benchmark = True来对cudnn进行优化。通过设置cudnn.enabled = True,可以确保cudnn确实在寻找最优算法。NVIDIA在优化方面为你提供了很多神奇的功能,你可以从中受益。

请注意你的数据必须在GPU上,模型输入大小不应该改变。数据的形状的变化越多,可以做的优化就越少。例如,要对数据进行归一化,可以对图像进行预处理。总之,可以有变化,但不要太多。

错误 #3 — 重用 JIT-compilation

PyTorch提供了一种简单的方法来优化和重用来自不同语言的模型(见Python-To-Cpp)。如果你足够勇敢,你可能会更有创造力,并将你的模型嵌入到其他语言中。

JIT-compilation允许在输入形状不变的情况下优化计算图。它的意思是,如果你的数据形状变化不大(参见错误#2),JIT是一种选择。老实说,和上面提到的no_grad和cudnn相比,它并没有太大的区别,但可能有。这只是第一个版本,有巨大的潜力。

请注意,如果你的模型中有conditions,这在RNNs中很常见,它就没法用了。

错误 #4 — 尝试扩展使用CPU

GPU很贵,云虚拟机也一样很贵。即使使用AWS,一个实例也将花费你大约100美元/天(最低价格是0.7美元/小时)。也许有人会想“如果我用5个CPU来代替1个GPU可以吗?”。所有试过的人都知道这是一个死胡同。是的,你可以为CPU优化一个模型,但是最终它还是会比GPU慢。相信我,我强烈建议忘记这个想法。

错误 #5 — 处理向量而不是矩阵

一切都准备好了,还能做什么?

现在是时候使用一点数学了。如果你还记得大部分NN是如何用所谓的张量训练的。张量在数学上是一个n维数组或多线性几何向量。你能做的就是把输入(如果你有足够的时间的话)分组成张量或者矩阵,然后把它输入到你的模型中。例如,使用图像数组作为发送到PyTorch的矩阵。性能增益等于同时传递的对象数量。

这是一个显而易见的解决方案,但是很少有人真正使用它,因为大多数时候对象都是一个一个地处理的,而且在流程上设置这样的流可能有点困难。别担心,你会成功的!

感谢各位的阅读,以上就是“将PyTorch投入生产的常见错误有哪些”的内容了,经过本文的学习后,相信大家对将PyTorch投入生产的常见错误有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯