gpt4 book ai didi

neural-network - caffe内存不足,用在哪里?

转载 作者:行者123 更新时间:2023-12-03 17:30:36 24 4
gpt4 key购买 nike

我正在尝试在 Caffe 中训练一个网络,这是一个稍微修改过的 SegNet-basic 模型。

我知道我收到的 Check failed: error == cudaSuccess (2 vs. 0) out of memory 错误是由于我的 GPU 内存不足。然而,令我困惑的是:

我的“旧”训练尝试效果很好。网络初始化并运行,如下:

  • 批量大小 4
  • Memory required for data: 1800929300(这是在batch size中计算的,所以这里的样本大小是4x)
  • 参数总数:1418176
  • 网络由 4x(卷积、ReLU、池化)和 4x(上采样、反卷积)组成;具有 64 个过滤器,每层内核大小为 7x7

  • 令我惊讶的是,我的"new"网络内存不足,我不明白是什么保留了额外的内存,因为我降低了批量大小:
  • 批量大小 1
  • Memory required for data: 1175184180(=样本大小)
  • 参数总数:1618944
  • 输入大小沿每个维度加倍(预期输出大小不变),因此参数数量增加的原因是网络开始时增加了一组(卷积、ReLU、池化)。

  • 参数个数按 this script 计算,通过对分层参数求和,乘以每层的维数得到。

    假设每个参数需要 4 个字节的内存,与新的 data_memory+num_param*4 相比,我的旧设置 memory_old = 1806602004 = 1.68GB 仍然给 memory_new = 1181659956 = 1.10GB 更高的内存要求。

    我已经接受可能在某处需要额外的内存,如果我找不到具有更多内存的 GPU,我将不得不重新考虑我的新设置并降低我的输入采样,但是我真的很想了解 需要额外内存的地方以及为什么我的新设置内存不足。

    编辑: 每个请求,这里是每个网络的层维度以及通过它的数据的大小:

    “老”网:
                                Top shape: 4 4 384 512 (3145728)
    ('conv1', (64, 4, 7, 7)) --> 4 64 384 512 (50331648)
    ('conv1_bn', (1, 64, 1, 1)) --> 4 64 384 512 (50331648)
    ('conv2', (64, 64, 7, 7)) --> 4 64 192 256 (12582912)
    ('conv2_bn', (1, 64, 1, 1)) --> 4 64 192 256 (12582912)
    ('conv3', (64, 64, 7, 7)) --> 4 64 96 128 (3145728)
    ('conv3_bn', (1, 64, 1, 1)) --> 4 64 96 128 (3145728)
    ('conv4', (64, 64, 7, 7)) --> 4 64 48 64 (786432)
    ('conv4_bn', (1, 64, 1, 1)) --> 4 64 48 64 (786432)
    ('conv_decode4', (64, 64, 7, 7)) --> 4 64 48 64 (786432)
    ('conv_decode4_bn', (1, 64, 1, 1)) --> 4 64 48 64 (786432)
    ('conv_decode3', (64, 64, 7, 7)) --> 4 64 96 128 (3145728)
    ('conv_decode3_bn', (1, 64, 1, 1)) --> 4 64 96 128 (3145728)
    ('conv_decode2', (64, 64, 7, 7)) --> 4 64 192 256 (12582912)
    ('conv_decode2_bn', (1, 64, 1, 1)) --> 4 64 192 256 (12582912)
    ('conv_decode1', (64, 64, 7, 7)) --> 4 64 384 512 (50331648)
    ('conv_decode1_bn', (1, 64, 1, 1)) --> 4 64 384 512 (50331648)
    ('conv_classifier', (3, 64, 1, 1))

    对于"new"网络,前几层不同,其余层完全相同,只是批量大小为 1 而不是 4:
                                Top shape: 1 4 769 1025 (3152900)
    ('conv0', (64, 4, 7, 7)) --> 1 4 769 1025 (3152900)
    ('conv0_bn', (1, 64, 1, 1)) --> 1 64 769 1025 (50446400)
    ('conv1', (64, 4, 7, 7)) --> 1 64 384 512 (12582912)
    ('conv1_bn', (1, 64, 1, 1)) --> 1 64 384 512 (12582912)
    ('conv2', (64, 64, 7, 7)) --> 1 64 192 256 (3145728)
    ('conv2_bn', (1, 64, 1, 1)) --> 1 64 192 256 (3145728)
    ('conv3', (64, 64, 7, 7)) --> 1 64 96 128 (786432)
    ('conv3_bn', (1, 64, 1, 1)) --> 1 64 96 128 (786432)
    ('conv4', (64, 64, 7, 7)) --> 1 64 48 64 (196608)
    ('conv4_bn', (1, 64, 1, 1)) --> 1 64 48 64 (196608)
    ('conv_decode4', (64, 64, 7, 7)) --> 1 64 48 64 (196608)
    ('conv_decode4_bn', (1, 64, 1, 1)) --> 1 64 48 64 (196608)
    ('conv_decode3', (64, 64, 7, 7)) --> 1 64 96 128 (786432)
    ('conv_decode3_bn', (1, 64, 1, 1)) --> 1 64 96 128 (786432)
    ('conv_decode2', (64, 64, 7, 7)) --> 1 64 192 256 (3145728)
    ('conv_decode2_bn', (1, 64, 1, 1)) --> 1 64 192 256 (3145728)
    ('conv_decode1', (64, 64, 7, 7)) --> 1 64 384 512 (12582912)
    ('conv_decode1_bn', (1, 64, 1, 1)) --> 1 64 384 512 (12582912)
    ('conv_classifier', (3, 64, 1, 1))

    这会跳过池化和上采样层。这是"new"网络的 train.prototxt 。旧网络没有 conv0conv0_bnpool0 层,而其他层是相同的。 “旧”网络也将 batch_size 设置为 4 而不是 1

    EDIT2: 每个请求,甚至更多信息:
  • 所有输入数据都具有相同的维度。它是 4 个 channel 的堆栈,每个 channel 的大小为 769x1025 ,因此始终为 4x769x1025 输入。
  • caffe 训练日志是 here :如您所见,在网络初始化后我得到 out of memory。没有一次迭代运行。
  • 我的 GPU 有 8GB 的​​内存,而我刚刚发现(在不同的机器上尝试)这个新网络需要 9.5GB 的 GPU 内存。
  • 再次重申,我试图了解为什么我的“旧”设置适合 8GB 内存而"new"设置不适合,以及为什么额外数据所需的内存量是 ~8 倍大于保存输入所需的内存。然而,既然我已经确认"new"设置只需要 9.5GB,它可能没有我怀疑的“旧”设置大得多(不幸的是,GPU 目前正在被其他人使用,所以我不能检查旧设置确切需要多少内存)
  • 最佳答案

    请记住,caffe 实际上为网络的两个副本分配了空间:“训练阶段”网络和“测试阶段”网络。因此,如果数据占用 1.1GB,则需要将此空间加倍。
    此外,您需要为参数分配空间。每个参数都需要存储它的梯度。此外,求解器会跟踪每个参数的“动量”(有时甚至是二阶矩,例如在 ADAM 求解器中)。因此,即使只增加很小的参数数量,也会显着增加训练系统的内存占用。

    关于neural-network - caffe内存不足,用在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54947317/

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