没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
16页
kaggle竞赛宝典,机器学习,人工智能咨询,kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询
资源推荐
资源详情
资源评论
优化PyTorch速度和内存效率的技巧汇总
深度学习模型的训练/推理过程涉及很多步骤。在有限的时间和资源条件下,
每个迭代的速度越快,整个模型的预测性能就越快。我收集了几个PyTorch技
巧,以最大化内存使用效率和最小化运行时间。为了更好地利用这些技巧,我
们还需要理解它们如何以及为什么有效。
我首先提供一个完整的列表和一些代码片段,这样你就可以开始优化你的脚本
了。然后我一个一个地详细地研究它们。对于每个技巧,我还提供了代码片段
和注释,告诉你它是特定于设备类型(CPU/GPU)还是模型类型。
列表:
数据加载
1、把数据放到SSD中
2、Dataloader(dataset, num_workers=4*num_GPU)
3、Dataloader(dataset, pin_memory=True)
数据操作
4、直接在设备中创建torch.Tensor,不要在一个设备中创建再移动到另
一个设备中
5、避免CPU和GPU之间不必要的数据传输
6、使用torch.from_numpy(numpy_array)或者torch.as_tensor(ot
hers)
7、在数据传输操作可以重叠时,使用tensor.to(non_blocking=True)
8、使用PyTorch JIT将元素操作融合到单个kernel中。
模型结构
9、在使用混合精度的FP16时,对于所有不同架构设计,设置尺寸为8的倍
数
训练
10、将batch size设置为8的倍数,最大化GPU内存的使用
11、前向的时候使用混合精度(后向的使用不用)
12、在优化器更新权重之前,设置梯度为None,model.zero_grad(set
_to_none=True)
13、梯度积累:每隔x个batch更新一次权重,模拟大batch size的效果
推理/验证
14、关闭梯度计算
CNN (卷积神经网络) 特有的
15、torch.backends.cudnn.benchmark = True
16、对于4D NCHW Tensors,使用channels_last的内存格式
17、在batch normalization之前的卷积层可以去掉bias
分布式
18、用DistributedDataParallel代替DataParallel
第7、11、12、13的代码片段
# Combining the tips No.7, 11, 12, 13: nonblocking, AMP, set
ting
# gradients as None, and larger effective batch size
model.train()
# Reset the gradients to None
optimizer.zero_grad(set_to_none=True)
scaler = GradScaler()
for i, (features, target) in enumerate(dataloader):
# these two calls are nonblocking and overlapping
features = features.to('cuda:0', non_blocking=True)
target = target.to('cuda:0', non_blocking=True)
# Forward pass with mixed precision
with torch.cuda.amp.autocast(): # autocast as a context
manager
output = model(features)
loss = criterion(output, target)
# Backward pass without mixed precision
# It's not recommended to use mixed precision for backwa
rd pass
# Because we need more precise loss
scaler.scale(loss).backward()
# Only update weights every other 2 iterations
# Effective batch size is doubled
if (i+1) % 2 == 0 or (i+1) == len(dataloader):
# scaler.step() first unscales the gradients .
# If these gradients contain infs or NaNs,
# optimizer.step() is skipped.
scaler.step(optimizer)
# If optimizer.step() was skipped,
# scaling factor is reduced by the backoff_factor
# in GradScaler()
scaler.update()
# Reset the gradients to None
optimizer.zero_grad(set_to_none=True)
指导思想
总的来说,你可以通过3个关键点来优化时间和内存使用。首先,尽可能减少i
/o(输入/输出),使模型管道更多的用于计算,而不是用于i/o(带宽限制或内存
限制)。这样,我们就可以利用GPU及其他专用硬件来加速这些计算。第二,
尽量重叠过程,以节省时间。第三,最大限度地提高内存使用效率,节约内存
。然后,节省内存可以启用更大的batch
剩余15页未读,继续阅读
资源评论
毕业小助手
- 粉丝: 2231
- 资源: 4366
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IMG_20240618_233326.jpg
- 小程序版基于人工智能的卷积网络训练识别书法字体分类-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版CNN图像分类识别面食分类-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版基于深度学习识别厨余垃圾-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版基于卷积神经网络识别季节性水果分类-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版基于卷积神经网络识别食物类别-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版基于深度学习识别4种水果-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版图像分类算法对珠宝首饰分类识别-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版通过CNN训练识别家具-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版通过CNN训练识别衣物纹样分类-不含数据集图片-含逐行注释和说明文档.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功