当前位置: 首页 > 知识库问答 >
问题:

转移学习-尝试重新培训RTX 2070上的efficientnet-B07内存不足

劳烨
2023-03-14

这是我试图运行工作时尝试的训练代码在64gb RAM CPU上的挤压RTX 2070

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.7
tf.keras.backend.set_session(tf.Session(config=config))

model = efn.EfficientNetB7()
model.summary()

# create new output layer
output_layer = Dense(5, activation='sigmoid', name="retrain_output")(model.get_layer('top_dropout').output)
new_model = Model(model.input, output=output_layer)
new_model.summary()
# lock previous weights

for i, l in enumerate(new_model.layers):
    if i < 228:
        l.trainable = False
# lock probs weights

new_model.compile(loss='mean_squared_error', optimizer='adam')

batch_size = 5
samples_per_epoch = 30
epochs = 20

# generate train data
train_datagen = ImageDataGenerator(
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    validation_split=0)

train_generator = train_datagen.flow_from_directory(
    train_data_input_folder,
    target_size=(input_dim, input_dim),
    batch_size=batch_size,
    class_mode='categorical',
    seed=2019,
    subset='training')

validation_generator = train_datagen.flow_from_directory(
    validation_data_input_folder,
    target_size=(input_dim, input_dim),
    batch_size=batch_size,
    class_mode='categorical',
    seed=2019,
    subset='validation')

new_model.fit_generator(
    train_generator,
    samples_per_epoch=samples_per_epoch,
    epochs=epochs,
    validation_steps=20,
    validation_data=validation_generator,
    nb_worker=24)

new_model.save(model_output_path)



exception:

2019-11-17 08:52:52.903583:我在本地libcublas.so.libcublas.so.libcublas.so.成功打开CUDA库......2019-11-17 08:53:24.713020:我的内容/核心/common_runtime/bfc_allocator.cc:641] 110块大小27724800总计2.84GiB2019-11-17 08:53:24.713024: I tenstorflow/core/common_runtime/bfc_allocator.cc:641] 6块大小38814720,总计222.10MiB2019-11-17 08:53:24.713027: I tenstorflow/core/common_runtime/bfc_allocator.cc:641] 23块大小54000128,总计1.16GiB2019-11-17 08:53:24.713031:1块的大小73760000总计70.34MiB2019-11-17 08:53:24.713034: I tenorflow/core/common_runtime/bfc_allocator.cc:645]使用中的块总数: 5.45GiB2019-11-17 08:53:24.713040: I tenorflow/core/common_runtime/bfc_allocator.cc:647]统计:限制: 5856749158 Inuse: 5848048896 MaxInuse: 5848061440 NumAllocs: 6140 MaxAllocsize: 3259170816

2019-11-17 08:53:24.713214:W tenstorflow/核心/common_runtime/bfc_allocator.cc:271 ] **************************************************************************************************** 2019-11-17 08:53:24.713232: W tenstorflow/core/框架/op_kernel.cc:1401]OP_REQUIREScwise_ops_common.cc:70失败:资源耗尽:当分配带有形状的张量时OOM[5,1344,38,38]并在 /job:localhost/replica: 0/任务: 0/设备: GPU: 0通过分配器GPU_0_bfcTraceback(最近的调用最后): File"/home/naort/Desktop/深度学习-数据-准备-工具/效率网-传输-学习-锅炉-板/model_retrain.py",行76,在nb_worker=24)File"/usr/local/lib/python3.6/dist-包/keras/遗留/interfaces.py",第91行,在包装器返回func(*args,**kwargs)File"/usr/local/lib/python3.6/dist-包/keras/引擎/training.py",第1732行,在fit_generatorinitial_epoch=initial_epoch)文件"/usr/本地/lib/python3.6/dist-包/keras/引擎/training_generator.py",第220行,fit_generatorreset_metrics=False)文件"/usr/本地/lib/python3.6/dist-包/keras/引擎/training.py",第1514行,train_on_batch输出=self.train_function(ins)File"/home/naort/. local/lib/python3.6/site-包/tenstorflow/python/keras/backend.py",第3076行,调用run_metadata=self.run_metadata)File"/home/naort/. local/lib/python3.6/site-包/tenstorflow/python/Client/session.py",第1439行,在调用run_metadata_ptr)File"/home/naort/. local/lib/python3.6/site-包/tenstorflow/python/框架/errors_impl.py",第528行,在退出c_api。TF_GetCode(self.status.status))tensorflow.python.framework.errors_impl。ResourceExhaustedError: OOM当分配张量与形状[5,1344,38,38]和类型浮点 /job:localhost/replica: 0/任务: 0/设备: GPU: 0分配器GPU_0_bfc[[{{节点训练/亚当/梯度/AddN_387-0-TransposeNHWCToNCHW-LayoutOptimzer}}]]提示:如果你想看到分配的列表张量当OOM发生时,将report_tensor_allocations_upon_oom添加到RunOptions以获取当前分配信息。

