即使显式指定tf.device('gpu:0')

时间:2018-10-15 15:30:08

标签: python python-3.x tensorflow

在多次尝试验证我的nvidia quadro M4000M是否可以进行张量计算之后,正确安装了Cuda,正确安装了cuda工具包8.0,deviceQuery和nvidia-smi确认设备运行正常。

deviceQuery

nvidia-smi

运行tensorflow的示例时:

import tensorflow as tf

with tf.device("/gpu:0"):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a', dtype=tf.float32)
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b', dtype=tf.float32)
    c = tf.matmul(a, b)

sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=False,log_device_placement=True)) 
print(sess.run(c))

我没有获得设备映射信息,而完成会话的唯一方法是更改​​allow_soft_placement = True,它似乎没有使用GPU。

当tf.device(“ / gpu:0”)或/ cpu:0的allow_soft_placement = False时,错误是:

  
    

InvalidArgumentError错误回溯(最近一次通话)     〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在_do_call(self,fn,* args)1291中尝试:     -> 1292返回fn(* args)1293(errors.OpError为e:

         

〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在_run_fn中(feed_dict,fetch_list,target_list,选项,run_metadata)     1274#确保对图形的任何更改都反映在     运行。     -> 1275 self._extend_graph()1276返回self._call_tf_sessionrun(

         

〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在_extend_graph(self)1311中     self._graph._session_run_lock():#pylint:disable =受保护的访问     -> 1312 tf_session.ExtendSession(self._session)1313

         

InvalidArgumentError:无法为操作'MatMul'分配设备:该操作已明确分配给/ device:GPU:0,但可用     设备是[/ job:localhost / replica:0 / task:0 / device:CPU:0]。使     确保设备规格引用的是有效设备。 [[{{节点     MatMul}} = MatMul [T = DT_FLOAT,transpose_a = false,transpose_b = false,     _device =“ / device:GPU:0”](a,b)]]

         

在处理上述异常期间,发生了另一个异常:

         

InvalidArgumentError错误回溯(最近一次拨打电话)           7 sess = tf.Session(config = tf.ConfigProto(allow_soft_placement = False,log_device_placement = True))           8     ----> 9次打印(sess.run(c))          10          11

         

〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在运行中(自我,获取,feed_dict,选项,run_metadata)         885尝试:         (886)     -> 887 run_metadata_ptr)         888(如果run_metadata):         889 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

         

〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在_run(自身,句柄,访存,feed_dict,选项,run_metadata)中
    1108如果final_fetches或final_targets或(句柄和     feed_dict_tensor):1109个结果= self._do_run(handle,     final_targets,final_fetches,     -> 1110 feed_dict_tensor,选项,run_metadata)1111否则:1112结果= []

         

〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在_do_run(自身,句柄,target_list,fetch_list,feed_dict,选项,     run_metadata)1284如果句柄为None:1285返回     self._do_call(_run_fn,提要,提取,目标,选项,     -> 1286 run_metadata)1287否则:1288返回self._do_call(_prun_fn,句柄,提要,获取)

         

〜\ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ client \ session.py     在_do_call(self,fn,* args)1306中
    self._config.experimental.client_handles_error_formatting):1307
    消息= error_interpolation.interpolate(消息,self._graph)     -> 1308提高类型(e)(node_def,op,消息)1309 1310 def _extend_graph(自身):

         

InvalidArgumentError:无法为操作'MatMul'分配设备:该操作已明确分配给/ device:GPU:0,但可用     设备是[/ job:localhost / replica:0 / task:0 / device:CPU:0]。使     确保设备规格引用的是有效设备。 [[{{节点     MatMul}} = MatMul [T = DT_FLOAT,transpose_a = false,transpose_b = false,     _device =“ / device:GPU:0”](a,b)]]

         

