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 设备。但是,如果您想在此之前以编程方式选择它,则无需更改环境变量。
确保您没有在 .theanorc 文件中选择设备。
所以没有什么像:
device=gpu
在调用import theano
之前选择GPU设备如下:
import theano.sandbox.cuda
theano.sandbox.cuda.use('gpu1')
#Results in Using gpu device 1: Tesla K80
我正在 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 设备。但是,如果您想在此之前以编程方式选择它,则无需更改环境变量。
确保您没有在 .theanorc 文件中选择设备。 所以没有什么像:
device=gpu
在调用
import theano
之前选择GPU设备如下:import theano.sandbox.cuda theano.sandbox.cuda.use('gpu1') #Results in Using gpu device 1: Tesla K80