关于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 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...
随机推荐
- Markdown简单语法的使用
Markdown简单语法的使用 目录 Markdown简单语法的使用 前言 标题的设置 字体的设置 1.字体加粗 2.斜体 3.字体加粗斜体 3.删除线 引用 列表的使用 插入图片 分割线 代码的书写 ...
- Unity安卓apk打包过程
前言:对于Unity开发小白来说,Android打包无疑是个头痛的问题,所以我总结了 Unity安卓APK的打包过程 第一步:下载对应版本的Android Platform 第二步:安装JDK并配置J ...
- elasticsearch如何设计集群
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 在写本文时就在想,如果让你负责一个elasticsearch集群,从零开始,你会从哪些方面 ...
- DCL之单例模式
所谓的DCL 就是 Double Check Lock,即双重锁定检查,在了解DCL在单例模式中如何应用之前,我们先了解一下单例模式.单例模式通常分为"饿汉"和"懒汉&q ...
- JavaFX桌面应用-版本升级
好久没有写博客,2021年就以 "JavaFX桌面应用-版本升级" 开篇吧,记录一下JavaFX应用版本升级的开发流程. 桌面应用升级的方案应该很多,这里只是自己想到的方案. 1. ...
- 绿色城市之地下综合管廊3D可视化平台
前言 现阶段,我国绿色城市建设发展正在热火朝天的进行,面对迅速城镇化建设导致的城市病,需要不断寻求足以丰富城市的资源,以此实现城市绿色化智能化发展,比如改造地下管廊.路灯等城市基础设施. 地下综合管廊 ...
- Java编程开发之数据图表分析模型
数据统计分析 多曲线图表分析实现 基本需求分析 假设在怪兽出没的年岁,加上年关在即,需要统计分析各个道路卡口车流量出入统计,主要从车流量和车牌地角度出发.如图所示的业务需求: 道路卡口-车流量分析: ...
- AJAX 加载效果(遮盖层)
//创建遮罩层函数体 function createMask(){ var node=document.createElement('div'); node.setAttribute('id','ba ...
- unittest系列(一)unittest简介和示例
unittest - 单元测试框架 单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格.其支持测试自动化,配置共享和关机代码测试.支持将测试样例聚合到测试集中,并将测 ...
- 前端学习 node 快速入门 系列 —— 服务端渲染
其他章节请看: 前端学习 node 快速入门 系列 服务端渲染 在简易版 Apache一文中,我们用 node 做了一个简单的服务器,能提供静态资源访问的能力. 对于真正的网站,页面中的数据应该来自服 ...