跳转到主要内容
博客

在 Windows CPU 上实现 PyTorch 性能提升的路径

作者: 2024 年 10 月 15 日2024 年 11 月 11 日暂无评论

PyTorch 在 Windows CPU 上的性能低于 Linux 一直是一个显著问题。导致这种性能差异的因素有很多。通过我们的调查,我们发现 Windows 上 CPU 性能不佳有几个原因,其中两个主要问题已被确定:Windows 默认 malloc 内存分配器效率低下以及 Windows 平台缺乏用于向量化优化的 SIMD。在本文中,我们将展示 PyTorch CPU 在 Windows 上的性能与之前版本相比如何提升,以及 PyTorch 2.4.1 的性能现状。

PyTorch 2.1.2 及更高版本中的内存分配优化

在 PyTorch 2.1.2 之前的版本中,PyTorch 依赖操作系统的默认 malloc 函数进行内存分配。Windows 平台上的默认 malloc 内存分配效率低于 Linux 平台上的 malloc 实现机制,导致内存分配时间增加,性能下降。为了解决这个问题,我们已将默认的 Windows malloc 替换为 mimalloc,这是一个由微软开发的更高效的内存分配器。此更新包含在 PyTorch 2.1.2 及更高版本中,显著提升了 PyTorch 在 Windows 上的 CPU 性能,如图 1.1 所示。

Figure 1.1: Relative throughput improvement achieved by upgrading from Windows PyTorch version 2.0.1 to 2.1.2 (higher is better).

通过内存分配优化提升 PyTorch 在 Windows 上的 CPU 性能

图 1.1:通过从 Windows PyTorch 2.0.1 版升级到 2.1.2 版实现的相对吞吐量提升(越高越好)。

该图表明,随着 PyTorch 2.1.2 的发布,Windows 平台上的 CPU 性能得到了显著提升。提升程度因模型而异,这可以归因于它们执行的操作和相应的内存访问模式的不同组合。虽然 BERT 模型显示出适度的性能提升,但 ResNet50 和 MobileNet-v3 Large 等模型则受益于更显著的改进。

在高性能 CPU 上,内存分配成为性能瓶颈。这也是为什么解决这个问题会带来如此显著的性能提升。

如下图所示,我们看到 PyTorch CPU 在 Windows 上的性能可以显著提升。然而,与 Linux 上的性能相比,仍然存在明显的差距。Windows 版 PyTorch CPU 中缺乏向量化优化是导致剩余性能差距的关键因素。

Figure 1.2: Relative performance of Windows vs Linux with PyTorch version 2.0.1 (higher is better).

PyTorch 2.0.1 在 Windows 与 Linux 上的性能对比

图 1.2:PyTorch 2.0.1 版在 Windows 与 Linux 上的相对性能(越高越好)。

performance comparison chart

PyTorch 2.1.2 在 Windows 与 Linux 上的性能对比

图 1.3:PyTorch 2.1.2 版在 Windows 与 Linux 上的相对性能(越高越好)。

PyTorch 2.4.1 及更高版本中的向量化优化

在 PyTorch 2.4.1 之前,PyTorch 的 Windows 构建缺乏用于向量化优化的 SIMD,而 Linux 构建利用了此功能以提高性能。这种差异是由于 SLEEF 库在 Windows 上的集成问题造成的,该库是一个用于评估基本函数、向量化 libm 和 DFT 的 SIMD 库,对于高效的三角函数计算至关重要。通过与 ARM 和高通的工程师协作,这些挑战得以解决,从而实现了 SIMD 在 Windows 版 PyTorch 中的集成。因此,PyTorch 2.4.1 更新显著提升了 PyTorch 在 Windows 上的 CPU 性能,如图 2.1 所示。

performance comparison chart

通过向量化优化提升 PyTorch 在 Windows 上的 CPU 性能

图 2.1:通过从 PyTorch CPU 2.1.2 版升级到 2.4.1 版实现的相对吞吐量提升(越高越好)。

如下图所示,我们看到 PyTorch CPU 在 Windows 上的性能已达到 Linux 上的性能。

Windows vs Linux Performance on PyTorch 2.4.1

PyTorch 2.4.1 在 Windows 与 Linux 上的性能对比

图 2.2:PyTorch 2.4.1 版在 Windows 与 Linux 上的相对性能(越高越好)。

结论

