我需要执行多次平均大量长矢量的工作,我希望在我的GPU上完成该工作。
在运行时监视nvtop和htop,我发现在这些操作中根本没有使用GPU(在我训练Keras模型时总是显示最活跃的状态),而在这些操作中CPU的使用激增。
我已经在下面的代码段中对其进行了仿真(试图将非tf工作降至最低)。
我在做什么错了?
import tensorflow as tf
from tensorflow.math import add_n, add, scalar_mul
import numpy as np
tf.debugging.set_log_device_placement(True)
sess = tf.compat.v1.Session(config=config)
tf.compat.v1.keras.backend.set_session(sess)
os.environ["CUDA_VISIBLE_DEVICES"]="1"
#Make a random numpy matrix
vecs=np.random.rand(100, 300)
with sess.as_default():
with tf.device('/GPU:0'):
for _ in range(1000):
#vecs=np.random.rand(100, 300)
tf_vecs=tf.Variable(vecs, dtype=tf.float64)
tf_invlgt=tf.Variable(1/np.shape(vecs)[0],dtype=tf.float64)
vectors=tf.unstack(tf_vecs)
sum_vecs=add_n(vectors)
mean_vec=tf.Variable(scalar_mul(tf_invlgt, sum_vecs))
谢谢
迈克尔
答案 0 :(得分:0)
我可能是错的,但是cuda_visible_devices应该像“ 0”一样
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"
请参阅github评论here
如果仍然无法使用,您还可以添加一小段代码来检查tensorflow是否可以看到gpu设备:
from tensorflow.python.client import device_lib
def get_available_gpus():
local_device_protos = device_lib.list_local_devices()
return [x.name for x in local_device_protos if x.device_type == 'GPU']
提到此here