前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch自动混合精度训练模板

Pytorch自动混合精度训练模板

作者头像
致Great
发布2023-08-25 13:16:04
2970
发布2023-08-25 13:16:04
举报
文章被收录于专栏:程序生活

GitHub 仓库地址:https://github.com/yanqiangmiffy/amp-pytorch

Pytorch自动混合精度训练模板

使用 pytorch 的自动混合精度教程。基于 PyTorch 1.6 Official Features (Automatic Mixed Precision) ,使用自定义数据集实现分类代码库

1 实验设置

1.1 环境设置

代码语言:javascript
复制
- Pytorch>=1.6.0 支持CUDA
- 本地实验环境为:RTX 3090 24G

1.2 下载数据集 Kaggle 英特尔图像分类 数据集地址:Intel Image Classification

该数据包含大约 25k 张大小为 150x150 的图像,分布在 6 个类别下。 {‘建筑物’ -> 0, ‘森林’ -> 1, ‘冰川’ -> 2, ‘山’ -> 3, ‘海’ -> 4, ‘街道’ -> 5 }

数据集解压直接放在data目录下

代码语言:javascript
复制
data:
    seg_pred
    seg_test
    seg_train

2 Baseline训练

实验设置:

  • ImageNet Pretrained ResNet-18 from torchvision.models
  • Batch Size 256 / Epochs 120 / Initial Learning Rate 0.0001
  • Training Augmentation: Resize((256, 256)), RandomHorizontalFlip()
  • Adam + Cosine Learning rate scheduling with warmup

运行命令

代码语言:javascript
复制
python main.py --checkpoint_name baseline

3 混合精度训练

未使用混合精度训练:

代码语言:javascript
复制
for batch_idx, (inputs, labels) in enumerate(data_loader):
  self.optimizer.zero_grad()

  outputs = self.model(inputs)
  loss = self.criterion(outputs, labels)

  loss.backward()
  self.optimizer.step()

使用混合精度训练

代码语言:javascript
复制
scaler = torch.cuda.amp.GradScaler()

for batch_idx, (inputs, labels) in enumerate(data_loader):
  self.optimizer.zero_grad()

  with torch.cuda.amp.autocast():
    outputs = self.model(inputs)
    loss = self.criterion(outputs, labels)

  # Scales the loss, and calls backward() 
  # to create scaled gradients 
  self.scaler.scale(loss).backward()

  # Unscales gradients and calls 
  # or skips optimizer.step() 
  self.scaler.step(self.optimizer)

  # Updates the scale for next iteration 
  self.scaler.update()

运行命令

代码语言:javascript
复制
python main.py --checkpoint_name baseline_amp --amp;

4 实验性能

B : Baseline (FP32) AMP : Automatic Mixed Precision Training (AMP)

Algorithm

Test Accuracy

GPU Memory

Total Training Time

B - 3090 Ti

94.17

13.0G

(44s*20epochs)~=15mins

AMP - 3090 Ti

94.23

10.6G

(33s*20eochs)~=11mins

5 代码参考

  • automatic-mixed-precision-tutorials-pytorch:https://github.com/hoya012/automatic-mixed-precision-tutorials-pytorch

代码主要来自该仓库,作者实现以及项目代码很完善了,主要将其拆分出来,可以灵活应用

  • Baseline Code: https://github.com/hoya012/carrier-of-tricks-for-classification-pytorch
  • Gradual Warmup Scheduler: https://github.com/ildoonet/pytorch-gradual-warmup-lr
  • PyTorch Automatic Mixed Precision: https://pytorch.org/docs/stable/notes/amp_examples.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 实验设置
  • 2 Baseline训练
  • 3 混合精度训练
  • 4 实验性能
  • 5 代码参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档