关于Green AI
上一篇文章提到了模型不环保这个话题。这篇文章就这个问题展开唠叨一下。
自从BERT, GPT此类的大型模型诞生以来,小作坊们除了把pre-trained的模型拿过来微调一下,就束手无策了,因为成本实在是太高,实在不宜重现。而大型网络继续扩大,似乎并没有停下脚步,模型计算量的增加速度大大超过了摩尔定律。我们惊叹于AlphaGo的能力的时候,可能不知道它一小时的cost是一千美刀,训练cost更是高达几千万美刀,这是根据tpu, gpu的租用成本算出来的,与人力研究成本无关。有学者指出,训练出一个大型深度模型的二氧化碳排放,可相当于五辆汽车的终生二氧化碳排放量。
可实际上,人的大脑在处理事情的时候,是以高效节能著称。大脑在处理一件比较复杂的事情,在不太熟悉的时候,大脑需要消耗比较大的能量,之后处理类似事情所需要的能量越来越少,甚至最后无意识下就已经处理好了。
对于人工智能, 扩大网络,增加计算复杂度,真的是AI的方向吗?很多学者提出了质疑。
近几年对于AI的绿色环保问题也越来越多的引起关注。
根据数据统计,在云端,关于机器学习计算负载,20%是训练,而80%的是模型的使用(预测,归类,推断。。。)。
从这个数据来说,对于AI的环保节能,提高模型使用效率似乎潜在的贡献更大。当然模型使用效率对于商业需求来说,更加的紧迫。模型的计算量大,意味着延时大,硬件要求高,成本大。环保节能和商业需求一致,也算是一个好消息。
很多企业也积极公布自己的节能预测good practice。之前提到过的Roblox的一篇blog,谈论如何在cpu上每天做1b个基于预测。https://blog.roblox.com/2020/05/scaled-bert-serve-1-billion-daily-requests-cpus/ 其中用到了distillBert(压缩的模型), 缓存等方法来提高预测吞吐量。
很多企业,由于软件基础架构的限制,使得模型训练平台不适用于产品平台,因此必须引入适合于产品平台的模型预测框架。对于采用什么预测平台,对于最终的预测效率会有很大的影响。如何给模型feed数据? batch怎么设计? 为了避免频繁padding浪费资源,可能需要把大小差不多的数据放在一个batch里。细节可能决定成败。
之前做一个项目,在实验室里对于第一版的模型进行调试的时候,发现数据预处理和后处理所需要的时间居然和深度模型本身的计算时间差不多,真是大大吃了一惊。很多的Data Scientist们往往只注重模型的架构和模型最终的准确度,而数据处理往往跟着感觉走,对了就行,但到最后,常常就是这些细节阻止了模型上线。当很多的pre-trained的模型可以使用时,数据处理慢慢成为机器学习工程师们的主要工作部分。pre-trained的模型往往是经过优化的,复杂的计算是用c实现的,而用python做的数据处理如果不注意,用错数据类型,就会掉进之前提到的陷阱。之前quora上有人提到,机器学习模型,合理的代码量和运行时间分配比例是,90%以上的代码是python写的,而90%以上的时间是跑在c上面的。推荐一篇文章,关于深度模型部署的good practice: https://towardsdatascience.com/an-empirical-approach-to-speedup-your-bert-inference-with-onnx-torchscript-91da336b3a41
那么对于模型训练的环保节能,有什么好的实践可以借鉴呢,或者好的方向可以深入研究呢?我觉得,transfer learning, meta learning和模型压缩,都可以说对机器学习的环保节能做了很大贡献。
transfer learning充分使用了已经训练过的模型,不管是模型的整体微调,或者叠加简单层再训练,都可谓站在巨人的肩膀上,在保证质量的同时,大大减少了训练时间和成本。很多企业和研究机构共享了成功模型,使得这个方向越来越普及。
我们知道,决定一个模型训练成本的一个重要因素,是算法的网络结构复杂度,参数的多少(计算量为o)。但超参数,hyperparameter也是不容忽视的。特别是当超参数的数量变大(n个参数),取值空间变大的时候(m个取值),那所做的贡献是相当的可观。总的计算量是n*m*o。meta learning的motivation就是要有效的缩小超参数的探索空间。而在实验室跑实验的时候,很多的机器学习工程师或研究人员们有这个习惯,这个超参数该怎么取值呢?让实验告诉我们吧,先跑几天看看。但如果稍微分析一下,会发现,有些取值根本没必要让实验告诉我们。meta learning的一个贡献就是让这个分析自动化。
模型压缩,从字面上就可以看出,这是直奔节能环保而去。但压缩的方向有很多,比如说节点修剪,降低计算精度,知识蒸馏等。
除此之外,Green AI还呼吁,当研究人员在发布一个实验结果的时候,并不仅仅是发布好的实验结果,那些不好的结果也是非常重要的,因为可以提醒大家,这些都已经研究过了,不要再浪费资源在这方向上了。
除了文中提到的文章,再推荐几个这个话题的有趣阅读。
关于alphago的cost:
https://www.yuzeh.com/data/agz-cost.html
关于深度模型训练的能耗:
https://www.technologyreview.com/2019/06/06/239031/training-a-single-ai-model-can-emit-as-much-carbon-as-five-cars-in-their-lifetimes/
论文Green AI
https://arxiv.org/abs/1907.10597
阅读作者更多原创,关注微信公众号:

