如何在运行时(从GPU到CPU)更改处理单元?

时间:2017-11-20 10:11:03

标签: python neural-network deep-learning keras gpu

在深度神经网络训练的背景下,当使用GPU作为处理单元时,训练工作得更快。 这是通过配置CudNN优化并使用以下行更改环境变量中的处理单元(Windows上的Python 2.7和Keras)来完成的:

os.environ["THEANO_FLAGS"] = "floatX=float32,device=gpu,optimizer_including=cudnn,gpuarray.preallocate=0.8,dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic,dnn.include_path=e:/toolkits.win/cuda-8.0.61/include,dnn.library_path=e:/toolkits.win/cuda-8.0.61/lib/x64"

然后输出:

Using gpu device 0: TITAN Xp (CNMeM is disabled, cuDNN 5110)

问题是GPU内存与RAM相比有限(分别为12GB和128GB),培训只是整个流程的一个阶段。因此,我希望在培训完成后再切换回CPU。 我尝试过以下一行,但没有效果:

os.environ["THEANO_FLAGS"] = "floatX=float32,device=cpu"

我的问题是:

  1. 是否可以在运行时从GPU更改为CPU,反之亦然? (技术上)
  2. 如果是,我怎样才能在Python中以编程方式进行? (2.7,Windows和Keras与Theano后端)。

1 个答案:

答案 0 :(得分:2)

是的,这至少对于tensorflow后端是可能的。您还必须导入tensorflow并将代码放入以下with

with tf.device('/cpu:0'):
     your code

with tf.device('/gpu:0'):
     your code

我不确定这是否也适用于theano后端。但是,从一个后端切换到另一个后端只是预先设置一个标志,所以这不应该提供太多麻烦。