使用Google Colab Pro训练模型并且使用distiller进行模型优化

  • Google Colab Pro
  • Colab Pro基本使用
  • Distiller的下载与环境配置(Colab中)
  • Distiller 提供的功能以及使用distiller自带深度学习网络模型训练数据
  • 数据集的上传
  • 模型训练
  • 模型评估

Google Colab Pro

由于已有的机器GPU和内存不给力,这里尝试过了阿里云和Google的Colab,阿里云可以提供很好的算力,但比较贵,所以最后选择了Google的Colab,并且挂US的VPN花9.9刀开了一个月的Pro版本,真的香,无论是通过Google driver 直接拖拽上传到云端文件还是GPU和TPU的算力,不得不感慨这9.9刀花的很值。(不是广告hhh)

Colab Pro基本使用

首先是可以看到在colab中可以添加一行行代码(linux指令需要在最前面加上感叹号!)Ctrl+Enter 可以快速运行单行代码,并且将代码结果在下面运行框中保存显示。
左侧圈出来的小文件夹就是谷歌云盘的链接可以随时上传下载文件,为了防止文件丢失,尽量将运行的程序保存到driver文件之中,也就是云盘当中,开了pro之后会为你提供32g的内存和200g的容量,优先分配GPU和TPU基本可以满足一切需求。

Distiller的下载与环境配置(Colab中)

Distiller 是一个非常好用的深度学习网络模型分析优化框架,提供了针对于网络模型各个方面的分析优化工具以及包含了已有的大部分网络模型,本文中简单对squeezenet1_1使用其训练tiny_imagenet_200以及对模型的两个方向上的优化,sensitivity优化和distiller提供的AGP优化

首先git克隆distiller代码到自己的driver文件下

cd driver
cd  My driver

进入到云盘,不要直接克隆在根目录,否则重新分配内存后会被删掉

!git clone https://github.com/NervanaSystems/distiller.git


然后首先安装virtualenv使用pip3

!pip3 install virtualenv

virtualenv 是为了后面创建虚拟环境


安装好virtualenv 之后使用如下代码创建名为env的虚拟环境:

!python3 -m virtualenv env


激活名为env的虚拟环境:

!source env/bin/activate


进入distiller文件中:

cd distiller


配置distiller所需环境变量(一定要在distiller文件中):

!pip3 install -e .

如果报错就重新运行一遍,然后就ok

Distiller 提供的功能以及使用distiller自带深度学习网络模型训练数据


配置好环境以后我们进入到examples/classifier_compression/(distiller主要功能便是在此运行实现):

cd examples/classifier_compression/


查看distiller提供的的函数功能:

!python compress_classifier.py -h

下面就是distiller的使用语法,

