首页 文章

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

提问于
浏览
2

在深度神经网络训练的背景下,当使用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"

我的问题是:

  • 是否可以在运行时从GPU更改为CPU,反之亦然? (技术上)

  • 如果是,我怎样才能在Python中以编程方式进行? (2.7,Windows和Keras与Theano后端) .

1 回答

  • 2

    是的,这至少对于tensorflow后端是可能的 . 您只需要导入tensorflow并将您的代码放入以下 with

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

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

相关问题