找回密码
 会员注册
查看: 30|回复: 0

查看、指定使用的GPU数量和编号

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-12 16:21:21 | 显示全部楼层 |阅读模式
在使用PyTorch框架时,可以通过以下步骤查看可用的GPU数量,指定使用的GPU编号,并在代码中体现这一点。下面以2个GPU为例:目录一、脚本代码块实现1.查看可用的GPU2.指定使用GPU的数量和编号使用`CUDA_VISIBLE_DEVICES`环境变量将模型和数据移动到指定的GPU使用`DataParallel`进行多GPU并行计算3.示例完整代码二、命令行实现1.使用`CUDA_VISIBLE_DEVICES`环境变量只使用GPU0使用GPU0和GPU12.在Python代码中自动检测可用GPU3.结合`CUDA_VISIBLE_DEVICES`和PyTorch代码一、脚本代码块实现1.查看可用的GPUimporttorchiftorch.cuda.is_available():num_gpus=torch.cuda.device_count()print(f"AvailableGPUs:{num_gpus}")foriinrange(num_gpus):print(f"GPU{i}:{torch.cuda.get_device_name(i)}")else:print("NoGPUsavailable")1234567892.指定使用GPU的数量和编号在PyTorch中,可以通过以下几种方法来指定使用的GPU。使用CUDA_VISIBLE_DEVICES环境变量可以在代码中设置环境变量来指定使用的GPU:importos#只使用GPU0和GPU1os.environ["CUDA_VISIBLE_DEVICES"]="0,1"importtorch#检查可用的GPUiftorch.cuda.is_available():num_gpus=torch.cuda.device_count()print(f"AvailableGPUs:{num_gpus}")foriinrange(num_gpus):print(f"GPU{i}:{torch.cuda.get_device_name(i)}")else:print("NoGPUsavailable")123456789101112131415将模型和数据移动到指定的GPU可以将模型和数据移动到指定的GPU。例如:importtorch#检查是否有GPU可用iftorch.cuda.is_available():#将模型移动到GPU0device0=torch.device('cuda:0')model=MyModel().to(device0)#将数据移动到GPU1device1=torch.device('cuda:1')data=data.to(device1)else:device=torch.device('cpu')model=MyModel().to(device)data=data.to(device)123456789101112131415使用DataParallel进行多GPU并行计算可以使用torch.nn.DataParallel来让模型在多个GPU上并行运行:importtorchimporttorch.nnasnn#假设模型已经定义好model=MyModel()iftorch.cuda.is_available():#使用DataParallel并行运行在多个GPU上model=nn.DataParallel(model,device_ids=[0,1])model=model.cuda()else:device=torch.device('cpu')model=model.to(device)123456789101112133.示例完整代码以下是一个完整的示例,演示了如何在PyTorch中查看GPU数量、指定使用GPU,并在代码中体现:importosimporttorchimporttorch.nnasnn#设置使用的GPUos.environ["CUDA_VISIBLE_DEVICES"]="0,1"#查看可用的GPUiftorch.cuda.is_available():num_gpus=torch.cuda.device_count()print(f"AvailableGPUs:{num_gpus}")foriinrange(num_gpus):print(f"GPU{i}:{torch.cuda.get_device_name(i)}")else:print("NoGPUsavailable")#定义模型classMyModel(nn.Module):def__init__(self):super(MyModel,self).__init__()self.layer=nn.Linear(10,10)defforward(self,x):returnself.layer(x)model=MyModel()#将模型移动到GPUiftorch.cuda.is_available():model=nn.DataParallel(model,device_ids=[0,1])model=model.cuda()#示例数据data=torch.randn(5,10).cuda()#前向传播output=model(data)print(output)1234567891011121314151617181920212223242526272829303132333435363738在命令行中,可以使用环境变量CUDA_VISIBLE_DEVICES来指定使用的GPU数量和编号。这种方法对PyTorch非常有效。以下是详细步骤:二、命令行实现1.使用CUDA_VISIBLE_DEVICES环境变量在运行Python脚本时,通过设置CUDA_VISIBLE_DEVICES环境变量来指定哪些GPU可见。例如:只使用GPU0CUDA_VISIBLE_DEVICES=0pythonmain.py1使用GPU0和GPU1CUDA_VISIBLE_DEVICES=0,1pythonmain.py12.在Python代码中自动检测可用GPU在Python代码中,可以自动检测可用的GPU,并根据需要配置模型和数据。以下是示例代码:importtorchdefprint_available_gpus():iftorch.cuda.is_available():num_gpus=torch.cuda.device_count()print(f"AvailableGPUs:{num_gpus}")foriinrange(num_gpus):print(f"GPU{i}:{torch.cuda.get_device_name(i)}")else:print("NoGPUsavailable")defmain():#打印可用的GPUprint_available_gpus()#使用第一个可用的GPUdevice=torch.device('cuda:0'iftorch.cuda.is_available()else'cpu')print(f"Usingdevice:{device}")#示例模型和数据model=MyModel().to(device)data=torch.randn(10,3,224,224).to(device)#示例数据#示例训练循环forepochinrange(10):#假设dataloader是你的数据加载器forbatchindataloader:inputs,labels=batchinputs,labels=inputs.to(device),labels.to(device)outputs=model(inputs)#其余训练步骤...if__name__=="__main__":main()123456789101112131415161718192021222324252627282930313233343.结合CUDA_VISIBLE_DEVICES和PyTorch代码通过在命令行中设置CUDA_VISIBLE_DEVICES环境变量,并在代码中使用torch.cuda相关的方法,可以确保你的脚本只使用指定的GPU。例如,在命令行中设置环境变量后运行脚本:CUDA_VISIBLE_DEVICES=0,1pythonmain.py1然后在Python脚本中:importtorchdefmain():#检查可用的GPUiftorch.cuda.is_available():num_gpus=torch.cuda.device_count()print(f"Using{num_gpus}GPUs")foriinrange(num_gpus):print(f"GPU{i}:{torch.cuda.get_device_name(i)}")else:print("NoGPUsavailable,usingCPU")#使用第一个可用的GPUdevice=torch.device('cuda:0'iftorch.cuda.is_available()else'cpu')print(f"Usingdevice:{device}")#示例模型和数据model=MyModel().to(device)data=torch.randn(10,3,224,224).to(device)#示例数据#示例训练循环forepochinrange(10):#假设dataloader是你的数据加载器forbatchindataloader:inputs,labels=batchinputs,labels=inputs.to(device),labels.to(device)outputs=model(inputs)#其余训练步骤...if__name__=="__main__":main()12345678910111213141516171819202122232425262728293031
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 14:11 , Processed in 0.400676 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表