usage: compress_classifier.py [-h] [–arch ARCH] [-j N] [–epochs N] [-b N]
[–lr LR] [–momentum M] [–weight-decay W]
[–print-freq N] [–verbose]
[–resume-from PATH | --exp-load-weights-from PATH]
[–pretrained] [–reset-optimizer] [-e]
[–activation-stats PHASE [PHASE …]]
[–activation-histograms PORTION_OF_TEST_SET]
[–masks-sparsity] [–param-hist]
[–summary {sparsity,compute,model,modules,png,png_w_params}]
[–export-onnx [EXPORT_ONNX]]
[–compress [COMPRESS]]
[–sense {element,filter,channel}]
[–sense-range SENSITIVITY_RANGE SENSITIVITY_RANGE SENSITIVITY_RANGE]
[–deterministic] [–seed SEED] [–gpus DEV_ID]
[–cpu] [–name NAME] [–out-dir OUTPUT_DIR]
[–validation-split VALIDATION_SPLIT]
[–effective-train-size EFFECTIVE_TRAIN_SIZE]
[–effective-valid-size EFFECTIVE_VALID_SIZE]
[–effective-test-size EFFECTIVE_TEST_SIZE]
[–confusion]
[–num-best-scores NUM_BEST_SCORES]
[–load-serialized] [–thinnify]
[–quantize-eval] [–qe-mode QE_MODE]
[–qe-mode-acts QE_MODE_ACTS]
[–qe-mode-wts QE_MODE_WTS]
[–qe-bits-acts NUM_BITS]
[–qe-bits-wts NUM_BITS]
[–qe-bits-accum NUM_BITS]
[–qe-clip-acts QE_CLIP_ACTS]
[–qe-clip-n-stds QE_CLIP_N_STDS]
[–qe-no-clip-layers LAYER_NAME [LAYER_NAME …]]
[–qe-no-quant-layers LAYER_NAME [LAYER_NAME …]]
[–qe-per-channel]
[–qe-scale-approx-bits NUM_BITS]
[–qe-save-fp-weights] [–qe-convert-pytorch]
[–qe-pytorch-backend {fbgemm,qnnpack}]
[–qe-stats-file PATH | --qe-dynamic | --qe-calibration PORTION_OF_TEST_SET | --qe-config-file PATH]
[–qe-lapq] [–lapq-maxiter LAPQ_MAXITER]
[–lapq-maxfev LAPQ_MAXFEV]
[–lapq-method LAPQ_METHOD]
[–lapq-basinhopping]
[–lapq-basinhopping-niter LAPQ_BASINHOPPING_NITER]
[–lapq-init-mode LAPQ_INIT_MODE]
[–lapq-init-method LAPQ_INIT_METHOD]
[–lapq-eval-size LAPQ_EVAL_SIZE]
[–lapq-eval-memoize-dataloader]
[–lapq-search-clipping]
[–save-untrained-model]
[–earlyexit_lossweights [EARLYEXIT_LOSSWEIGHTS [EARLYEXIT_LOSSWEIGHTS …]]]
[–earlyexit_thresholds [EARLYEXIT_THRESHOLDS [EARLYEXIT_THRESHOLDS …]]]
[–kd-teacher ARCH] [–kd-pretrained]
[–kd-resume PATH] [–kd-temperature TEMP]
[–kd-distill-wt WEIGHT]
[–kd-student-wt WEIGHT]
[–kd-teacher-wt WEIGHT]
[–kd-start-epoch EPOCH_NUM] [–greedy]
[–greedy-ft-epochs GREEDY_FT_EPOCHS]
[–greedy-target-density GREEDY_TARGET_DENSITY]
[–greedy-pruning-step GREEDY_PRUNING_STEP]
[–greedy-finetuning-policy {constant,linear-grow}]
DATASET_DIR

如下是可以直接在distiller中调用的网络模型,我们可以看到基本涵盖了已有的所有比较常见的模型

