CUDA重新编号多GPU设备(命令行)

一、简介

CUDA_VISIBLE_DEVICES是CUDA提供的一个环境变量,用于控制哪些GPU对当前程序可见,以及如何重新编号这些GPU。它是设置CUDA设备可见性和编号的重要工具,特别是在多GPU环境下,可以有效地管理和隔离GPU资源。

二、逻辑编号与物理编号

  1. 物理编号:GPU在操作系统中实际的编号。可以通过nvidia-smi等命令查看物理设备的编号。
    物理编号
  2. 逻辑编号:在CUDA_VISIBLE_DEVICES环境变量控制下的GPU设备编号。逻辑编号从0开始,表示当前程序可以访问的GPU。
  3. CUDA_VISIBLE_DEVICES的作用就是将系统中的物理编号映射到CUDA程序可见的逻辑编号上。通过重新设置环境变量,可以改变程序中实际使用的物理设备进行训练。

三、基本语法与使用方法

  1. CUDA_VISIBLE_DEVICES可以设置为一个逗号分隔的设备索引列表,用来指定哪些GPU对当前进程可见,并可以改变它们的顺序。设置该环境变量后,CUDA只会识别并使用这些指定的GPU,并重新编号。

    export CUDA_VISIBLE_DEVICES=0,1,2,3
    --------------------------------------------------------------------
    # "0,1":只使物理编号 GPU 0 和 GPU 1 可见。
    # "0,2":使物理编号 GPU 0 和 GPU 2 可见,并将它们重新编号为 0 和 1逻辑编号(顺序从 0 开始)。
    # "1":只使 GPU 1 可见,并将其重新编号为 0。
    
  2. 在CUDA驱动加载时,首先会读取CUDA_VISIBLE_DEVICES环境变量,如果未设置,默认所有GPU都对程序可见,且编号从0开始。设置后,只有该环境变量中指定的GPU会对程序可见,且指定的物理设备会被重新从0开始分配逻辑编号

  3. 在多用户或多任务共享GPU的环境中,可以通过CUDA_VISIBLE_DEVICES为每个任务分配不同的 GPU设备。

    CUDA_VISIBLE_DEVICES=0,1  python task1.py
    CUDA_VISIBLE_DEVICES=2    python task2.py
    
  4. 使用指令查看指定GPU之后的设备可见情况。

    torch.cuda.device_count()
    # torch.cuda.get_device_name(0) 返回 GPU 1 的名称
    

    设备查看

  5. CUDA_VISIBLE_DEVICES仅影响当前进程或脚本的GPU可见性,不会改变系统中其他进程的GPU编号,这种机制在多任务、多用户或多GPU共享的系统中非常有用,可以实现GPU资源的隔离和管理。

小结

通过CUDA_VISIBLE_DEVICES,可以轻松地管理多GPU环境,并且CUDA 驱动对重新编号的GPU提供了一致的逻辑设备索引,不会影响物理设备编号。这种方法简单高效,适用于大多数场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值