我的代码:
import tensorflow as tf
def main():
with tf.device('/gpu:0'):
a = tf.Variable(1)
init_a = tf.global_variables_initializer()
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
sess.run(init_a)
if __name__ == '__main__':
main()
错误:
InvalidArgumentError(请参阅上面的回溯):无法分配设备 for operation' Variable':无法满足显式设备 规范' /设备:GPU:0'因为没有支持GPU的内核 设备可用。
这是否意味着不能将Variable
固定到GPU上?
this是另一个与此主题相关的主题。
答案 0 :(得分:3)
int32
类型(截至2018年1月)。我相信完整的错误会说:
InvalidArgumentError (see above for traceback): Cannot assign a device for operation 'Variable': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.
Colocation Debug Info:
Colocation group had the following types and devices:
Assign: CPU
Identity: CPU
VariableV2: CPU
[[Node: Variable = VariableV2[container="", dtype=DT_INT32, shape=[], shared_name="", _device="/device:GPU:0"]()]]
而DT_INT32
会导致您遇到麻烦,因为您明确要求将变量放在GPU上,但没有GPU内核用于相应的操作和dtype。
如果这只是一个测试程序,实际上你需要另一种类型的变量,比如float32,你应该没问题。例如:
import tensorflow as tf
with tf.device('/gpu:0'):
# Providing 1. instead of 1 as the initial value will result
# in a float32 variable. Alternatively, you could explicitly
# provide the dtype argument to tf.Variable()
a = tf.Variable(1.)
init_a = tf.global_variables_initializer()
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
sess.run(init_a)
或者,您可以选择在CPU上显式放置int32变量,或者根本不指定任何设备,让TensorFlow的设备放置在适当的位置选择GPU。例如:
import tensorflow as tf
v_int = tf.Variable(1, name='intvar')
v_float = tf.Variable(1., name='floatvar')
init = tf.global_variables_initializer()
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
sess.run(init)
这将显示'intvar'放在CPU上,而'floatvar'在GPU上使用一些日志行,如:
floatvar: (VariableV2)/job:localhost/replica:0/task:0/device:GPU:0
intvar: (VariableV2)/job:localhost/replica:0/task:0/device:CPU:0
希望有所帮助。
答案 1 :(得分:1)
这意味着Tensorflow无法找到您指定的设备。
我假设您要指定您的代码在GPU 0上执行。
正确的语法是:
with tf.device('/device:GPU:0'):
您正在使用的缩写仅允许用于CPU。
您也可以在此处查看此答案:How to get current available GPUs in tensorflow?
它显示了如何列出TF识别的GPU设备。