如何将经过GPU训练的模型加载到CPU(系统)内存中?

时间:2019-10-17 09:38:51

标签: python tensorflow keras

我在GPU上训练了一个模型,现在我正在尝试在CPU上对其进行评估(GPU用于另一次火车运行)。但是,当我尝试使用以下方法加载它时:

with tf.device('/cpu:0'):
    model = tf.keras.models.load_model('models/resnet50_untrained.h5', compile=False)

我收到CUDA_ERROR_OUT_OF_MEMORY

2019-10-17 09:25:23.088408: W tensorflow/compiler/xla/service/platform_util.cc:256] unable to create StreamExecutor for CUDA:0: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_OUT_OF_MEMORY: out of memory; total memory reported: 7981694976
2019-10-17 09:25:23.088505: F tensorflow/stream_executor/lib/statusor.cc:34] Attempting to fetch value instead of handling error Internal: no supported devices found for platform CUDA

(我也尝试将compile=True设置为相同的结果。)

似乎该模型正在加载到另一个实例已经使用的GPU中。如何强制keras / tensorflow将其加载到系统内存中并在CPU上执行?

1 个答案:

答案 0 :(得分:1)

您可以定义with tf.device('/cpu:0'):内部的所有内容,但库可以导入零件并进行测试。

如果这不起作用,则创建一个虚拟环境并安装普通的tensorflow而不是gpu版本,然后尝试。如果仍然是OOM错误,则表明它来自正在使用的CPU,并且它没有足够的内存来加载此经过训练的模型。