下图展示了人工智能计算能力的发展,这是由于计算能力可用性的提高、硬件效率的提高、云数据中心的利用不足以及成本的降低而实现的。即使研究人员认为这种趋势不会以这种速度持续下去,人工智能对环境的影响已经成为必须克服的挑战。
这篇博文展示了如何最大限度地减少人工智能对环境的影响,以及为什么训练人工智能通常不会像您想象的那样对环境造成危害。我专注于与人工智能具体相关的方面。可以在这篇博文中找到开发可持续软件的一般技巧。
数据
数据必须被捕获、加载、清理、标记和标记化。除了计算能力之外,这还需要传输和物理存储的带宽。以节省资源的方式处理数据时,除了聚合、压缩、过滤等经典最佳实践外,还应注意以下几个方面:
数据质量:数据质量差会导致更多的实验、更长的训练时间和更差的结果。因此,为了使用更少的计算能力,最好尽可能地表示问题的精选数据集。
数据量:通过使用高质量数据,可以显着减少要处理、传输和存储的数据量,从而显着减少所需的资源。
数据格式:例如,绿色软件基金会推荐使用Parquet 格式,而不是使用 CSV 作为通用数据格式。在 Python 中处理这种格式可以更加节能。
实验
人工智能系统的开发阶段会比经典应用系统消耗 医疗保险线索电子邮件列表 更多的资源。即使将数据工程和模型训练排除在开发阶段,仍然会花费大量资源进行微调,直到找到最终的训练配置。在此阶段,部分数据会使用不同的超参数和特征进行重复迭代,以更接近可行的解决方案。需要考虑的一些方面:
“以数据为中心而非以模型为中心”:在开发过程中,应选择适合数据和问题的模型。我们经常看到所选择的模型应该总是被尝试或者目前正在特别激烈地争论。这会导致复杂模型实验的资源消耗,尽管该问题也可以通过更简单的模型来解决。
编程语言:在关于可持续编程语言的博客文章中已经很清楚,语言的纯粹运行时行为并不是一切。由于运行时方面对AI影响较大,但常见的Python库都是基于低级语言的,因此这里只需要指出,Python、R、C或C++将自己确立为标准是有充分理由的。
奥卡姆剃刀:并非所有问题都需要用人工智能来解决。使用简单的统计方法或一维数据系列通常可以很好地解决问题。
训练
在人工智能模型的生命周期中,训练通常只占消耗工作量的百分之十。尽管单独的训练运行非常耗能,但模型很少经过训练。特别是对于神经网络等更复杂的人工智能过程,能耗随着模型中参数的数量呈指数级增长。由于复杂的组网和迭代训练,两倍的参数数量导致两倍以上的资源消耗。可持续培训的一些技巧是:
训练效率:即使“仅”百分之十的排放来自训练,在选择决策中当然应该考虑模型在训练期间的行为。模型的效率已经过深入研究,基准测试为评估您自己的用例提供了一个良好的起点。
GPU优化的解决方案:通过在显卡上训练,与在内存中训练相比,每次计算所使用的能量可以显着减少。
迁移学习:通过重用预先训练的模型,最初投入的计算能力也可以在以后的模型中“重用”。这意味着训练基础模型的能源成本在多个用例中分摊。
重新训练:经过训练,模型并不总是能提供有意义的结果。在重新训练时,必须注意不要仅仅因为新数据可用就简单地对其进行训练。在每次重新训练之前,重要的是要检查经过训练的模型的性能如何随着时间的推移而发展以及重新训练是否有意义。
内存优化模型:经过充分训练的模型可能会占用大量内存。服务器上的位和字节总是与物理存储介质进行比较,即使在云中也是如此。例如,通过使用量化——即将连续值转换为离散值——可以减少许多模型的大小,从而减少存储所需的物理硬件。
深度学习模型的平均生命周期工作负载成本。资料来源
推理
推理(即模型结果的计算)占许多模型生命周期中约 90% 的工作量。尽管与训练相比,单次推理仅使用少量能量,但在平均模型上进行的推理量巨大意味着推理领域的可持续性效率通常高于实际训练。一些措施是:
推理优化模型:这个问题很好理解,您可以使用ELEx 等公共基准(如下图所示)来确定您应该首先查看哪些模型以进行有效的推理。当查看模型性能与其能耗之间的关系时,很明显,某些模型提供了可比较的性能,但能耗却显着不同。
边缘计算:通过将推理或有时甚至训练转移到边缘(即更靠近终端设备),可以结合两个优点:一方面,传输网络承受的压力较小,从而降低了数据的能耗传播。另一方面,终端设备的处理器通常甚至没有被远程利用。由于工作负载与功耗之间的非线性关系,通过某种推理增加的工作负载只会小程度地增加功耗,并且数据中心需要的物理硬件较少。
缓存:可以缓存预期的或特别频繁的推理请求。这意味着不必每次都针对类似的查询执行实际的推理。在这种情况下,检索已保存的答案通常就足够了。