统计深度学习模型的参数和显存占用(pytorch)

这里介绍两种方法

1、使用相关的库torchsummary

from torchsummary import summary

net=net.to(torch.device("cpu"))#or cuda
summary(net,(4,228,912),device="cpu") #or cuda

统计结果比较详细,参数量、浮点数计算量、中间变量、train的变量数、保持不变的变量数,每一层的中间变量和类型都会详细列出

 

2、使用库thop

from thop import profile
net=net.cuda()
input= torch.ones([1,4,128,128]).cuda()
inputs=[]
inputs.append(input)
flops, params=profile(net,inputs)#,custom_ops={model.ResNet,countModel})
print("flops:{0:,} ".format(flops))
print("parms:{0:,}".format(params))

这个比较简单,最后简单的输出参数量和其中的浮点计算次数

### PyTorch深度学习训练过程中显卡占用100%导致程序卡住的解决方案 在使用PyTorch进行深度学习训练时,可能会遇到显卡占用率达到100%,从而导致程序卡住的情况。这种情况通常发生在分布式训练或多GPU环境中[^4]。 #### 问题分析 当使用`DistributedDataParallel`方式进行一机多卡训练时,如果程序卡住并伴随显卡占用率为100%,可能的原因包括但不限于以下几点: - **数据加载瓶颈**:数据加载速度过慢可能导致某些GPU处于等待状态,而其他GPU则持续工作直至资源耗尽。 - **同步操作过多**:在分布式训练中,频繁的梯度同步或其他全局通信操作会增加延迟,并可能导致部分GPU负载过高。 - **内存分配不合理**:即使指定了特定的GPU设备,但如果初始化或缓存未正确管理,则可能出现不必要的显存消耗[^1]。 #### 解决方案 以下是针对上述情况的具体解决方法: 1. **优化数据加载流程** 使用`torch.utils.data.DataLoader`时,可以通过设置参数来提升效率。例如,启用多个worker线程以加速数据预处理过程: ```python train_loader = torch.utils.data.DataLoader( dataset=train_dataset, batch_size=32, shuffle=True, num_workers=8, # 设置合适的worker数量 pin_memory=True # 提升从CPU到GPU的数据传输速度 ) ``` 2. **减少同步开销** 在`DistributedDataParallel`模式下,默认会在每次前向传播之后立即执行梯度同步。为了降低这一频率,可以调整`synchronization`策略或者引入异步更新机制。此外,在模型定义阶段加入`find_unused_parameters=True`选项有助于识别那些不常使用的参数集,进而避免无意义的同步尝试: ```python model = nn.parallel.DistributedDataParallel(model, find_unused_parameters=True) ``` 3. **合理配置CUDA可见设备** 如果发现第0号GPU总是被优先占用而导致其余空闲GPU无法正常运作,可通过修改环境变量的方式限定可用设备列表,以此绕过潜在冲突源: ```bash export CUDA_VISIBLE_DEVICES="1,2" python main.py ``` 4. **监控与调试工具的应用** 利用NVIDIA提供的性能分析器(如Nsight Systems/Compute)以及PyTorch内置诊断功能定位具体瓶颈所在。这些工具有助于揭示哪些函数调用了最多的计算时间及资源份额。 5. **硬件选型建议** 对于大规模集群部署场景而言,选用专门设计用于高性能AI运算的产品系列能够显著改善整体表现。比如Tesla V100/A100这类支持NVLink互联技术的型号可以在跨节点间实现更高效的带宽利用率;而对于超千级规模实例阵列来说,则推荐考虑集成化程度更高的解决方案像DGX A100 SuperPOD系统[^3]。 通过以上措施综合应对,大多数因显卡高负荷引发的问题都能得到有效缓解甚至彻底消除。 ```python import os os.environ['CUDA_LAUNCH_BLOCKING'] = '1' # 开启逐层调试模式便于排查异常 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值