我在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上执行?
答案 0 :(得分:1)
您可以定义with tf.device('/cpu:0'):
内部的所有内容,但库可以导入零件并进行测试。
如果这不起作用,则创建一个虚拟环境并安装普通的tensorflow而不是gpu版本,然后尝试。如果仍然是OOM错误,则表明它来自正在使用的CPU,并且它没有足够的内存来加载此经过训练的模型。