如果要在使用screen
命令时指定CUDA设备,正确的方法是在screen
命令之前设置CUDA_VISIBLE_DEVICES
环境变量。由于screen
会启动一个新的shell会话,直接在命令中设置环境变量可能不会按预期工作。因此,你需要先导出环境变量,然后再启动screen
会话。这里是如何做:
方法一:
首先,你需要在启动screen
会话之前,在同一个命令行环境中导出CUDA_VISIBLE_DEVICES
环境变量。这可以通过在命令行中输入以下命令实现:
export CUDA_VISIBLE_DEVICES=0
这条命令会设置环境变量,使得所有接下来在这个终端会话中运行的CUDA程序只能看到和使用第一个GPU(假设编号为0)。
启动带有特定CUDA设备的screen会话: 环境变量设置完成后,你可以使用原来的命令启动screen
会话:
screen -SL huihua -Logfile rizhi python tools/train.py configs/yolox/yolox_s_8xb8-300e_coco.py
这种方法的一个潜在问题是,CUDA_VISIBLE_DEVICES
的设置会影响到启动这个命令的终端会话中的所有CUDA程序,直到你关闭终端或者显式地改变CUDA_VISIBLE_DEVICES
的值。
方法二:
如果你想在一个单独的命令中完成这个操作,而不是改变当前shell的环境变量,可以尝试将export
命令和你的screen
命令结合在一条命令行中,像这样:
screen -SL huihua -Logfile rizhi bash -c 'export CUDA_VISIBLE_DEVICES=0; python tools/train.py configs/yolox/yolox_s_8xb8-300e_coco.py'
这条命令使用bash -c
来执行一个包含两个步骤的命令序列:首先设置CUDA_VISIBLE_DEVICES
环境变量,然后运行python
命令。这样做的好处是,环境变量的设置只影响通过这条screen
命令启动的那个进程,而不会影响到其他进程或者未来在同一个shell会话中运行的命令。