为什么Torch在使用1.5mb网络进行预测时会占用大约700mb的GPU内存
2019-4-13 14:19:13
收藏:0
阅读:107
评论:1
我对Torch/CUDA非常新,我正在尝试测试来自https://github.com/1adrianb/binary-face-alignment的小型二进制网络(~1.5mb),但我一直遇到'out of memory'问题。
我正在使用一个相对较弱的GPU (NVIDIA Quadro K600),具有16.04 Ubuntu和CUDA 10.0和CudNN版本5.1的约900MB图形内存,因此我并不真的关心性能,但我认为我至少应该能够运行小型的预测网络,每次一张图片(特别是那些“资源有限”的人所针对的)。
我设法在无界面模式下运行代码,并检查内存消耗约为700MB,这可以解释为什么它在我运行X-server(消耗约250MB的GPU内存)时立即失败。
我还添加了一些日志,以查看我有多远进入了_main.lua_,并且正是在第一张图片上调用了output:copy(model:forward(img))时耗尽了内存。
供参考,以下是运行崩溃之前的main.lua代码:
require 'torch'
require 'nn'
require 'cudnn'
require 'paths'
require 'bnn'
require 'optim'
require 'gnuplot'
require 'image'
require 'xlua'
local utils = require 'utils'
local opts = require('opts')(arg)
print("启动堆跟踪")
torch.setheaptracking(true)
torch.setdefaulttensortype('torch.FloatTensor')
torch.setnumthreads(1)
-- torch.
local model
if opts.dataset == 'AFLWPIFA' then
print('目前不可用。支持很快就会添加')
os.exit()
model = torch.load('models/facealignment_binary_pifa.t7')
else
print("正在加载模型")
model = torch.load('models/facealignment_binary_aflw.t7')
end
model:evaluate()
local fileLists = utils.getFileList(opts)
local predictions = {}
local noPoints = 68
if opts.dataset == 'AFLWPIFA' then noPoints = 34; end
local output = torch.CudaTensor(1,noPoints,64,64)
for i = 1, #fileLists do
local img = image.load(fileLists[i].image)
local originalSize = img:size()
img = utils.crop(img, fileLists[i].center, fileLists[i].scale, 256)
img = img:cuda():view(1,3,256,256)
output:copy(model:forward(img))
因此,我有两个主要问题:
1.有什么工具可以调试torch的内存使用? 2.这种内存膨胀的可能原因是什么?
它一定不只是网络和加载到GPU的图像。我最好的猜测是它与LoadFileLists函数有关,但我根本不了解Torch或Lua的更多知识,无法进一步发现。其他答案表明真的没有支持显示一个变量占用多少内存。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

通常最占用内存的是激活图(和梯度,当训练时)。我不熟悉这个特定的模型和实现,但我想你使用的是“伪”二进制网络;所谓“伪”,指的是它们仍然使用浮点数来表示二进制值,因为大多数用户将在不完全支持真正的二进制操作的GPU上使用它们的代码。作者甚至在第5节中写道:
在这种情况下,小模型(相对于参数数量或模型大小的大小)不一定意味着内存占用小。很可能所有这些内存都用于以单精度或双精度存储激活图。