TF2 对象检测 - 过去成功训练后自定义训练失败(OOM)

时间:2021-04-04 15:00:24

标签: python-3.x tensorflow ubuntu tensorflow2.0 object-detection-api

我基于来自 TF2 Object Detection Effectivedet _d2_coco17_tpu-32 的预训练模型训练了一个物体物体检测模型。 https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md

我根据这个过程的需要更改了 pipeline.config(我之前在 eff_d1 或 tf2 object detection zoo 的 ssd 模型上做过很多次)。

我成功地在批量大小为 2 和 10K 步上训练了这个模型。 但是当我尝试以 100K 步/50K 步/20K 步进行训练时,我收到了 00M 错误。

我无法理解为什么会发生这种情况。

GPU 训练 - Nvidia GeForce RTX 3070 Ubuntu 20.04 TF 2.4.1

任何想法, 谢谢

1 个答案:

答案 0 :(得分:0)

我不知道你在训练期间做了什么。我给出理由。 如果增加批量大小,则会发生 oom 错误。您需要检查您的 GPU 是否正在运行任何其他不需要的进程。使用以下命令并结束不需要的进程。

nvidia-smi

在少数情况下,图像大小会导致内存不足问题,更高的分辨率使用更高的内存。图片尺寸计算

64×64 and batch of 32

the memory cost on GPU is:

32⋅32⋅3
(size of the image if in color)⋅32(size of batch)⋅32(bits for a float32) bits ≈3MB

你可以使用这个标志来避免 OOM 错误

TF_FORCE_GPU_ALLOW_GROWTH=true

第一个选项:

下面这段代码对应的是TF2.0的第一个选项。

config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)

第二个选项:

下面这段代码对应的是TF2.0的第二个选项,但是它设置的是内存分数,不是一个确定的值。

# change the memory fraction as you want...import tensorflow as tf
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

如果您看到shuffle allocation,您可以在pipeline.config 中根据您的GPU 定义shuffle 图像分配,有时可能会导致OOM 错误。