modelarts
/modelarts_faq/modelarts_05_0152.html
如何解决模型评估过程中内存溢出的问题
更新时间:2020/12/14 GMT+08:00
由于资源使用是有限制,不可能无限制使用内存和显存等资源,所以在数据集较大的时候,如果把数据先统一读取到内存中,很容易造成内存不足的报错情况。在训练作业的日志中会体现为如下报错,其报错含义为占用内存已满被强制释放资源。
"/home/ma-user/run_train_v2.sh: line 113: 94 Killed stdbuf -oL -eL ${ma_program_executor} "$boot_file" $prog_args >> "${training_log_file}" 2>&1"
解决方案
- 方法1:修改数据加载到内存的代码不一次性将所有图片读入内存,而是读一张或者一个batch的数据集然后直接推理,这样对内存的占用始终只有一张或者一个batch的图片,可参照如下代码样例。
原始代码,将所有数据进行预处理后加载到内存中。
for img_path in data_file_list: img = _preprocess(img_path) img_list.append(img)
修改代码,将数据集读取一张或一个batch后再加载到内存中。for img_path in data_file_list: img = _preprocess(img_path) pred_output = sess.run([y], {x: img}) pred_output = softmax(pred_output[0]) pred_list.append(pred_output[0].tolist())
- 方法2:随机抽取部分数据集做模型评估
随机抽取部分数据集做模型评估,在样本合适的情况下,对于数据量较大的样本,随机采样数据集在能有效地反应整体数据集的情况的同时,也能节省评估的时间。
父主题: 模型评估