从 PyTorch 2.0.1 到 PyTorch 2.4.1,Windows 和 Linux 之间的 CPU 性能差距持续缩小。我们比较了不同版本下 Windows CPU 性能与 Linux CPU 性能的比率,结果如下图所示。

performance comparison chart

不同版本 PyTorch 在 Windows 与 Linux 上的性能对比

图 3:不同版本 PyTorch 在 Windows 与 Linux 上的性能比率(越高越好)。

该图显示,在 PyTorch 2.4.1 中,Windows 上的 CPU 性能已几乎与 Linux 上的性能趋于一致,在某些模型上甚至超越了 Linux。例如,在 DistillBERT 和 RoBERTa 模型中,Windows 到 Linux 的 CPU 性能比率达到了惊人的 102%。然而,包括 MobileNet-v3 在内的某些模型仍显示出性能差异。英特尔工程师将继续与 Meta 工程师合作,以缩小 PyTorch CPU 在 Windows 和 Linux 之间的性能差距。

如何利用这些优化

官方仓库 在 Windows 上安装 PyTorch CPU 2.4.1 或更高版本,您可能会自动体验到内存分配和向量化带来的性能提升。

致谢

本博客文章中呈现的结果是通过英特尔 PyTorch 团队和 Meta 的协作努力实现的。我们衷心感谢 许晗龚炯朱浩哲马明飞王传启陈国兵王一侃。他们的专业知识和奉献精神在实现这里讨论的优化和性能改进方面发挥了重要作用。感谢社区的 朴嘉辰 参与了问题讨论并建议使用 mimalloc。我们还要感谢微软提供了这样一个易于集成且性能卓越的内存分配库。感谢来自 ARM 的 Pierre BlanchardNathan Sircombe,以及来自 Adobe 的 Alex Reinking 为克服 sleef 集成到 PyTorch Windows 时的兼容性问题所做的贡献。最后,我们要感谢 徐晶张伟卓郑兆琼 对本博客的贡献。

产品和性能信息

表中的配置使用 svr-info 收集。英特尔于 2024 年 8 月 30 日测试。

规格配置 1配置 2
名称ThinkBook 14 G5+ IRHThinkBook 14 G5+ IRH
时间2024 年 8 月 30 日星期五下午 02:43:02 UTC2024 年 8 月 30 日星期五下午 02:43:02 UTC
系统联想联想
主板联想联想
机箱联想联想
CPU 型号第 13 代英特尔® 酷睿™ i7-13700H第 13 代英特尔® 酷睿™ i7-13700H
微架构未知英特尔未知英特尔
插槽11
每插槽核心数1414
超线程已启用已启用
CPU2020
英特尔睿频加速技术已启用已启用
基频2.4GHz2.4GHz
全核最大频率4.7GHz4.7GHz
最大频率4.8GHz4.8GHz
NUMA 节点11
预取器L2 HW: 已启用,L2 Adj.: 已启用,DCU HW: 已启用,DCU IP: 已启用L2 HW: 已启用,L2 Adj.: 已启用,DCU HW: 已启用,DCU IP: 已启用
PPINs----
加速器DLB、DSA、IAA、QATDLB、DSA、IAA、QAT
已安装内存32GB (8x4GB LPDDR4 7400 MT/s [5200 MT/s])32GB (8x4GB LPDDR4 7400 MT/s [5200 MT/s])
Hugepagesize2048kb2048kb
透明大页madvisemadvise
自动 NUMA 平衡已禁用已禁用
网卡“1. Raptor Lake PCH CNVi WiFi 2. 英特尔公司”“1. Raptor Lake PCH CNVi WiFi 2. 英特尔公司”
硬盘Micron MTFDKBA512TFH 500GMicron MTFDKBA512TFH 500G
BIOSLBCN22WWLBCN22WW
微码0x411c0x411c
操作系统Windows 11 桌面Ubuntu 23.10
内核OS 构建 19045.44126.5.0-27-generic
TDP200 瓦200 瓦
电源与性能策略正常省电 (7)正常省电 (7)
频率调节器性能性能
频率驱动程序intel_pstateintel_pstate
最大 C 状态99

注意事项和免责声明

性能因使用、配置和其他因素而异。有关更多信息,请访问 性能指标网站

性能结果基于 配置 中所示日期的测试,可能无法反映所有公开可用的更新。有关配置详情,请参阅备份。任何产品或组件都不能做到绝对安全。您的成本和结果可能会有所不同。英特尔技术可能需要启用硬件、软件或服务激活。

英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能属于他人所有。