跳转到主要内容

Numba分析器

项目描述

Profila:Numba分析器

此分析器由我的关于在Python中编写快速底层代码的书籍赞助,其中大部分示例使用Numba。

这是Profila输出的样子

$ python -m profila annotate -- scripts_for_tests/simple.py
# Total samples: 328 (54.9% non-Numba samples, 1.8% bad samples)

## File `/home/itamarst/devel/profila/scripts_for_tests/simple.py`
Lines 10 to 15:

  0.3% |     for i in range(len(timeseries)):
       |         # This should be the most expensive line:
 38.7% |         result[i] = (7 + timeseries[i] / 9 + (timeseries[i] ** 2) / 7) / 5
       |     for i in range(len(result)):
       |         # This should be cheaper:
  4.3% |         result[i] -= 1

您还可以与Jupyter一起使用它!

除了这个README之外,您还可以阅读这篇文章,其中包含更详细的示例和解释

快速阅读限制: 仅限Linux,目前只能分析单线程Numba,不支持并行函数。

安装

目前Profila仅适用于Linux。

  • 在macOS上,您可以使用Docker、Podman或Linux虚拟机。
  • 在Windows上,您可以使用Docker、Podman或WSL2。

您需要安装gdb。在Ubuntu或Debian上,您可以这样做

apt-get install gdb

基于RedHat的系统

dnf install gdb

使用pip安装此库

pip install profila

用法

Jupyter分析

首先,在您导入numba之前,您应该

%load_ext profila

然后像平常一样定义您的函数

from numba import njit

@njit
def myfunc(arr):
    # ... your code here ...

您可能想至少调用一次您的Numba函数,这样分析就不会测量编译时间

myfunc(DATA)

然后,您可以使用%%profila魔法来分析特定的单元格,例如

%%profila
# Make sure we run this enough to get good measurements:
for i in range(100):
    myfunc(DATA)

命令行分析

如果您通常像这样运行您的脚本

$ python yourscript.py --arg1=200

改为这样运行它

$ python -m profila annotate -- yourscript.py --arg1=200

采样每10毫秒进行一次,所以您需要确保您的Numba代码运行足够长的时间。 例如,您可以在循环中运行您的函数,直到经过一定的时间数

from time import time

@njit
def myfunc():
    # ...

start = time()
# Run for 3 seconds:
while (time() - start) < 3:
    myfunc()

分析输出限制

  • 并行Numba代码无法正确分析;目前仅支持单线程分析。
  • GPU(CUDA)代码不支持分析。

除此之外

1. 编译后的代码与输入代码不同

类似于Numba这样的编译语言会进行优化处理,将代码转换以使其更快。这意味着运行代码不一定与原始代码一一对应;例如,不同的行可能会合并。

据我所知,Numba确实提供了合理的映射,但您不能假设源代码与执行代码一一对应。

2. 添加必要的信息可能会改变代码的性能

为了进行分析,需要在编译时添加额外的信息;具体来说,需要设置NUMBA_DEBUGINFO环境变量。这可能会略微改变运行时的特性,因为它增加了编译代码的内存大小。

3. 编译代码受到分析中不可见的影响CPU效应的影响

指令级并行性、分支预测错误、SIMD和CPU内存缓存都对运行时性能有重大影响,但在分析中不会显示。如果您想了解更多信息,我正在编写关于此内容的书籍

变更日志

v0.2.1

错误修复

  • 使用sys.executable运行Python,以便在更多环境中工作。感谢Jeremiah England提供的错误报告。

v0.2.0

添加了对Jupyter分析的支持。

v0.1.0

首次发布。

项目详情


下载文件

下载您平台的文件。如果您不确定要选择哪一个,请了解有关安装包的更多信息。

源代码分发

profila-0.2.1.tar.gz (18.6 kB 查看哈希)

上传时间

构建分发

profila-0.2.1-py3-none-any.whl (14.2 kB 查看哈希)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面