当有两个 gpu 时,如何设置 Torch 只使用一个 gpu?

Posted

技术标签:

【中文标题】当有两个 gpu 时,如何设置 Torch 只使用一个 gpu?【英文标题】:How to set Torch to use only one gpu when there are two gpu? 【发布时间】:2016-10-05 15:19:04 【问题描述】:

我的电脑有两个 GPU。这是我第一次使用两个 GPU。当我有一个 GPU 时,我只运行 Cuda 程序,它只在一个 GPU 上运行。但是,我不知道如何控制程序使用哪个 GPU 以及如何在唯一一个 GPU 上运行程序。我搜索了互联网,post 说

导出 CUDA_VISIBLE_DEVICES=0

这必须在运行程序之前使用。我有两个程序要运行。一个是torch脚本,另一个是Cuda脚本。我打开了两个终端,在第一个终端中,我使用了上面的命令并运行了 torch 程序。之后,在第二个终端中,我也使用上面的命令,只将数字从 0 更改为 1 并运行 cuda 程序。

但是,看nvidia-smi的图片,显示这两个程序都分配到了第0个GPU。我想将torch程序(PID 19520)分配给第0个,将cuda程序(PID 20351)分配给第一个GPU。

如何将这两个程序分配给不同的 GPU 设备?

以下是torch脚本的设置。 (Ubuntu 14.04, nvidia titan gtx x, cuda-7.5)

--[[command line arguments]]--
cmd = torch.CmdLine()
cmd:text()
cmd:text('Train a Recurrent Model for Visual Attention')
cmd:text('Example:')
cmd:text('$> th rnn-visual-attention.lua > results.txt')
cmd:text('Options:')
cmd:option('--learningRate', 0.01, 'learning rate at t=0')
cmd:option('--minLR', 0.00001, 'minimum learning rate')
cmd:option('--saturateEpoch', 800, 'epoch at which linear decayed LR will reach minLR')
cmd:option('--momentum', 0.9, 'momentum')
cmd:option('--maxOutNorm', -1, 'max norm each layers output neuron weights')
cmd:option('--cutoffNorm', -1, 'max l2-norm of contatenation of all gradParam tensors')
cmd:option('--batchSize', 20, 'number of examples per batch')
cmd:option('--cuda', true, 'use CUDA')
cmd:option('--useDevice', 1, 'sets the device (GPU) to use')
cmd:option('--maxEpoch', 2000, 'maximum number of epochs to run')
cmd:option('--maxTries', 100, 'maximum number of epochs to try to find a better local minima for early-stopping')
cmd:option('--transfer', 'ReLU', 'activation function')
cmd:option('--uniform', 0.1, 'initialize parameters using uniform distribution between -uniform and uniform. -1 means default initialization')
cmd:option('--xpPath', '', 'path to a previously saved model')
cmd:option('--progress', false, 'print progress bar')
cmd:option('--silent', false, 'dont print anything to stdout')

【问题讨论】:

您认为--useDevice 选项值得一试吗? @talonmies 我会尝试删除它。这也是我第一次使用手电筒。我会多做一些实验。 【参考方案1】:
CUDA_VISIBLE_DEVICES=0 th [torch script]
CUDA_VISIBLE_DEVICES=1 [CUDA script]

【讨论】:

以上是关于当有两个 gpu 时,如何设置 Torch 只使用一个 gpu?的主要内容,如果未能解决你的问题,请参考以下文章

CPU/GPU 设备之间的 Torch 分布式广播和减少

在 Torch 机器学习框架中设置 GPU 使用率

Torch,如何将多个 GPU 用于不同的数据集

(原)torch7中指定可见的GPU

在 torch.distributed 中,如何正确平均不同 GPU 上的梯度?

如何告诉 PyTorch 不使用 GPU?