optional arguments:
-h, --help show this help message and exit
–arch ARCH, -a ARCH model architecture: alexnet | alexnet_bn | bninception
| cafferesnet101 | densenet121 | densenet161 |
densenet169 | densenet201 | dpn107 | dpn131 | dpn68 |
dpn68b | dpn92 | dpn98 | fbresnet152 | googlenet |
inception_v3 | inceptionresnetv2 | inceptionv3 |
inceptionv4 | mnasnet0_5 | mnasnet0_75 | mnasnet1_0 |
mnasnet1_3 | mobilenet | mobilenet_025 | mobilenet_050
| mobilenet_075 | mobilenet_v1_dropout | mobilenet_v2
| nasnetalarge | nasnetamobile | plain20_cifar |
plain20_cifar_nobn | pnasnet5large | polynet |
preact_resnet101 | preact_resnet110_cifar |
preact_resnet110_cifar_conv_ds | preact_resnet152 |
preact_resnet18 | preact_resnet20_cifar |
preact_resnet20_cifar_conv_ds | preact_resnet32_cifar
| preact_resnet32_cifar_conv_ds | preact_resnet34 |
preact_resnet44_cifar | preact_resnet44_cifar_conv_ds
| preact_resnet50 | preact_resnet56_cifar |
preact_resnet56_cifar_conv_ds | resnet101 |
resnet110_cifar_earlyexit | resnet1202_cifar_earlyexit
| resnet152 | resnet18 | resnet20_cifar |
resnet20_cifar_earlyexit | resnet32_cifar |
resnet32_cifar_earlyexit | resnet34 | resnet44_cifar |
resnet44_cifar_earlyexit | resnet50 |
resnet50_earlyexit | resnet56_cifar |
resnet56_cifar_earlyexit | resnext101_32x4d |
resnext101_32x8d | resnext101_64x4d | resnext50_32x4d
| se_resnet101 | se_resnet152 | se_resnet50 |
se_resnext101_32x4d | se_resnext50_32x4d | senet154 |
shufflenet_v2_x0_5 | shufflenet_v2_x1_0 |
shufflenet_v2_x1_5 | shufflenet_v2_x2_0 |
simplenet_cifar | simplenet_mnist | simplenet_v2_mnist
| squeezenet1_0 | squeezenet1_1 | vgg11 | vgg11_bn |
vgg11_bn_cifar | vgg11_cifar | vgg13 | vgg13_bn |
vgg13_bn_cifar | vgg13_cifar | vgg16 | vgg16_bn |
vgg16_bn_cifar | vgg16_cifar | vgg19 | vgg19_bn |
vgg19_bn_cifar | vgg19_cifar | wide_resnet101_2 |
wide_resnet50_2 | xception (default: resnet18)

数据集的上传

这里我使用的是tiny_imagenet_200数据集链接是
http://www.image-net.org/image/tiny/tiny-imagenet-200.zip
自行下载后可以直接拖拽到My driver 中(左侧小文件标致)

一定要放在和distiller同一文件下

模型训练

使用distiller自带的squeezenet1_1:
lr:学习率
-p:打印频率
-j:数据loader1-4
–epoch:训练轮数
这里你也可以将squeezenet1_1替换为自己的网络模型文件或者上文中提到的所有自带的网络例如resnet101

!python3 compress_classifier.py -a squeezenet1_1 ../../../tiny-imagenet-200 -p 10 -j=1  --lr=0.02 --epochs 10

然后运行可以看到速度很快,一轮下来加上反馈时间总共几十秒


同时还会将模型数据分析存在log文件当中

模型评估

这里训练完成会生成log文件模型评估时候一定要将log文件中的checkpoint.pth.tar文件用来评估:
–resume-from …/…/examples/classifier_compression/logs/2020.10.28-122858/checkpoint.pth.tar
这里是我的训练完成后chekpoint的位置自己的chekpoint可以在上面训练结束后找到

!python3 compress_classifier.py -a squeezenet1_1 ../../../tiny-imagenet-200 -p 10 --resume-from ../../examples/classifier_compression/logs/2020.10.28-122858/checkpoint.pth.tar --evaluate

然后运行可以看到评估结果了

