ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Numba 发布历史全解读:从 0.57 到 0.2 的功能演进、弃用策略与依赖升级路线图

Numba 发布历史全解读:从 0.57 到 0.2 的功能演进、弃用策略与依赖升级路线图 Numba 发布历史全解读从 0.57 到 0.2 的功能演进、弃用策略与依赖升级路线图【免费下载链接】numbaNumPy aware dynamic Python compiler using LLVM项目地址: https://gitcode.com/gh_mirrors/nu/numbaNumba 是一款基于 LLVM 的 NumPy 感知的动态 Python 编译器当前仓库项目描述即 “NumPy aware dynamic Python compiler using LLVM”其官方发布说明沉淀了大量关于 Python/NumPy 功能覆盖、CUDA 目标演进、编译器内核改造与依赖升级的权威信息。本文以仓库中的 docs/source/release-notes.rst 为骨架完整梳理从 0.57.12023 年 6 月回溯至 0.2 的版本脉络帮助你理解 Numba 的架构演变、弃用时间线以及如何据其规划升级路径。一、先读懂文档结构两份 release notes 的分工在仓库中Numba 的发布说明由两个入口共同组成docs/source/release-notes-overview.rst文档目录入口分为两部分。Towncrier generated notes小节通过 toctree 以倒序:reversed:聚合 docs/source/release/ 目录下的*.rst文件即 0.58.0 及之后各版本的发布说明由 towncrier 工具从碎片化 changelog 片段自动生成Non-Towncrier generated notes小节则直接引用本篇文章的主体 docs/source/release-notes.rst。docs/source/release-notes.rst手工维护的发布说明按时间倒序覆盖 0.57.1 至 0.2 的全部版本是目前仓库中信息密度最高、跨度最大的一份版本史资料。这种「历史手工维护 新版本 towncrier 生成」的双轨结构本身就是一个值得注意的工程实践从 0.58 起社区用 towncrier.toml docs/upcoming_changes/ 的片段式 changelog 取代了整篇手写使每个 PR 只需新增一个小片段即可自动汇入发布说明同时保留历史文档原样不动的可追溯性。二、版本支持矩阵Python / NumPy / LLVM 的三线演进通读全部发布说明可以发现Numba 每个版本最重要的信息往往是「支持什么、放弃什么」。以下是文档中明确记载的关键升级节点Python 版本线版本Python 变更0.57.0正式支持Python 3.11最低版本提升至3.80.55.0支持Python 3.100.53.0支持Python 3.90.49.0移除全部 Python 2 相关代码最低版本提升至3.60.47.0最后一个支持 Python 2 / 3.5 的主版本遵循 NumPy NEP 29 弃用节奏0.39.0第一个支持 Python 3.7 的版本值得注意的是0.56.0 明确提示「这是最后一个支持 Python 3.7 的版本」0.57 直接跳至 3.8 基线并完成 3.11 支持对应 PR #8545、#8590、#8639 等一批 Python 3.11 兼容性修复涉及字节码 opcode 拼写变化、CALL_FUNCTION_EX处理、tracing 支持等。NumPy 版本线0.57.0支持NumPy 1.24最低版本提升至1.210.55.2维护性支持NumPy 1.22与 Apple M10.55.0支持NumPy 1.21因 NumPy CVE-2021-33430 绕过常规流程加速发布0.54.0支持NumPy 1.20运行时最低版本提升至 1.17编译仍兼容 1.110.52.0支持NumPy 1.190.50.0支持NumPy 1.180.44.1 / 0.43.1支持NumPy 1.17 / 1.160.22.0支持NumPy 1.10。LLVM 版本线经 llvmlite 传递文档中可检索到的升级记录0.57 起LLVM 14全平台支持PR #8535、#8809→ 0.54 起 LLVM 11 → 0.51 起 LLVM 10 → 0.50 起 LLVM 9 → 0.44 起 LLVM 8ppc64le 因 bug 停留在 7.x→ 0.42 起 LLVM 7 → 0.38 起 LLVM 6 → 0.36.1 起 LLVM 5 → 0.32 起 LLVM 4 → 0.31 起 LLVM 3.9.1 → 0.29 起 LLVM 3.8。这条线的含义是Numba 的代码生成能力与上层 vectorization含 SVML支持完全由 LLVM 版本驱动升级 LLVM 往往伴随自动向量化机会的增加如 0.38 明确记载「LLVM 6.0 提升通用向量化」。平台与打包0.57.0最后一个由 Numba 团队发布 Windows 32 位包的版本0.56.0最后一个提供 linux-32 包的版本0.53.0BSD 系统非官方支持0.52 起0.39.0新增ppc64le架构支持0.57.0setuptools变为可选运行时依赖TBB 线程层要求2021.6 或更新0.54 起 TBB 仅支持 2021 系列ABI 破坏性变更。三、Python 语言支持增强从基本语法到语言特性发布说明中「Python language support enhancements」板块记录了 Numba 对 Python 语义的逐步逼近。以信息量最大的 0.57.0 为例异常类支持非编译期常量的参数PR #8134内建hasattr/getattr支持编译期常量属性PR #7884、#8442内建str/repr按 Python 语义实现自定义__str__/__repr__可关联到类型上正常工作PR #8442str.startswith支持start/end关键字参数PR #8557Unicode__getitem__改为返回视图、避免分配min/max支持布尔类型PR #8677支持dict(iterable)构造器PR #8334。更早版本的关键语言特性包括0.54.0 的基础 f-string 支持、dict 推导式、内建sum()0.55.0 的实验性isinstance支持通过部分字面量传播 pass 实现PR #72440.47.0 的基础try/except支持、闭包/lambda作为函数参数、numba.literal_unroll异构元组/常量列表迭代0.34.0 的列表推导式与闭包支持。0.52.0 则补齐了 Python 3.10 下大型内联字典与超多关键字参数的调用问题并支持operator.mul作用于列表、字面量 slice如slice(1, 10, 2)的返回。这些条目共同说明 Numba 的「语言子集」一直在向 CPython 语义收敛且每次语言特性落地都伴随numba/cpython/下对应实现模块的扩充如 numba/cpython/unicode.py、numba/cpython/builtins.py。四、NumPy 功能覆盖的持续扩张NumPy 支持是 Numba 的核心价值之一发布说明中每版都有大量新增函数清单。0.57.0numpy.random.Generator全面落地这是 0.57 最大的 NumPy 特性集绝大多数常用分布已支持文档明确列出的方法包括beta、chisquare、exponential、f、gamma、geometric、integers、laplace、logistic、lognormal、logseries、negative_binomial、noncentral_chisquare、noncentral_f、normal、pareto、permutation、poisson、power、random、rayleigh、shuffle、standard_cauchy、standard_exponential、standard_gamma、standard_normal、standard_t、triangular、uniform、wald、weibull、zipf。实现位于 numba/np/random/对应 PR #8038、#8040、#8041、#8042 的 BitGenerator 支持系列以及 #8520 的非中心卡方/非中心 F/logseries。0.56.0 已先期支持Generator实例的传入、使用与返回当前仅random分布。同期 0.57 还新增ndarray 的nbytes属性PR #8662、嵌套数组类型PR #8120、datetime/timedelta到int的转换PR #8024、ufunc 生成中的F-order 迭代提升 F 序数组组合性能PR #7622以及np.argpartition、np.isclose、np.nan_to_num、np.new_axis、np.union1dPR #5544、#7067、#8623、#8513、#8732。0.56.0 / 0.55.0 / 0.54.0 的代表性新增0.56.0np.broadcast_shapes、np.broadcast_arrays、min/max支持np.timedelta64/np.datetime64、np.sort支持沿最后一轴的多维排序、np.clip的a_min/a_max接受数组、np.empty/np.ones等分配函数支持enum.IntEnum形状成员、np.random.noncentral_chisquare0.55.0np.broadcast_to、np.float_power、np.cbrt、np.logspace、np.take_along_axis、np.average、np.argmin支持axis、ndarray.astype支持字面量字符串类型0.54.0np.clip、np.iscomplex/np.iscomplexobj/np.isneginf/np.isposinf/np.isreal/np.isrealobj/np.isscalar、np.random.dirichlet、np.rot90、np.swapaxes、np.argmax支持axis、0d 数组作标量用于__setitem__。更早期的里程碑包括 0.52.0 的np.asfarray、record 数组子类型化、np.split/np.array_split、NumPy 1.19、dtype 字符串字面量0.47.0 的np.gcd/np.lcm、np.linalg系列、带key的sorted/list.sort()0.45.0 引入实验性numba.typed.List0.43.0 引入静态类型化字典typing Dict。这些实现大多集中在 numba/np/arraymath.py、numba/np/linalg.py 与 numba/np/npdatetime.py。五、编译器内核与 NRT 运行时性能与安全的结构性改进发布说明中「Highlights of core changes」「Performance」板块揭示了 Numba 内部的长期工程主线——把编译器从「能用」推向「高效且可扩展」。NRTNumba Runtime演进0.57.0NRT 内部统计计数器默认关闭消除原子锁竞争、调试缓存行填充默认关闭、NRT 延迟到首次编译时才初始化改善导入速度、所有分配调用默认走 checked 层PR #8200、#8235、#84380.46.0NRT C-API 重构0.52.0Intel 资助的LLVM 级引用计数剪枝 pass减少原子锁压力并让优化器做得更多0.33.0消除循环体内冗余引用计数操作受影响程序提速 2–10 倍。相关实现可参考 numba/core/runtime/nrt.py 与 numba/core/runtime/ 目录。扩展 API 的大规模迁移0.57.0 记载了一次重要的内部重构把大量 Python/NumPy 函数的内置实现从低层扩展 API 迁移到高层扩展 APInumba.extending例如用overload取代overload_gluePR #8234、#8431、#8649 等 20 个函数并删除了numba.core.overload_glue模块。同时overload*与intrinsic的默认target改为generic使扩展默认同时被 CPU 与 CUDA 目标接受PR #8554types.float64[:, ::1]这类对 Numba 类型的__getitem__现在可在编译代码中使用PR #8819Numba 类型支持__repr__PR #8685。更高层的 API 演进还包括 0.54.0 的overload_classmethod、0.51.0 的StructRef按引用传递的可变结构扩展类型、0.46.0 的入口点entrypoints扩展注册机制以及 0.38.0 的自定义编译管线custom pipeline与numba.extending.get_cython_function_address。这些接口的权威文档见 docs/source/extending/ 与 numba/extending.py。IR 与编译管线0.49.0引入基于ir.Del的自由静态单赋值SSA形式的 NIR并把代码库按功能重组成numba.core等子模块提供 shim 过渡0.50.0 移除0.52.0开启 SLPsuperword-level parallelism向量化并调优优化管线新增inspect_cfg增强、LLVM pass 计时0.53.00.46.0编译器管线重构为更易扩展的形态配合自定义 pass 文档0.55.0新增NUMBA_CAPTURED_ERRORSnew_style错误处理模式——凡不继承numba.errors.NumbaException的异常一律视为硬错误并立即展开栈大幅改善overload编写时的调试体验。六、并行加速器ParallelAccelerator与 parforsNumba 的自动并行化技术自 0.34.0 引入parallelTrue与显式prange此后持续增强0.57.0parfor gufunc 不再执行诊断 passPR #89820.56.0新增numba.set_parallel_chunksize/numba.get_parallel_chunksize并支持 context manager 调整numba.get_thread_id的线程 ID 定义变得可预测且在已知范围内stencil的串行/并行性能均有提升0.53.0支持 Fortran 序F-order数组0.40.0并行循环允许数组作为归约变量0.38.0修复parallelTrue相关 bug 使向量化机会增加。配套的并行化实现与文档位于 numba/parfors/、docs/source/user/parallel.rst。调试环境变量NUMBA_DEBUG_ARRAY_OPT_STATS0.36.1 起可输出哪些算子/调用被转换为并行 for 循环。七、CUDA 目标从基础支持到完整扩展 APICUDA 是 Numba 除 CPU 外的第二大目标发布说明中几乎每版都有独立的 CUDA 板块。0.57.0CUDA 大版本工具链支持CUDA 11.8 与 12提供 11.x 的 Minor Version CompatibilityMVC打包改用 NVIDIA 官方 CUDA Toolkit conda 包PR #7255、#8180硬件支持Hopper、Ada Lovelace、AGX Orinfloat16算术运算完整支持新增is_fp16_supported()方法与supports_float16设备属性PR #7885、#8001、#8010、#8634高层扩展 API 在 CUDA 目标完全可用支持多签名急切编译、广义 ufunc 多输出与返回类型指定kernel 内可调用有限集合的 NumPy ufunc三角函数PR #8294开启 lineinfo 不再改变生成代码PR #8594修复 CUDA ufunc 中虚假的 device-to-host 传输PR #9005。0.56.0 与 0.55.x0.56.0设备函数自递归、向量类型float4、int2等、扩展类型共享/局部数组、链接 CUDA C/C 设备函数、CC 8.6/8.7 PTX 生成、float16比较运算性能上消除 launch 配置时的 context 查询、launch 配置 LRU 缓存、kernel 磁盘缓存0.55.x支持 NVIDIA CUDA Python bindings、16 位浮点及基础运算 intrinsic、Stream.async_done提供流对象0.55.1 宣布弃用 CC 5.3 与 CUDA Toolkit 10.20.56 移除。更早的里程碑0.54.0lineinfo输出供 Nsight Compute 等使用、Windows 上的 IPC、tuple 传入 CUDA ufunc、warp-aggregated intrinsicsactivemask()、lanemask_lt()、overload在 CUDA 目标支持0.53.0CUDA 11.2NVVM IR 1.6 / LLVM IR 7.0.1、cuda.is_supported_version()、CUDA Array Interface v3含 streams、Cooperative GroupsGrid Groups / Grid Sync、tuple/namedtuple 传参macOS 上的 CUDA 支持进入弃用状态0.52.0Unified Memory、kernel launch 开销降低、libdevice 全函数接入、更多原子操作0.33.0基于 xoroshiro128 的 GPU 随机数生成器cuda.jitkernel 可直接调用jit/njitCPU 函数并自动编译为设备函数。相关代码位于 numba/cuda/文档见 docs/source/cuda/。八、弃用与破坏性变更时间线升级必读发布说明中反复强调的一条主线是弃用策略。以下是文档明确记载的时间线object mode 回退fallback弃用0.57.0 起正式推进并给出了具体时间表PR #8702——未来无关键字参数的jit将与njit等同建议从现在起显式使用njit或jit(nopythonTrue)generated_jit弃用0.57.0numba.extending.overload是其超集替代品numba.pyccpending deprecation0.57.0CUDA 移除0.53.0 移除argtypes/restypes/bind关键字参数与Device.COMPUTE_CAPABILITY、to_host方法0.56.0 移除 CC 5.3 与 CTK 10.2 支持、弃用inspect_ptx()改用compile_ptx()与设备函数急切编译target关键字弃用0.51.0jitclass从顶层命名空间迁至numba.experimental0.49–0.52 完成 shim 移除ROCm 目标转为 unmaintained0.54.0单独迁出仓库兼容性compatibility模式移除0.52.0该模式源自 40 个版本前、用于 0.11→0.12 过渡Python 2 / 3.5 支持终止0.47.0 后、内部模块重排的 shim 于 0.50.0 移除。关于弃用细节的官方汇总见 docs/source/reference/deprecation.rst。九、调试、缓存与工程质量发布说明同样记录了大量「体验类」改进值得使用者关注调试0.31.0 起debugTrue生成 GDB 兼容调试信息0.52.0 起函数名 mangling 与 Python 函数名完全一致可对 Python 名直接打断点并提供 GDB pretty-printing 支持模块0.56.0 新增NUMBA_EXTEND_VARIABLE_LIFETIMES环境变量将变量生命周期延伸到基本块末尾模拟 C/C/Fortran 调试体验与_dbg_optnone装饰器参数完全关闭 LLVM 优化 pass缓存0.22.0 起 JIT 缓存存储编译后的目标代码0.45.0 起parallelTrue函数可缓存0.51.0 起 objmode 块可缓存0.56.0 起 CUDA kernel 支持磁盘缓存0.51.0 起全部 pickle 操作改用 vendored cloudpicklenumba/cloudpickle/可观测性numba -s系统信息工具0.30.0、chrome tracing 输出0.56.0、编译器事件系统0.53.0、inspect_llvm()/inspect_asm()/inspect_cfg()CI 与测试0.41.0 起 Azure Pipelines、flake8 检查0.41、typeguard0.53、Python 3.11 矩阵0.57等。十、版本速查表与升级建议版本发布时间核心亮点最低依赖0.57.12023-06CUDA ufunc 修复、parfor 诊断调整、缓存修复Python 3.8 / NumPy 1.21 / LLVM 140.57.02023-05Python 3.11、NumPy 1.24、Generator 全面支持、CUDA 12/MVC、NRT 加固、objmode 弃用启动Python 3.8 / NumPy 1.21 / LLVM 140.56.42022-11CUDA.view()回归修复—0.56.02022-07最后一个支持 Python 3.7 的版本、chunksize 控制、CUDA C/C 链接、磁盘缓存LLVM 110.55.02022-01Python 3.10、NumPy 1.21、isinstance、新错误处理模式LLVM 110.54.02021-08f-string、dict 推导式、overload_classmethod、CUDAoverloadLLVM 11、Python 3.70.53.02021-03Python 3.9、动态 gufunc、Cooperative GroupsLLVM 100.52.02020-11LLVM 级 refcount 剪枝、SLP 向量化、Unified MemoryLLVM 100.49.02020-04移除 Python 2、SSA 化 IR、内部模块重组LLVM 9、Python 3.60.34.02017ParallelAcceleratorparallelTrue/prange发布—0.122014编译器大重构、njit诞生—给升级者的建议若你仍在使用jit无参形式或generated_jit应依据 0.57.0 的弃用声明尽早迁移到njit与numba.extending.overloadCUDA 用户需确认本机 CUDA Toolkit 版本0.57 要求 11.8 以获得最佳支持且支持 11.x MVC 与 CUDA 12Python 3.8 是当前仓库0.57 系的最低 Python 基线。后续 0.58 版本的变更细节可在 docs/source/release/ 目录下按版本查阅 towncrier 生成的说明。【免费下载链接】numbaNumPy aware dynamic Python compiler using LLVM项目地址: https://gitcode.com/gh_mirrors/nu/numba创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表