1.查看显卡

nvidia-smi

1

GPU:GPU 编号;与实际编号不一定一致
Name:GPU 型号;
Persistence-M:持续模式的状态。持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少,这里显示的是off的状态;
Fan:风扇转速,从0到100%之间变动;
Temp:温度,单位是摄氏度;
Perf:性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能(即 GPU 未工作时为P0,达到最大工作限度时为P12)。
Pwr:Usage/Cap:能耗;
Memory Usage:显存使用率;
Bus-Id:涉及GPU总线的东西
Disp.A:Display Active,表示GPU的显示是否初始化;
Volatile GPU-Util:浮动的GPU利用率;
Uncorr. ECC:Error Correcting Code,错误检查与纠正;
Compute M:compute mode,计算模式

2.间隔查看GPU使用情况

间隔10s刷新信息

watch -n 10 nvidia-smi

间隔5s刷新信息

watch -n 5 nvidia-smi

3.查看当前显卡信息

通过nvidia-smi查看的显卡排序不一定是正确的。可能使用到Torch的以下函数确定当前显卡。
torch.cuda.is_available() # 判断GPU是否可用
torch.cuda.device_count() # 查看可用GPU数量
torch.cuda.current_device() # 当前设备的索引,从0开始
torch.cuda.get_device_name(0) # 返回GPU名字

根据上面的信息,我这里有4个GPU。

>>> import torch
>>> torch.cuda.device_count()
4
>>> torch.cuda.current_device()
0
>>> torch.cuda.get_device_name(0)
'NVIDIA TITAN V'
>>> torch.cuda.get_device_name(1)
'NVIDIA TITAN V'
>>> torch.cuda.get_device_name(2)
'Tesla V100S-PCIE-32GB'
>>> torch.cuda.get_device_name(3)
'Tesla V100S-PCIE-32GB'

4. 使用os指定使用的显卡

上面查询到4个可用GPU信息,但是我们想指定在某张或者某几张显卡上训练网络。
(1)使用os.environ指定要使用的显卡:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = '2,3'

把os.environ[‘CUDA_VISIBLE_DEVICES’]='2,3’放在所有访问GPU的代码之前,否则设置不生效。
假设原来有4张卡,编号为0的是主卡,现在编号为2的是主卡,且每张显卡的默认标号为[0,1]。
(2)将网络放到指定GPU上训练

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = Model()
 
if torch.cuda.device_count() > 1:
    model = nn.DataParallel(model, device_ids=[0,1])
model.to(device)

device_ids=[0,1]里面的0指的是4张显卡里面的第三张,1表示第四张。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