Python TensorFlow独立使用CPU和GPU

Python TensorFlow独立使用CPU和GPU,python,tensorflow,gpu,Python,Tensorflow,Gpu,我有一个简单的问题:我在Tensorflow 1.3.0(GPU)和Python3中有两个小进程,它们在Windows10和CUDA8上运行。我想在GPU上运行一个,在CPU上运行另一个(它们不应该合作!)。下面是一个小的无意义示例代码: import tensorflow as tf import time import os import sys dim = 6096 try: device = sys.argv[1] except: device = "gpu" pri

我有一个简单的问题:我在Tensorflow 1.3.0(GPU)和Python3中有两个小进程,它们在Windows10和CUDA8上运行。我想在GPU上运行一个,在CPU上运行另一个(它们不应该合作!)。下面是一个小的无意义示例代码:

import tensorflow as tf
import time
import os
import sys

dim = 6096
try:
    device = sys.argv[1]
except:
    device = "gpu"

print("Running for "+device)
cur_graph = tf.Graph()

with cur_graph.as_default():
    with tf.device("/"+device+":0"):
        x = tf.Variable(tf.random_normal([dim, dim]), dtype=tf.float32)
        y = tf.Variable(tf.random_normal([dim, dim]), dtype=tf.float32)
        z = tf.Variable(tf.random_normal([dim, dim]), dtype=tf.float32)

        a = tf.matmul(x, y)
        b = tf.matmul(a, z)

        training_start = time.time()
        with tf.Session() as sess:
            init_op = tf.global_variables_initializer()
            sess.run(init_op)
            sess.run(a)
        training_time = (time.time() - training_start)
        print("Time: %5.3f" % training_time)
如果我在CLI上用

my_prog.py cpu
my_prog.py gpu
当GPU处于空闲状态时,需要约10秒才能完成并利用CPU

如果我在CLI上用

my_prog.py cpu
my_prog.py gpu
当GPU处于空闲状态时,完成并使用GPU大约需要1秒钟

到目前为止还不错。现在我想在不同的CMD中并行启动它,我希望这两个进程都能独立工作,并利用CPU和GPU。但我总是从GPU进程中得到一个例外:

G:\Workspace\Python>device\u test.py gpu


是否可以在CPU和GPU上独立运行TensorFlow stuff?

Eureka。我解决了这个问题,但不知道为什么。。。我在代码中添加了以下行:

[……]

[……]


现在它可以正常工作。

只需使用一个会话。。。不要过度工程我有小的n。网络,我的GPU只比我的CPU快约10倍。因此,额外使用空闲的CPU将使我的计算速度提高+10%。@brown.2179:最后,你是对的。现在我可以同时使用CPU和GPU了。但我的GPU现在工作速度慢了约30%(当我的CPU“帮助”时)。总之,只在GPU上工作会更快…你怎么知道添加这些行呢?@wallyk说实话:只是尝试和错误。起初,我试图为我的GPU进程显式地将GPU内存设置为100%,为CPU进程设置为0%。但那没用。在这个提示()的同一个网站上,有一个解决方案。如果有人能解释这有助于:+1让它变得更奇怪:我在代码中添加了这些行,我启动了两次(一次使用gpu,一次使用CLI中的cpu参数)。所以即使是我的cpu进程也执行了这些行。。。
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
with tf.Session(config=config) as sess