关于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 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...
随机推荐
- JVM性能调优经验总结
本文转载自JVM性能调优经验总结 说明 调优是一个循序渐进的过程,必然需要经历多次迭代,最终才能换取一个较好的折中方案. 在JVM调优这个领域,没有任何一种调优方案是适用于所有应用场景的,同时,切勿极 ...
- 微服务学习.net5+consul
趁着刚过完年,还没有开始做业务的时候,学习下consul 概念自己去官网看,这里只讲下具体实现 官网下载https://www.consul.io/downloads 我下载的是Windows版本 启 ...
- 顶级c程序员之路 基础篇 - 第一章 关键字的深度理解 number-1
c语言有32个关键字,每个关键字你都理解吗? 今天出场的是: auto , register, static, extern 为什么他们会一起呢,说到这里不得不谈到c语言对变量的描述. c给每 ...
- wxWidgets源码分析(6) - 窗口关闭过程
目录 窗口关闭过程 调用流程 关闭文档 删除视图 删除文档对象 关闭Frame App清理 多文档窗口的关闭 多文档父窗口关闭 多文档子窗口关闭 窗口的正式删除 窗口关闭过程总结 如何手工删除view ...
- macOS启动Kafka
目录 kafka目录结构 先启动zookeeper 后启动kafka 创建topic 创建一个生产者 创建一个消费者 kafka目录结构 # kafka安装目录 /usr/local/Cellar/k ...
- 因MemoryCache闹了个笑话
前言 是这么一回事: 我正在苦思一个业务逻辑,捋着我还剩不多的秀发,一时陷入冥想中...... 突然聊天图标一顿猛闪,打开一看,有同事语音: 大概意思是:同事把项目中Redis部分缓存换成Memory ...
- 破败之王杀人戒bug原理剖析(从底层存储来解释)
今儿看到了破败之王的bug,一级团杀了人变成了对面,然后送塔,戒指就变成了很夸张的层数. 视频如下: https://www.bilibili.com/video/BV1yr4y1A7Mo 一开始我也 ...
- Linux速通07 硬盘分区、格式化及文件系统管理
硬件设备与文件名的对应关系 # 在Linux系统中,每个设备都被当作一个文件来对待 # 各种设备在Linux中的文件名 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI ...
- JS时间格式转成字符串
formatNumber = n => { n = n.toString(); return n[1] ? n : '0' + n }; // 时间格式化 formatTime = date = ...
- Python3中变量作用域nonlocal的总结
最近,在工作中踩到了一个关于Python3中nonlocal语句指定的变量作用域的坑.今天趁周六休息总结记录一下. 众所周知,Python中最常见的作用域定义如下: 但是,为了更加方便地在闭包函数 ...