文档首页 > > 常见问题> 模型评估>

如何解决模型评估过程中内存溢出的问题

如何解决模型评估过程中内存溢出的问题

分享
更新时间: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:随机抽取部分数据集做模型评估

    随机抽取部分数据集做模型评估,在样本合适的情况下,对于数据量较大的样本,随机采样数据集在能有效地反应整体数据集的情况的同时,也能节省评估的时间。

分享:

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区论坛频道来与我们联系探讨

智能客服提问云社区提问