python - 为什么 pytorch 需要比它应该的更多的内存?
问题描述
我只是在玩 pytorch,我想知道为什么它会消耗我 GPU 的这么多内存?
我将 Cuda 10.0 与 pythorch 1.2.0 和 torchvision 0.4.0 一起使用。
import torch
gpu = torch.device("cuda")
x = torch.ones(int(4e8), device=gpu)
y = torch.ones(int(1e5), device=gpu)
运行上面的代码我得到错误: RuntimeError: CUDA out of memory。尝试分配 2.00 MiB(GPU 0;2.00 GiB 总容量;1.49 GiB 已分配;0 字节空闲;0 字节缓存)
那么,pytorch 是否需要约 500MB 的 gpu 内存作为开销?或者这里有什么问题?
解决方案
在给定的链接xymeng
中可以看到在 github 中完成的更多信息和测试
参考xymeng
的话:
PyTorch 有自己的 cuda 内核。根据我的测量,cuda 运行时为它们分配了约 1GB 的内存。如果您在启用 cudnn 的情况下编译 pytorch,则总内存使用量为 1GB + 750M + 其他 = 2GB+ 请注意,这只是我的推测,因为没有关于此的官方文档。令我困惑的是,cuda 运行时分配的内存比实际代码大小多得多(它们大约是线性相关的。如果我删除一半的 pytorch 内核,内存使用量也会减少一半)。我怀疑内核二进制文件已被压缩,或者它们必须由运行时进行后处理。
好像很适合你的情况。
推荐阅读
- java - net.sf.jasperreports.engine.JRException:执行 SQL 语句时出错:null
- android - startAfter 无法在 Firestore android 中工作
- java - 如何使用迭代器比较 LinkedList 中的数字
- javascript - 处理从 props 传递的排序数据的最佳方法是什么?
- multithreading - .NET CF WinCE 上的 EventArgs 线程是否安全
- android-studio - 无法创建以下文件,因为它已经存在。安卓工作室
- javascript - 带有 MariaDB 的 NodeJS,无法读取未定义的属性“threadId”
- gensim - 在 gensim 中使用向量进行相似性度量
- c++ - 一行中有多个“使用命名空间”?
- javascript - 无法访问 Dialogflow 实现参数