人工智能最近的成功通常归功于 GPU 的出现和发展。GPU 的架构通常包括数千个多处理器、高速内存、专用张量核心等,特别适合满足人工智能/机器学习工作负载的密集需求。
不幸的是,人工智能开发的快速增长导致对 GPU 的需求激增,使得 GPU 难以获得。因此,机器学习开发人员越来越多地探索用于训练和运行模型的替代硬件选项。
在之前的帖子中,我们讨论了在专用人工智能 ASIC(如 Google Cloud TPU、Haban Gaudi 和 AWS Trainium)上进行训练的可能性。虽然这些选项提供了显着的成本节省机会,但它们并不适合所有机器学习模型,并且与 GPU 一样,也存在可用性有限的问题。
在这篇文章中,我们回到传统的 CPU,并重新讨论它与机器学习应用程序的相关性。虽然与 GPU 相比,CPU 通常不太适合机器学习工作负载,但它们更容易获得。在 CPU 上运行(至少部分)工作负载的能力可能会对开发效率产生重大影响。
在之前的文章中(例如,此处),我们强调了分析和优化 AI/ML 工作负载的运行时性能的重要性,这是加速开发和降低成本的一种手段。虽然无论使用哪种计算引擎,这都至关重要,但分析工具和优化技术在不同的平台之间可能有很大差异。
在这篇文章中,我们将讨论一些与 CPU 相关的性能优化选项。我们的重点是英特尔® 至强® CPU 处理器(带有英特尔® AVX-512)和 PyTorch(版本 2.4)框架(尽管类似的技术也可以应用于其他 CPU 和框架)。更具体地说,我们将在带有 AWS 深度学习 AMI 的 Amazon EC2 c7i 实例上运行我们的实验。请不要将我们对云平台、CPU 版本、ML 框架或我们应该提到的任何其他工具或库的选择视为对其替代方案的认可。
我们的目标是证明,尽管在 CPU 上进行 ML 开发可能不是我们的首选,但仍有办法“减轻打击”,在某些情况下,甚至可能使其成为可行的替代方案。
免责声明:我们在本文中的目的是展示 CPU 上可用的一些 ML 优化机会。与大多数关于 CPU 上的 ML 优化主题的在线教程相反,我们将重点关注训练工作负载而不是推理工作负载。有许多专门针对推理的优化工具我们不会介绍(例如,请参阅 此处和 此处)。
请不要将本文视为我们提到的任何工具或技术的官方文档的替代品。请记住,鉴于 AI/ML 开发的快速发展,我们提到的一些内容、库和/或说明在你阅读本文时可能会过时。请务必参考最新的可用文档。
重要的是,我们讨论的优化对运行时性能的影响可能会因模型和环境细节而有很大差异(例如,在官方 PyTorch TouchInductor CPU 推理性能仪表板上查看模型之间的高度差异)。我们将分享的比较性能数字特定于我们将使用的玩具模型和运行时环境。请务必在你自己的模型和运行时环境中重新评估所有建议的优化。
最后,我们的重点将完全放在吞吐量性能上(以每秒样本数衡量)——而不是训练收敛。但是,应该注意的是,一些优化技术(例如,批量大小调整、混合精度等)可能会对某些模型的收敛产生负面影响。在某些情况下,可以通过适当的超参数调整来克服这一点。
NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 -