10

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

[global]
device = gpu0

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

如果在导入 theano 后,我选择使用 say gpu1 怎么办?我想动态地做到这一点,也就是说,没有编辑.theanorc是可能的吗?甚至在运行时选择它?

4

2 回答 2

11

恐怕导入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 的多处理模块(通过生成子进程工作)以确保在生成子进程之前设置标志。

于 2015-08-13T09:07:18.683 回答
5

编辑: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
    
于 2016-04-24T21:27:28.603 回答