模型训练内存占用较高
收藏
0
收藏
全部评论(6)
同时我在数据处理时 对image数据使用了以下的处理方式,猜测可能是这样的处理方式导致了内存泄露问题
def parse_image(self, image):
image = self.image_dir + image
img = Image.open(image)
img = img.convert("RGB")
img = img.resize((224, 224), Image.ANTIALIAS)
img = np.array(img)
img = img.astype("float32")
img = np.transpose(img, (2, 0, 1))
img = img * 1.0 / 225
return img
0
经观察,在训练过程中,内存占比不断升高,怀疑是内存泄露问题
一个可能的原因是使用了pyreader
feed_list = [
instance.input_src_ids,
instance.input_txt_ids,
instance.input_pos_ids,
instance.input_mask,
instance.input_image,
instance.input_hard_label]
train_batch_gen = data_reader.multiprocessing_wrapper(
file_names=train_file_name,
data_sizes=train_data_size,
num_workers=5,
epochs=10)
test_batch_gen = data_reader.batch_wrapper(
file_name=test_file_name,
data_size=test_data_size,
batch_size=128,
shuffle=True)
train_reader = fluid.io.PyReader(
feed_list=feed_list,
capacity=5,
use_double_buffer=True,
iterable=True)
train_reader.decorate_batch_generator(train_batch_gen, places=places)
test_reader = fluid.io.PyReader(
feed_list=feed_list,
capacity=5,
use_double_buffer=True,
iterable=True)
test_reader.decorate_batch_generator(test_batch_gen, places=places)
cnt = 0
for train_data in train_reader():
_loss = train_exe.run(
feed=train_data,
fetch_list=[loss.name])
print("{}\t{}".format(cnt, _loss[0]))
cnt += 1
if cnt % 200 == 0:
test_cnt = 0
auces = []
losses = []
for test_data in test_reader():
_test_loss, _pred, _label = test_exe.run(
feed=test_data,
fetch_list=[loss.name, pred.name, input_label.name],
return_numpy=True)
test_cnt += 1
if test_cnt >= 5:
break
如上所示,当移除上述test_reader相关的代码,内存占比不会逐渐升高
在上述test_reader被多次调用时,是否会发生内存泄漏问题呢?
0
不使用PyReader的情况下 不会发现泄露问题,这个问题是在使用了Pyreader之后产生的。
单独测试了PIL的image api 内存占比稳定 应该不是PIL的问题。
第二个问题还没有测试,但如果只使用train_reader,不使用上述代码中的test_reader 也不会发生内存泄露问题,想问下,1.5版本pyreader提前break的话会发生什么呢?
0
请登录后评论
1)PaddlePaddle版本:1.5.0
2)CPU:
3)GPU:tesla v100
1)单机 单卡
2)显存信息
模型为双塔模型 左侧 resnet 50 右侧 BOW 顶部 两层FC
目前的情况是训练过程中内存占用率较高,大概占用84G内存
模型在训练过程中使用了io.PyReader, 显存策略如下