使用Google Colab Pro训练模型并且使用distiller进行模型优化相关推荐

  1. 别再买云服务器了,快来白嫖谷歌的GPU(TPU)!!(使用Google Colab notebook 跑机器学习、深度学习模型)

    前提条件: 要有梯子 用谷歌浏览器 谷歌浏览器是登录着你的谷歌账号的 点击链接 colab:https://colab.research.google.com/notebooks/welcome.ip ...

  2. 基于Colab Pro Google Drive的Kaggle实战

    原文:https://hippocampus-garden.com/kaggle_colab/ 原文标题:How to Kaggle with Colab Pro & Google Drive ...

  3. 【深度学习】基于Colab Pro的TPU训练模型教程(Tensorflow)

    [深度学习]基于Colab Pro的TPU训练模型教程(Tensorflow) 文章目录 1 概述 2 对比 TPU 与 GPU 的计算速度 3 总结和简易的测试代码 4 为什么使用 TPU 1 概述 ...

  4. google colab 训练模型时,第一轮为什么非常慢

    google colab 训练模型时,第一轮为什么非常慢,怎么解决 感谢这位老兄: https://www.xiaoheidiannao.com/249953.html 我在这里找到了解决方案 一开始 ...

  5. 【亲测】跑深度学习模型:笔记本的RTX3060 6G vs Google colab免费GPU 速度比较

    简单测评 笔记本:thinkbook16p RTX3060标配 模型是FCN,跑的小数据集, 用的tensorflow 同样的数据和模型参数,我们来看看在两块GPU上的表现如何吧: 1.本地 RTX3 ...

  6. Google Colab, Kaggle

    目录 Colab 介绍 Colab 工作流程 新建笔记本 载入笔记本 设置笔记本的运行时类型 执行代码块 加载数据集 运行 Github 项目 Kaggle Public API Installati ...

  7. 用 Python 使用 Google Colab?岂止是炫酷

    选自Medium 作者:Towards AI Team 机器之心编译 机器之心编辑部 Google Colab 是一个免费的 Jupyter 环境,用户可以用它创建 Jupyter notebook, ...

  8. 20 种小技巧,玩转 Google Colab

    选自 | amitness.com 作者 | Amit Chaudhary 转自 | 机器之心 编辑 | 陈萍 Google Colab 给广大的 AI 开发者提供了免费的 GPU,你可以在上面轻松地 ...

  9. 独家 | 教你使用Keras on Google Colab(免费GPU)微调深度神经网络

    作者:LONG ANG 翻译:闫晓雨 校对:丁楠雅 本文约2300字,建议阅读7分钟. 本文将指导您如何使用Google上的Keras微调VGG-16网络. 简介 在CPU上训练深度神经网络很困难.本 ...

最新文章

  1. 基于SOA分布式架构的dubbo框架基础学习篇
  2. Python 一种接触就容易爱上的语言二
  3. css3中的多列布局columns详解
  4. 向银行贷款20万, 分期三年买50万的车,个人借款40万, 贷款10年买200万的房子,再贷款120万分创业...
  5. LeetCode 1161. 最大层内元素和(层序遍历)
  6. Linux下设置普通用户使用sudo命令
  7. Atitit.故障排除系列---NoClassDefFoundError NoClassDefFoundError
  8. 计算机卡慢解决方法,电脑慢的快速解决办法 四种方法电脑速度变快10倍
  9. CAD注册机注册码不能正常使用,解决方案
  10. k-近邻算法的优缺点及拓展思考
  11. pysam筛选reads写bam
  12. 金融直播营销,主播必须这样做!
  13. 基于Kubernetes构建企业容器云
  14. Mysql时区差异异常-The server time zone value ‘xxx‘ is unrecognized or represents more than one time zone.
  15. Akka(二):使用Akka模拟yarn
  16. 曾遭作者“删库”的faker.js,现被社区接手;Apache Ambari 项目被弃用;FFmpeg 5.0 发布 | 开源日报
  17. 2017华为软件精英挑战赛小结
  18. S-function的使用
  19. 深入理解Java内存模型——volatile
  20. 洗衣液洗衣粉可以上飞机吗

热门文章

  1. 指针和地址之间的关系是什么?
  2. linux shell 入门学习笔记3 shebang
  3. Word表格跨页/翻页有边框,去除(>^ω^<)
  4. 【CTF资料-0x0002】PWN简易Linux堆利用入门教程by arttnba3
  5. Android经典项目案例开发实战宝典
  6. 【IPC通信】key_t键和ftok函数
  7. 怎么删除w7桌面计算机图标,桌面无法删除的图标,小编教你win7桌面图标删不掉怎么办...
  8. 攻防世界新手区MISC-如来十三掌
  9. 未来计算机的发展英文文章,计算机的现状和未来计算机发展(The status quo of computers and future computer development).doc...
  10. MATLAB制作扇形图及颜色调配