[{{node Mean}}]]提示:如果要在OOM发生时查看已分配张量的列表,请将report_tensor_allocations_on_OOM添加到当前分配信息的RunOptions。

共有1个答案

方河
2023-03-14

尽管效率网模型的参数计数低于相对的ResNe(X)t模型,但它们仍然消耗大量的GPU内存。您看到的是GPU的内存溢出错误(RTX 2070为8GB),而不是系统(64GB)。

B7模型,尤其是全分辨率的,超出了你想用一张RTX 2070卡进行训练的范围。即使冷冻了很多层。

可能有帮助的是在FP16中运行模型,这也将利用RTX卡的TensorCores。从https://medium.com/@noel_kennedy/how-to-use半精确浮动16-whing-trading-on-rtx-card-with-tenstorflow-keras-d4033d59f9e4,尝试以下操作:

import keras.backend as K

dtype='float16'
K.set_floatx(dtype)

# default is 1e-7 which is too small for float16.  Without adjusting the epsilon, we will get NaN predictions because of divide by zero problems
K.set_epsilon(1e-4) 
 类似资料:
  • QA职责 QA起到监督项目执行进度、监控项目质量的重要责任; QA辅助项目经理,推进项目开发; QA向公司的QA部门负责人汇报; QA需了解项目的所有需求; QA人员,同时承担项目上的开发工作,开发与项目保障并进。 对于目前的状况,QA的规划有如下特点: QA不作为公司的一个单独部门,而是由分散到每个项目的指定开发人员临时担任; QA是培养项目经理的重要岗位 QA工作内容 每天的进度反馈(从用户视

  • 对于初始模型,我主要遵循这一点。比方说,我想在每个训练循环上打印批次中使用的图像数据,即我想在“微调不同标签集上的模型”中打印每个训练迭代的“images”变量值代码,既然会话实际上是在slim中创建的,我该如何做呢。训练训练功能,因此我无法进行sess。在没有SES的情况下运行([图像])?

  • 两周培训规划 基础培训及考核-2d 代码规范培训-4h Linux基础-20h 工具培训及考核-6d gulp-4h webpack-4h postman-4h webstorm-4h git-8h gitlab-4h npm-4h bower-4h Lo-Dash-8h Chrome-dev-tool-4h Swagger-4h Graphql-4h SecureCRT-2h gitbook/m

  • 本文向大家介绍迁移学习相关面试题,主要包含被问及迁移学习时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 迁移学习就是把之前训练好的模型直接拿来用,可以充分利用之前数据信息,而且能够避免自己实验数据量较小等问题。简单来讲就是给模型做初始化,初始化的数据来自于训练好的模型。

  • 迁移学习(Transfer learning)顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练数据集。 经典论文: Progressive Neural Networks

  • 有时,我的应用程序在启动时会随机出现故障,它会在应用程序类中崩溃,用户无法再次打开应用程序,直到他们进入设置并清除应用程序数据 “DiskbasedBache”试图分配超过1GB的内存,原因并不明显 我怎么才能让这一切不发生?这似乎是Volley的一个问题,或者是一个基于自定义磁盘的缓存的问题,但是我没有立即看到(从堆栈跟踪中)如何‘清除’这个缓存,或者做一个条件检查或者处理这个异常 欣赏洞察力