注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请开启 JavaScript 以获得完整的体验。

Python on Arm:2025 年更新

Python 为何对 Arm 至关重要

Python 是当今使用最广泛的编程语言之一,为机器学习 (ML)、自动化、数据科学、DevOps、Web 开发和开发者工具等领域的应用程序提供支持。在 Arm,我们不仅将 Python 视为一种需要支持的语言,更将其视为一项战略重点,旨在赋能广泛且不断壮大的开发者社区。

在过去几年中,我们与 Python 社区紧密合作,使 Arm 成为 Python 开发的一流平台。得益于持续的上游协作、有针对性的工程投入和生态系统投资,现在,在 Arm 上跨 Linux、Windows 和云端开发、测试和部署 Python 工作负载已切实可行。

2024 年,我们分享了 Arm 如何增加了对 Python 生态系统的参与度。一年后,我们看到了这项投资的成果,包括新的基础设施、改进的性能以及越来越多的真实项目在 Arm 上运行。

本文重点介绍了过去一年的关键发展以及未来的展望。

2025 年新增功能

更便捷的开发:适用于 Arm 的 Linux 和 Windows GitHub 托管运行器

作为我们与 GitHub 合作的一部分,Arm 协助为基于 Arm 的平台启用了 GitHub 托管 CI 运行器。这些运行器现已可用于:

Arm 在测试版发布期间赞助了底层基础设施并提供了工程支持。这些运行器为开源项目提供了一种快速、可靠的方式,可以在没有模拟或自托管的情况下运行原生 CI 工作流。

CPython 项目是 Windows on Arm 运行器的第一个开源用户,并持续在日常 CI 管道中使用它们。这有助于确保对该平台的一流支持。

性能改进

Python 3.13 引入了一个实验性的即时 (JIT) 编译器,由 CPython 团队开发,旨在改善实际应用中的性能。Arm 通过在 Arm 平台上测试、调优和扩展 JIT,特别是针对 AArch64 架构(见下文),直接为这项工作做出了贡献。

我们的工作包括修复特定于架构的问题、验证生成的机器代码,以及提高 Arm 上 JIT 输出的整体质量。这些努力带来了:

  • Linux 上速度提升高达 4%
  • 生成的头文件大小减少 17%
  • 更智能的跳转处理和更高效的代码生成
  • 通过跳板重用和有针对性的优化降低内存开销

结果是,在 Arm 上运行的 Python 工作负载获得了更快、更可靠的 JIT 体验。

Arm 上的 Windows 生态系统支持更佳

Python 对 Arm 上的 Windows 的支持持续成熟。CPython 本身以及许多基本软件包现在都可以在该平台上干净地构建和运行。这得益于上游修复、改进的构建系统和扩展的 CI 覆盖范围。

我们正与微软紧密合作,以提升 Arm 上的 Windows 设备上的 Python 整体体验。这包括:

  • 实现流行库的兼容性
  • 完善构建和打包工作流
  • 支持关键的 AI 和 ML 工具

一个主要进展领域是 PyTorch,Arm 和微软之间的合作已经提供了原生构建并改进了加速支持。

随着 适用于 Arm 上 Windows 的 PyTorch 2.7 的发布,开发者现在可以访问适用于 Python 3.12 的 Arm 原生 Windows 构建。这使得 ML 工作流可以在 Arm64 Windows 设备(包括 Copilot+ PC)上原生运行,并充分利用硬件功能。

这些改进支持广泛的机器学习用例。从 Stable Diffusion 等生成模型,到自然语言处理,再到传统的回归和分类。Arm 上的 Windows 现在是现代 AI 开发的生产就绪平台。

Arm 对 Python 社区的承诺

我们不仅通过代码,还通过基础设施、资金和时间继续支持 Python 社区,包括:

  • 在我们的剑桥办公室举办 CPython 核心开发者冲刺 2025
  • 赞助 2022、2023 和 2025 年的 EuroPython
  • 提供与 speed.python.org 集成的专用基准测试服务器
  • 资助一名全职 CPython 开发者,现已成为核心提交者

Arm 致力于通过持续的上游贡献和社区投资来支持 Python 生态系统。在过去一年中,我们扩大了努力,在技术和组织上支持社区。

CPython 核心开发者冲刺 2025

我们很荣幸能于今年九月在剑桥办公室主办并赞助即将举行的CPython 核心开发者冲刺 2025。该活动有望成为有史以来规模最大的冲刺,将汇聚来自欧洲、美国、韩国、新加坡和澳大利亚的 55 余名核心开发者和贡献者。

这些冲刺对于 Python 的发展至关重要,它促进了面对面的设计讨论、上游规划和集中的开发工作,这些工作难以远程协调。通过支持这项全球性活动,Arm 正在帮助加速 Python 的技术路线图,同时加强我们与维护和塑造该语言的人员的合作。

支持 EuroPython

此外,Arm 第三次赞助了 EuroPython 2025,此前曾在 2022 年和 2023 年支持过该会议。这有助于促进全球维护者、贡献者和用户之间的协作。

EuroPython Arm Sponsor

EuroPython Arm Booth

EuroPython JIT talk

Arm 在 EuroPython 2025 上发表了关于 JIT 的专题演讲,题为《探索 CPython JIT》,深入探讨了 Arm 平台上 JIT 的现状和演变。我们将分享我们在 Python 3.14 中使用新 JIT 编译器的工作经验。

EuroPython JIT talk

EuroPython JIT talk

专用 Arm 基准测试服务器

