当从 `torch.class` 方法将`self` 返回到控制台时,为啥 Lua/Torch 会耗尽内存?
Posted
技术标签:
【中文标题】当从 `torch.class` 方法将`self` 返回到控制台时,为啥 Lua/Torch 会耗尽内存?【英文标题】:Why does Lua/Torch run out of memory when an `self` is returned to console from a `torch.class` method?当从 `torch.class` 方法将`self` 返回到控制台时,为什么 Lua/Torch 会耗尽内存? 【发布时间】:2016-10-11 03:37:13 【问题描述】:我已将torch-dataframe 修改为返回self
而不是void,以便为torch.class
实现简单的method chaining。不幸的是,这似乎对内存问题造成了严重破坏:
th> require 'Dataframe'; df = torch.load('dataset_4_torch.t7')
[4.8434s]
th> b = df:create_subsets() -- Works
[0.7384s]
th> df:create_subsets() -- Fails even if called before the b = df:create_...
/home/max/tools/torch/install/bin/luajit: not enough memory
我已尝试覆盖对所有返回的对象调用的默认打印,但没有帮助。
内存详细信息
这是一些内存分析:
th> collectgarbage("count")
1836.24609375
[0.0002s]
th> require 'Dataframe'; df = torch.load('dataset_4_torch.t7')
[4.6875s]
th> collectgarbage("count")
59659.619140625
[0.0003s]
th> b = df:create_subsets()
[0.7571s]
th> collectgarbage("count")
62303.567382812
[0.0001s]
th> df:create_subsets()
/home/max/tools/torch/install/bin/luajit: not enough memory
如果这个问题很难,那么我会很感激一个示例,说明如何正确地将method chaining 模式应用于torch.class。
【问题讨论】:
@EgorSkriptunoff - 抱歉,没用 我的猜测是它会尝试将您的庞大数据集格式化为字符串 - OOM 失败。 @VyacheslavEgorov - 该类有一个__tostring__
方法可以防止这种情况发生
好吧,也许它被绕过了。如果你做th> b
,你会得到OOM吗?在任何情况下,您都可以尝试将整个事情扔到 GDB 中,看看 OOM 是从哪里来的。
【参考方案1】:
感谢您帮助我。事实证明,我输入了一个断言,并且在错误消息中我在某个点添加了整个列的 tostring。这在我们的测试环境中有效,但在真实数据集中生成了大量字符串,因此存在内存问题。
【讨论】:
以上是关于当从 `torch.class` 方法将`self` 返回到控制台时,为啥 Lua/Torch 会耗尽内存?的主要内容,如果未能解决你的问题,请参考以下文章
当从共享prefs获取时,GSON将先前存储的List转换为LinkedTreeMaps的ArrayList
当从外部对象调用方法时,qt 的 gui 线程是不是会在后台生成线程?