gpt4 book ai didi

image-processing - 将大图像时间发送到 GPU

转载 作者:行者123 更新时间:2023-12-03 16:04:27 24 4
gpt4 key购买 nike

我正在使用在 Lua 中使用 Torch 实现的 CNN 模型 (AlexNet) 进行图像处理。我正在修改 Torch starter code .

我的问题是,我正在制作 18 个 channel 而不是 3 个 channel 的图像来训练模型,并且将这些图像发送到 GPU,比使用三个 channel 发送图像需要大约 20(每批 2.13 秒)时间(每批 0.14 秒)。我还尝试查看将具有 4 个 channel 的图像发送到 GPU 需要多长时间。看到 channel 数一增加到3个以上,时间就增加了20倍左右。例如,即使对于 4 个 channel 的图像,每批次也需要大约 2 秒,这大约是运行 3 个 channel 图像的 19 倍。

我想知道是否有一个错误导致它花费这么多时间,如果没有任何错误,是否有任何方法可以减少此运行时间?

最佳答案

简答

这是一个不会消失的问题。这是 CPU 到 GPU 缓冲的带宽问题。您已经大大增加了必须通过总线发送的数据量。

可能的解决方法

您尝试做的事情的本质是在您的模型中包含以前的帧。如果这就是你想要完成的事情,还有另一种方法可以做到这一点。

如果训练批次不是随机选择的堆叠图像,而是训练批次是常规图像但在时间上都是连续的。

在第二种情况下,您将只发送 3 个 channel 的图像,但图像不会乱序。

让我们探索一下假设。

首先,您仍然可以通过更改每个批次的开始时间和结束时间并随机选择要选择的视频来创建随机采样。

其次,您可以使用 [batch,height,weight,channel] 张量在 GPU 上生成一个新的张量,即

[ batch[1:], height, width, channel] - [ batch[:-1], height, width, channel]
and assign it to diffTensor

然后连接以下张量
origTensor [ batch[5:-0], height, width, channel] 
diffTensor [ batch[5:-0], height, width, channel]
diffTensor [ batch[4:-1], height, width, channel]
diffTensor [ batch[3:-2], height, width, channel]
diffTensor [ batch[2:-3], height, width, channel]
diffTensor [ batch[1:-4], height, width, channel]
diffTensor [ batch[0:-5], height, width, channel]

如果你想要 5 个“回头看”

这将实现什么?好吧,如果您向 GPU 发送 100 张图像,那么该网络将能够以仅发送 100 张图像的网络价格生成 95 张图像+差异图像,而好像您尝试发送具有 5 层的 95 张图像+差异图像每个你都必须支付发送 500 张图像的网络价格。基本上,您几乎可以将网络成本降低 x5

关于image-processing - 将大图像时间发送到 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44572163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com