为协助 Python 核心开发者进行性能跟踪,Arm 现提供一个运行在 Arm 硬件上的专用基准测试服务器,并在 speed.python.org 上发布结果。该服务器与 Python 的性能监控工具集成,有助于评估代码更改对 Arm 平台的影响,并实现更数据驱动的优化。

Arm benchmarks

对 CPython 的上游优先贡献

Arm 也持续直接投资上游工作。作为这项工作的结果,我最近被提升为 CPython 核心开发者,进一步加强了我们与 Python 项目的技术合作。

在过去一年中,Arm 在解释器的多个领域做出了贡献,包括:

  • CPython JIT 的改进
  • 微操作优化器的改进
  • 性能基准测试基础设施的增强
  • 审查拉取请求和分类问题

这些努力反映了 Arm 更广泛的目标:不仅仅是平台支持,更是对 Python 语言本身的持续、上游优先的贡献。

工程贡献

Arm 最近对 CPython 的贡献主要集中在改进 AArch64 平台上的 JIT 和性能。这些更改中的每一项都改进了 Arm 平台上的 JIT 生成的机器代码,从而实现更高效的 Python 执行。

尽管 JIT 仍处于早期阶段,但它已在特定工作负载中展现出潜力。我们的贡献为 Arm 系统未来的加速奠定了基础。

GH-123872:生成并修补 AArch64 跳板

此拉取请求引入了 JIT 编译器中 AArch64 跳板的生成和修补。通过实现这些跳板,JIT 可以更有效地处理超出范围的跳转,从而提高 AArch64 平台上 JIT 编译代码的可靠性和性能。此补丁使 JIT 在 Linux 上速度提高 0.8%,内存占用减少 0.6%。

GH-121001:用 LDR 替换 AArch64 跳板

在此前工作的基础上,此更改将现有跳板机制替换为 AArch64 使用 LDR 指令。这种简化降低了复杂性并增强了 JIT 代码生成过程的可维护性。它使生成的模板头文件大小减少 17%,并使修补函数从 4 个减少到 1 个。

// Old trampoline  
d2800008 mov x8, #0x0  
f2a00008 movk x8, #0x0, lsl #16  
f2c00008 movk x8, #0x0, lsl #32  
f2e00008 movk x8, #0x0, lsl #48  
d61f0100 br x8

// New trampoline  
58000048 ldr x8, 8  
d61f0100 br x8  
00000000 # Used to patch the 64-bit address  
00000000 # Used to patch the 64-bit address

GH-120250:JIT:在 AArch64 上重用跳板

此增强功能使 JIT 编译器能够在 AArch64 上重用现有跳板,从而最大程度地减少冗余并优化内存使用。通过重用跳板,JIT 减少了为每个超出范围的跳转生成新跳板的开销。

GH-131041:仅针对长跳转发出 AArch64 跳板

此优化确保仅在必要时发出跳板,特别是对于无法直接编码的长跳转。通过避免生成多余的跳板,JIT 编译器简化了代码生成过程并减小了代码大小。

GH-131042:移除 AArch64 JIT 模板中的尾部跳转

此改进消除了 AArch64 JIT 模板中不必要的尾部跳转。通过移除这些冗余指令,JIT 生成了更高效的机器代码,从而在执行过程中潜在地提高了性能,包括在 Linux 上提速 1.4%。

// With the trailing jump that needs to be patched  
0x08, 0x00, 0x00, 0x90, // adrp x8, _JIT_OPERAND0  
0x08, 0x01, 0x40, 0xf9, // ldr x8, [x8]  
0x88, 0x1e, 0x00, 0xf9, // str x8, [x20, #0x38]  
0x00, 0x00, 0x00, 0x14, // b _JIT_CONTINUE  

// The trailing jump has been replaced with a NOP  
0x08, 0x00, 0x00, 0x90, // adrp x8, _JIT_OPERAND0  
0x08, 0x01, 0x40, 0xf9, // ldr x8, [x8]  
0x88, 0x1e, 0x00, 0xf9, // str x8, [x20, #0x38]  
0x1f, 0x20, 0x03, 0xd5, // nop (branch was removed)

展望未来

Arm 与 Python 生态系统的合作将持续到 2025 年及以后。我们将继续专注于性能、生态系统支持和上游协作。无论是通过基础设施、开发者资助,还是对 CPython 内部的贡献,我们的目标是让 Arm 上的 Python 成为一个快速、稳定且易于所有用户访问的平台。

我们将继续在解释器的关键领域做出贡献,包括 JIT、SIMD 执行和核心评估循环。展望未来,我们计划探索将特定于架构的指令(如 NEON、SVE、SVE2、SME 和Arm 新的 SME2)集成到 JIT 编译器中,以加速特定工作负载。

我们还致力于通过审查补丁、指导新贡献者和支持将维护者聚集在一起的关键活动来加强 Python 的社区方面。

参与进来

我们对 Arm 上 Python 的未来感到兴奋,并期待您的反馈。

现在是尝试在 Arm 上运行 Python 工作负载的最佳时机。它比以往任何时候都更容易:

  • 适用于 Linux 和Arm 上的 Windows 的 GitHub 托管运行器均已可用
  • 大多数 PyPI 软件包现在可以在 Arm 系统上开箱即用
  • 所有主要的公共云都提供 Arm 实例

如果您遇到问题,请向上游提出,或直接联系我们。

无论您是从事 Python 本身的工作,构建工具和库,还是将您的软件移植到基于 Arm 的系统,我们都邀请您通过Arm 开发者计划与我们联系。这是保持最新、访问技术资源以及与 Arm 工程师和其他 Python 开发者协作的最佳方式。

让我们一起继续改进 Arm 上的 Python。