Torch Cuda - 在两个 GPU 内核上生成两个进程

Posted

技术标签:

【中文标题】Torch Cuda - 在两个 GPU 内核上生成两个进程【英文标题】:Torch Cuda - Generates two processes on both GPU cores 【发布时间】:2016-02-21 19:15:38 【问题描述】:

当我跑步时;

require 'cutorch'

在 lua 中,它会自动将两个进程分配给我 GPU 中的两个内核。例如,我在nvidia-smi 中得到以下输出;

---------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
|    1      6091    C   /home/msmith/torch/install/bin/qlua             98MiB |
|    2      6091    C   /home/msmith/torch/install/bin/qlua             99MiB |
+-----------------------------------------------------------------------------+

我希望能够控制进程在哪个 GPU 上进行。我试过了;

cutorch.setDevice(<Device Number>)

但这只会在 GPU 上创建更多进程。

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用CUDA_VISIBLE_DEVICES 环境变量启动进程之前控制进程将在哪个GPU 上运行,例如仅在CPU 0 上运行:

export CUDA_VISIBLE_DEVICES=0
luajit your-script.lua

【讨论】:

我在 iTorch 笔记本之前运行了这个,它运行良好。许多 CUD 只是一句让我不快的评论:您在此处使用的 id 是 CUDA deviceQuery 报告的 ID(为 cutorch.setDevice() 添加 +1,因为 lua 以 1 而不是 0 开头)。 nvidia-smi 可以显示不同的 GPU id!它超级令人困惑......【参考方案2】:

正如前面的回答所说,在调用torch或torch-lua-script之前,可以在命令行中使用CUDA_VISIBLE_DEVICES环境变量来选择GPU。这是 CUDA 的通用方式,可用于任何应用程序,而不仅仅是火炬。这里的数字可能会与cutorch.setDevice() 中设置的数字相冲突(也是从 1 开始的)。可以通过逗号分隔的列表选择多个特定的 GPU:例如:

CUDA_VISIBLE_DEVICES=1,2

这将导致 Torch 仅在 GPU 1 和 2 上运行。可以在此处找到更多信息:

https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/

【讨论】:

以上是关于Torch Cuda - 在两个 GPU 内核上生成两个进程的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 在 GPU 上生成缩略图

torch报错AssertionError: Torch not compiled with CUDA enabled解决方法 torch适配CUDA降版本选择gpu版本最终方案

tensorflow 和 torch.cuda 可以找到 GPU,但 Keras 不能

报错记录torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 90.00 MiB (GPU 0; 7.93 GiB to

torch.cuda常用指令

torch中topk()无法gpu加速