关于Green AI的更多相关文章
- [個人紀錄] git 設定
-- git history git config --global alias.history=log --graph --all --pretty=format:'%C(bold blue)%H% ...
- (转)How Transformers Work --- The Neural Network used by Open AI and DeepMind
How Transformers Work --- The Neural Network used by Open AI and DeepMind Original English Version l ...
- Python 百度ai身份证接口案例
调用百度Ai 完成一个学生信息录入的网页小案例 添加图片,身份证信息对号入座 官方文档中心:https://ai.baidu.com/docs#/OCR-API/7e4792c7 utils.py # ...
- 师傅领进门之6步教你跑通一个AI程序!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云计算基础发表于云+社区专栏 源码下载地址请点击原文查看. 初学机器学习,写篇文章mark一下,希望能为将入坑者解点惑.本文介绍一些机 ...
- 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包
现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...
- django--调用百度AI接口实现人脸注册登录
面部识别----考勤打卡.注册登录.面部支付等等...感觉很高大上,又很方便,下面用python中的框架--django完成一个注册登录的功能,调用百度AI的接口,面部识别在网上也有好多教程,可以自己 ...
- [C1] Andrew Ng - AI For Everyone
About this Course AI is not only for engineers. If you want your organization to become better at us ...
- AI工程师基础知识100题
100道AI基础面试题 1.协方差和相关性有什么区别? 解析: 相关性是协方差的标准化格式.协方差本身很难做比较.例如:如果我们计算工资($)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们 ...
- ggpubr进行“paper”组图合并,也许比PS,AI更简单
本文转载自微信公众号 “生信补给站”,https://mp.weixin.qq.com/s/41iKTulTwGcY-dHtqqSnLA 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...
随机推荐
- C++算法代码——单词查找
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=2472 题目描述 给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以 ...
- Elasticsearch---DSL搜索实践
Domain Specific Language 特定领域语言,基于JSON格式的数据查询,查询更灵活,有利于复杂查询 一.普通url路径参数搜索 数据准备 1.建立名字为 shop 的索引 2.手动 ...
- 1098 Insertion or Heap Sort——PAT甲级真题
1098 Insertion or Heap Sort According to Wikipedia: Insertion sort iterates, consuming one input ele ...
- JUC学习
JUC是java.util.concurrent包 并发编程的工具包 并发.并行 并发:多线程操作一个资源 并行:多人一起走 并发编程的本质:充分利用cpu的资源 线程的几个状态 新建 运行 堵塞 等 ...
- Hyperf-事件机制+异常处理
Hyperf-事件机制+异常处理 标签(空格分隔): php, hyperf 异常处理器 在 Hyperf 里,业务代码都运行在 Worker 进程 上,也就意味着一旦任意一个请求的业务存在没有捕获处 ...
- go的循环
目录 go的循环 一.语法 二.语法简写 1.省略第一部分 2.省略第二部分 3.省略第三部分 4.全省略:死循环 5.终极写法,简洁变形 go的循环 Go中只有for循环,没有while循环.因为w ...
- std和stl的关系
[前言]在写程序时,虽然一直这么用,有点疑惑为甚么引入了头文件.h还要在加上using namespace std?例如: 1 #include<iostream> 2 using nam ...
- 【秒懂音视频开发】02_Windows开发环境搭建
音视频开发库的选择 每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如: iOS:AVFoundation.AudioUnit等 Android:MediaPlayer.Med ...
- 如何使用python爬取网页动态数据
我们在使用python爬取网页数据的时候,会遇到页面的数据是通过js脚本动态加载的情况,这时候我们就得模拟接口请求信息,根据接口返回结果来获取我们想要的数据. 以某电影网站为例:我们要获取到电影名称以 ...
- git仓库创建及基本使用
创建git用户 useradd git passwd git 创建目录 mkdir /home/git/repos/app.git/ -p 初始化目录 cd /home/git/repos/app.g ...