关于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 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...
随机推荐
- 金三银四助力面试-手把手轻松读懂HashMap源码
前言 HashMap 对每一个学习 Java 的人来说熟悉的不能再熟悉了,然而就是这么一个熟悉的东西,真正深入到源码层面却有许多值的学习和思考的地方,现在就让我们一起来探索一下 HashMap 的源码 ...
- 【Python核心编程笔记】一、Python中一切皆对象
Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...
- HTTP2 的前世今生
本文转载自HTTP2 的前世今生 导语 作为一名 Web 后端开发工程师,无论是工作中,还是面试时,对于 HTTP 协议的理解都是必不可少的.而 HTTP2 协议的发布更是解决了 HTTP1.1 协议 ...
- 你真的了解URLEncode吗?
使用浏览器进行Http网络请求时,若请求query中包含中文,中文会被编码为 %+16进制+16进制形式,但你真的深入了解过,为什么要进行这种转义编码吗?编码的原理又是什么? 例如,浏览器中进行百度搜 ...
- openwrt编译加载龙尚U9300模组上网
硬件平台:MT7628A openwrt版本:MTK_SDK 1.添加模组信息 /build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux ...
- JavaScript async/await:优点、陷阱及如何使用
翻译练习 原博客地址:JavaScript async/await: The Good Part, Pitfalls and How to Use ES7中引进的async/await是对JavaSc ...
- SpringBoot(七):SpringBoot中如何使用过滤器(Filter)?
方式一: 通过注解方式实现: 1.编写一个Servlet3的注解过滤器(和上一章Servlet相似) 贴代码: package com.example.springbootweb.filter; im ...
- uni-app创建项目
下载 HBuilderX 下载地址(https://www.dcloud.io/hbuilderx.html) HBuilderX是通用的前端开发工具,但为uni-app做了特别强化. 创建uni ...
- dubbo实战之一:准备和初体验
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 通过kubeadm快速部署K8S集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...