关于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

上一篇:springboot整合MongoDB


下一篇:array_merge() 合并数组函数