在 Azure 上使用 GPU 而不是 CPU 时出现 ResourceException
Posted
技术标签:
【中文标题】在 Azure 上使用 GPU 而不是 CPU 时出现 ResourceException【英文标题】:ResourceException when use GPU but not CPU on Azure 【发布时间】:2018-08-15 14:56:33 【问题描述】:我的代码能够成功构建图表并在 Azure ML 上以 CPU 模式运行图表,但 GPU 在图表构建阶段报告了 ResourceException。
我只需删除设备命令即可在 CPU 和 GPU 模式之间切换:
with tf.device('/cpu:0'), tf.name_scope('embedding'): #cpu 模式运行良好
with tf.name_scope('embedding'): #gpu模式抛出异常
我尝试加载较少的数据,但也没有用。
我怀疑我在设置 GPU 时错过了一些步骤。有什么想法吗?
Azure 错误消息:
tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM 分配具有形状的张量时[78298,300] [[节点:embedding_matrix/Assign = Assign[T=DT_FLOAT, _class=["loc:@embedding_matrix"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device :GPU:0"](embedding_matrix, embedding_matrix/Initializer/Const)]]
完整的错误信息:
Traceback(最近一次调用最后一次): _do_call 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/client/session.py”,第 1323 行 返回 fn(*args) _run_fn 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/client/session.py”,第 1302 行 状态,运行元数据) exit 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py”,第 473 行 c_api.TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.ResourceExhaustedError:分配具有形状的张量时出现OOM [78298,300] [[节点:embedding_matrix/Assign = Assign[T=DT_FLOAT, _class=["loc:@embedding_matrix"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device :GPU:0"](embedding_matrix, embedding_matrix/Initializer/Const)]]
在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次): 文件“NN.py”,第 130 行,在 sess.run(初始化) 运行中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/client/session.py”,第 889 行 run_metadata_ptr) _run 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/client/session.py”,第 1120 行 feed_dict_tensor、选项、run_metadata) _do_run 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/client/session.py”,第 1317 行 选项,run_metadata) _do_call 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/client/session.py”,第 1336 行 raise type(e)(node_def, op, message) tensorflow.python.framework.errors_impl.ResourceExhaustedError:分配具有形状的张量时出现OOM [78298,300] [[节点:embedding_matrix/Assign = Assign[T=DT_FLOAT, _class=["loc:@embedding_matrix"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device :GPU:0"](embedding_matrix, embedding_matrix/Initializer/Const)]]
由 op 'embedding_matrix/Assign' 引起,定义在: 文件“NN.py”,第 120 行,在 ,可训练=假) 文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variable_scope.py”,第 1203 行,在 get_variable 约束=约束) 文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variable_scope.py”,第 1092 行,在 get_variable 约束=约束) 文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variable_scope.py”,第 425 行,在 get_variable 约束=约束) _true_getter 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variable_scope.py”,第 394 行 使用资源=使用资源,约束=约束) _get_single_variable 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variable_scope.py”,第 805 行 约束=约束) init 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variables.py”,第 213 行 约束=约束) _init_from_args 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/variables.py”,第 346 行 validate_shape=validate_shape).op 分配中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/state_ops.py”,第 276 行 验证形状=验证形状) 分配中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/gen_state_ops.py”,第 57 行 使用锁定=使用锁定,名称=名称) _apply_op_helper 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/framework/op_def_library.py”,第 787 行 op_def=op_def) 文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/framework/ops.py”,第 2956 行,在 create_op op_def=op_def) init 中的文件“/anaconda/envs/py35/lib/python3.5/site-packages/tensorflow/python/framework/ops.py”,第 1470 行 self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
ResourceExhaustedError(回溯见上文):分配具有形状的张量时出现 OOM [78298,300] [[节点:embedding_matrix/Assign = Assign[T=DT_FLOAT, _class=["loc:@embedding_matrix"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device :GPU:0"](embedding_matrix, embedding_matrix/Initializer/Const)]]
【问题讨论】:
【参考方案1】:主机内存比 N 系列机器的设备内存大得多。 您确定您只是没有超出设备容量吗?
【讨论】:
以上是关于在 Azure 上使用 GPU 而不是 CPU 时出现 ResourceException的主要内容,如果未能解决你的问题,请参考以下文章
在 GPU 而不是 Ubuntu 上的 CPU 上运行 Spyder 代码
使用 GPU 而不是 CPU 与 Keras 和 Linux 的 Tensorflow 后端