我在 4 GPU 机器上用 theano 和 lasagne 训练神经网络。我的.theanorc
包含以下几行:
[global]
device = gpu0
所以当我在 python 中执行时 import theano
,我得到Using gpu device 0: GRID K520
如果在导入 theano 后,我选择使用 say gpu1 怎么办?我想动态地做到这一点,也就是说,没有编辑.theanorc
是可能的吗?甚至在运行时选择它?
恐怕导入Theano后无法更改执行设备。从文档中:
配置设备
字符串值:'cpu'、'gpu'、'gpu0'、'gpu1'、'gpu2' 或 'gpu3'
[...]
该标志的值在程序执行期间不能修改。
奖励:但是,假设您想让两个 Python 进程分别在单独的 GPU 上运行(这就是您想要的吗?),那么您可以执行以下操作:
import os
os.system("THEANO_FLAGS='device=gpu0' python myscript.py")
os.system("THEANO_FLAGS='device=gpu1' python myscript.py")
或侵入/扩展 Python 的多处理模块(通过生成子进程工作)以确保在生成子进程之前设置标志。
编辑: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