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 内核上生成两个进程的主要内容,如果未能解决你的问题,请参考以下文章
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