Windows下Pytorch训练gpu占用率过低的问题

在尝试使用个人电脑进行训练时遇到CPU和GPU过热问题,调整PytorchDataLoader的num_workers和pin_memory参数,发现num_workers设为2时出现错误,只能设为0。了解到在Linux系统中可以支持多个子进程加载数据,而Windows不支持。最终决定改用公司服务器进行训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用自己电脑跑训练,发现以下问题,cpu冒大烟,gpu抽大烟,动都不带动一下。

查了很多,基本围绕num_workers, pin_memory。其中pin_memory设置了true,num_workers到2就broken pipe,只能设置0。

后来才知道!linux系统中可以使用多个子进程加载数据,windows系统里是不可以的

参考Pytorch DataLoader中的num_workers (选择最合适的num_workers值)_dataloader num_workers_堇禤的博客-优快云博客

准备用公司服务器跑了,自己电脑果然只能测通和不通。

### 提高PyTorch程序的GPU利用率的方法 在处理PyTorch中的GPU利用率较问题时,可以从多个方面入手优化。以下是几个关键策略: #### 1. 调整数据加载方式 如果数据加载成为瓶颈,则可能会导致GPU闲置时间增加。因此,建议使用`DataLoader`并启用多线程数据预取功能以加速数据传输过程[^1]。 ```python train_loader = torch.utils.data.DataLoader( dataset=train_dataset, batch_size=64, shuffle=True, num_workers=8, # 使用更多CPU核心来加快数据准备速度 pin_memory=True # 将数据复制到页锁定内存中,从而更快地传递给GPU ) ``` #### 2. 设置可见的GPU设备数量 当需要控制具体哪些GPU被用于计算任务时,可以通过环境变量`CUDA_VISIBLE_DEVICES`指定可用的GPU列表。这有助于合理分配硬件资源,并减少不必要的竞争[^2]。 ```python import os os.environ['CUDA_VISIBLE_DEVICES'] = '0,3' # 只允许访问第0号和第3号GPU ``` #### 3. 手动管理显存缓存 为了防止因显存不足而导致性能下降,在适当时候调用`torch.cuda.empty_cache()`函数清理未使用的缓存空间是非常必要的措施之一[^3]。 ```python if torch.cuda.is_available(): device = torch.device('cuda') else: device = torch.device('cpu') model.to(device) for epoch in range(num_epochs): ... del inputs, targets, outputs, loss # 删除不再需要的对象 if torch.cuda.is_available(): torch.cuda.empty_cache() # 清理掉无用的临时张量占用的空间 ``` 通过上述方法的应用,能够有效提升PyTorch应用程序运行期间对于图形处理器的有效利用效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值