由“ MatMul”操作引起,定义于:文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ runpy.py”,     _run_module_as_main中的第193行         “ 主要”,mod_spec)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ runpy.py”,     第85行,在_run_code中         exec(代码,run_globals)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel_launcher.py”,     第16行         app.launch_new_instance()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ traitlets \ config \ application.py”,     658行,在launch_instance中         app.start()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel \ kernelapp.py”,     第499行,开始时         self.io_loop.start()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ platform \ asyncio.py”,     第132行,开始时         self.asyncio_loop.run_forever()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ asyncio \ base_events.py”,     422行,在run_forever中         self._run_once()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ asyncio \ base_events.py”,     _run_once中的第1434行         handle._run()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ asyncio \ events.py”,     _run中的第145行         self._callback(* self._args)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ ioloop.py”,     _run_callback中的第758行         ret = callback()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ stack_context.py”,     第300行,在null_wrapper中         返回fn(* args,** kwargs)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ gen.py”,     第1233行,在内部         self.run()文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ gen.py”,     1147行,正在运行         产生= self.gen.send(值)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel \ kernelbase.py”,     第346行,在process_one中         产生gen.maybe_future(dispatch(* args))文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ gen.py”,     包装中的第326行         yield =下一个(结果)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel \ kernelbase.py”,     第259行,在dispatch_shell中         产生gen.maybe_future(处理程序(流(流,标识,消息)))文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ gen.py”,     包装中的第326行         yield =下一个(结果)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel \ kernelbase.py”,     第513行,在execute_request中         user_expressions,allow_stdin,文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tornado \ gen.py”,     包装中的第326行         yield =下一个(结果)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel \ ipkernel.py”,     第294行,在do_execute中         res = shell.run_cell(代码,store_history = store_history,silent =静音)文件     “ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ ipykernel \ zmqshell.py”,     第536行,在run_cell中         返回super(ZMQInteractiveShell,self).run_cell(* args,** kwargs)文件     “ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,     第2817行,在run_cell中         raw_cell,store_history,silent,shell_futures)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,     _run_cell中的第2843行         返回运行程序(coro)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ IPython \ core \ async_helpers.py”,     _pseudo_sync_runner中的第67行         coro.send(无)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,     第3018行,在run_cell_async中         交互性=交互性,编译器=编译器,结果=结果)文件     “ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,     第3183行,在run_ast_nodes中         如果(从self.run_code(代码,结果)产生):文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,     第3265行,在run_code中         exec(code_obj,self.user_global_ns,self.user_ns)文件“”,第5行,在         c = tf.matmul(a,b)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ ops \ math_ops.py”,     matmul中的2053行         a,b,transpose_a = transpose_a,transpose_b = transpose_b,name = name)文件     “ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ ops \ gen_math_ops.py”,     行4856,在mat_mul中         name = name)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ framework \ op_def_library.py”,     _apply_op_helper中的第787行         op_def = op_def)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ util \ deprecation.py”,     第488行,在new_func中         返回func(* args,** kwargs)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py”,     第3272行,在create_op中         op_def = op_def)文件“ C:\ Users \ sellersp \ AppData \ Local \ conda \ conda \ envs \ tensor \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py”,     第1768行,在 init 中         self._traceback = tf_stack.extract_stack()

         

InvalidArgumentError(请参阅上面的回溯):无法为操作“ MatMul”分配设备:操作已明确分配给     / device:GPU:0,但可用设备为[     / job:localhost /副本:0 /任务:0 /设备:CPU:0]。确保设备     规范是指有效的设备。 [[{{node MatMul}} =     MatMul [T = DT_FLOAT,transpose_a = false,transpose_b = false,     _device =“ / device:GPU:0”](a,b)]]

  

在搜索了许多位置后,我似乎找不到错误所在。我已经在Jupyter Notebook中运行了它,并在解释程序中将其运行为脚本。

任何帮助将不胜感激。很抱歉出现冗长的错误。

1 个答案:

答案 0 :(得分:0)

您已经安装了tensorflow-gpu吗? Tensorflow有两个二进制软件包(tensorflow-gpu和tensorflow)。 https://www.tensorflow.org/install/pip