Select 在 Theano 中执行期间的 GPU

Select GPU during execution in Theano

我正在 4 GPU 机器上用 theano 和 lasagne 训练神经网络。我的 .theanorc 包含以下几行:

[global]
device = gpu0

所以当我在 python 中执行 import theano 时,我得到 Using gpu device 0: GRID K520

如果在导入theano之后,我选择使用say gpu1呢?我想动态地执行此操作,也就是说,不编辑 .theanorc 是否可能?或者甚至在运行时选择它?

恐怕导入Theano后就不能更改执行设备了。来自 documentation:

config.device

String value: either 'cpu', 'gpu', 'gpu0', 'gpu1', 'gpu2', or 'gpu3'

[...]

This flag’s value cannot be modified during the program execution.

Bonus:但是,假设您希望在单独的 GPU 上每个 运行 有两个 Python 进程(这是您想要的吗?) ,那么您可以执行以下操作:

import os
os.system("THEANO_FLAGS='device=gpu0' python myscript.py")
os.system("THEANO_FLAGS='device=gpu1' python myscript.py")

或破解 into/extend Python 的 multiprocessing 模块(通过生成子进程工作)以确保在生成子进程之前设置标志。

编辑: Theano 现在基于 GPU 数组后端,以下 API 不再可用。

如@EelkeSpaak 所述,导入 theano 后无法更改 GPU 设备。但是,如果您想在此之前以编程方式选择它,则无需更改环境变量。

  1. 确保您没有在 .theanorc 文件中选择设备。 所以没有什么像:

    device=gpu

  2. 在调用import theano之前选择GPU设备如下:

    import theano.sandbox.cuda
    theano.sandbox.cuda.use('gpu1')
    
    #Results in Using gpu device 1: Tesla K80