2.5。环境变量

原文: http://numba.pydata.org/numba-doc/latest/reference/envvars.html

Numba 允许通过使用环境变量来改变其行为。除非另有说明,否则这些变量具有整数值且默认为零。

为方便起见,Numba 还支持使用配置文件来保留配置设置。注意:要使用此功能,必须安装pyyaml

配置文件必须命名为.numba_config.yaml并存在于调用 Python 解释器的目录中。在搜索环境变量之前,将读取配置文件(如果存在)以进行配置设置。这意味着环境变量设置将覆盖从配置文件获取的设置(配置文件用于设置永久首选项,而环境变量用于短暂首选项)。

配置文件的格式是YAML格式的字典,它将下面的环境变量(没有NUMBA_前缀)映射到所需的值。例如,要永久打开开发人员模式(NUMBA_DEVELOPER_MODE环境变量)并控制流程图打印(NUMBA_DUMP_CFG环境变量),请创建一个包含以下内容的配置文件:

  1. developer_mode: 1
  2. dump_cfg: 1

在想要使用基于终端背景颜色的设定颜色方案的情况下,这尤其有用。例如,如果终端背景颜色为黑色,则dark_bg颜色方案将非常适合,并且可以通过添加以下内容设置为永久使用:

  1. color_scheme: dark_bg

2.5.1。错误和警告显示

  1. NUMBA_WARNINGS

如果设置为非零,则启用 Numba 警告的打印输出,否则将禁止警告。警告可以深入了解编译过程。

2.5.2。调试

这些变量会影响 JIT 函数编译过程中打印的内容。

  1. NUMBA_DEVELOPER_MODE

如果设置为非零,则开发人员模式会生成完整的回溯并禁用帮助说明。默认值为零。

  1. NUMBA_FULL_TRACEBACKS

如果设置为非零,则在发生异常时启用完全回溯。默认为 <cite>NUMBA_DEVELOPER_MODE</cite> 设置的值。

  1. NUMBA_SHOW_HELP

如果未设置或设置为零,则显示用户级帮助信息。默认为 <cite>NUMBA_DEVELOPER_MODE</cite> 设置的值的否定。

  1. NUMBA_DISABLE_ERROR_MESSAGE_HIGHLIGHTING

如果设置为非零错误消息突出显示被禁用。这对于在 CI 系统上运行测试套件非常有用。

  1. NUMBA_COLOR_SCHEME

更改错误报告中使用的颜色方案(需要安装colorama包才能工作)。有效值为:

  • no_color没有添加颜色,只是粗体字体加权。
  • dark_bg适用于背景较暗的终端。
  • light_bg适用于背景较浅的终端。
  • blue_bg适用于蓝色背景的终端。
  • jupyter_nb适用于 Jupyter 笔记本电脑。

默认值: no_color。值的类型是string

  1. NUMBA_DEBUG

如果设置为非零,则在函数编译期间打印出所有可能的调试信息。使用下面的其他变量可以获得更细粒度的控制。

  1. NUMBA_DEBUG_FRONTEND

如果设置为非零,则在编译器前端的操作期间打印出调试信息,直到并包括 Numba 中间表示的生成。

  1. NUMBA_DEBUGINFO

如果设置为非零,则通过设置jitdebug选项的默认值,为整个应用程序启用调试。请注意,启用调试信息会显着增加每个已编译函数的内存消耗。默认值等于 <cite>NUMBA_ENABLE_PROFILING</cite> 的值。

  1. NUMBA_GDB_BINARY

设置gdb二进制文件以用于 Numba 的gdb支持,它采用路径和二进制文件的全名,例如:/path/from/root/to/binary/name_of_gdb_binary这是为了允许使用来自非 COD3 的gdb具有非默认名称的默认位置。如果未设置,则假定gdb位于/usr/bin/gdb

  1. NUMBA_DEBUG_TYPEINFER

如果设置为非零,则打印出有关类型推断的调试信息。

  1. NUMBA_DEBUG_CACHE

如果设置为非零,则打印出有关 JIT 编译缓存操作的信息。

  1. NUMBA_ENABLE_PROFILING

启用 LLVM 的 JIT 事件以支持 jitted 函数的分析。某些分析器下会自动启用此选项。

  1. NUMBA_TRACE

如果设置为非零,则跟踪某些函数调用(函数入口和出口事件,包括参数和返回值)。

  1. NUMBA_DUMP_BYTECODE

如果设置为非零,则打印出已编译函数的 Python 字节码

  1. NUMBA_DUMP_CFG

如果设置为非零,则打印出有关已编译函数的控制流图的信息。

  1. NUMBA_DUMP_IR

如果设置为非零,则打印出已编译函数的 Numba Intermediate Representation。

  1. NUMBA_DUMP_ANNOTATION

如果设置为非零,则打印出已编译函数的类型注释。

  1. NUMBA_DUMP_LLVM

转储未经优化的 LLVM 汇编程序编译函数源。未经优化的代码通常非常冗长;因此,建议改用 NUMBA_DUMP_OPTIMIZED

  1. NUMBA_DUMP_FUNC_OPT

在 LLVM“函数优化”通过之后但在“模块优化”通过之前转储 LLVM 汇编程序源。这在开发 Numba 本身时很有用,否则使用 NUMBA_DUMP_OPTIMIZED

  1. NUMBA_DUMP_OPTIMIZED

在所有优化过程之后转储已编译函数的 LLVM 汇编器源。输出包括 raw 函数以及与 CPython 兼容的包装器(其名称以wrapper.开头)。请注意,该函数通常也会在包装器内部内联。

  1. NUMBA_DEBUG_ARRAY_OPT

转储与parallel=True jit 装饰器选项相关的处理相关的调试信息。

  1. NUMBA_DEBUG_ARRAY_OPT_RUNTIME

转储与parallel=True jit 装饰器选项关联的运行时调度程序相关的调试信息。

  1. NUMBA_DEBUG_ARRAY_OPT_STATS

转储有关将多少个运算符/调用转换为并行 for 循环以及多少融合在一起的统计信息,这些都与parallel=True jit 装饰器选项相关联。

  1. NUMBA_PARALLEL_DIAGNOSTICS

如果设置为 1 到 4(包括 1 和 4)之间的整数值,Numba 进行的并行变换的诊断信息将写入 STDOUT。值越高,产生的信息越详细。

  1. NUMBA_DUMP_ASSEMBLY

转储已编译函数的本机汇编代码。

也可以看看

故障排除和提示Numba 架构

2.5.3。编译选项

  1. NUMBA_OPT

优化水平;此选项直接传递给 LLVM。

默认值: 3

  1. NUMBA_LOOP_VECTORIZE

如果设置为非零,则启用 LLVM 循环向量化。

默认值: 1(32 位 Windows 除外)

  1. NUMBA_ENABLE_AVX

如果设置为非零,则在 LLVM 中启用 AVX 优化。默认情况下,Sandy Bridge 和 Ivy Bridge 架构禁用此功能,因为它有时会导致这些平台上的代码速度变慢。

  1. NUMBA_DISABLE_INTEL_SVML

如果设置为非零且 Intel SVML 可用,则将禁用 SVML。

  1. NUMBA_COMPATIBILITY_MODE

如果设置为非零,则 JIT 函数的编译永远不会完全失败,而是生成一个简单地解释函数的回退。只有在从旧的 Numba 版本(0.12 之前)迁移大型代码库时才能使用它,并希望避免一次性破坏所有内容。否则,请不要使用它。

  1. NUMBA_DISABLE_JIT

完全禁用 JIT 编译。 jit() 装饰器就像它不执行任何操作一样,并且装饰函数的调用调用原始 Python 函数而不是编译版本。如果要在代码上运行 Python 调试器,这可能很有用。

  1. NUMBA_CPU_NAME and NUMBA_CPU_FEATURES

覆盖 CPU 和 CPU 功能检测。通过设置NUMBA_CPU_NAME=generic,将为 CPU 体系结构选择通用 CPU 模型,并且功能列表(NUMBA_CPU_FEATURES)默认为空。必须以+feature1,-feature2格式列出 CPU 功能,其中+表示启用,-表示禁用。例如,+sse,+sse2,-avx,-avx2启用 SSE 和 SSE2,并禁用 AVX 和 AVX2。

这些设置将传递给 LLVM 以配置编译目标。要获取可用选项列表,请使用 LLVM 中的llc命令行工具,例如:

  1. llc -march=x86 -mattr=help

小费

要强制所有缓存函数(@jit(cache=True))发出可移植代码(在同一架构和操作系统中可移植),只需设置NUMBA_CPU_NAME=generic即可。

  1. NUMBA_FUNCTION_CACHE_SIZE

覆盖函数高速缓存的大小,以便在内存中保留最近反序列化的函数。在像 Dask 这样的系统中,通常会对函数进行多次反序列化。只要解释器​​中有某个引用,Numba 就会缓存函数。此高速缓存大小变量控制将保留不再引用的函数的数量,以防它们将来出现。这种实现并不是真正的 LRU,但是对于大多数情况来说,大尺寸的缓存应该足够了。

默认值: 128

2.5.4。 GPU 支持

  1. NUMBA_DISABLE_CUDA

如果设置为非零,则禁用 CUDA 支持。

  1. NUMBA_FORCE_CUDA_CC

如果设置,则强制 CUDA 计算功能为给定版本(类型为major.minor的字符串),而不考虑连接的设备。

  1. NUMBA_ENABLE_CUDASIM

如果设置,请不要编译和执行 GPU 的代码,而是使用 CUDA Simulator。用于调试目的。

2.5.5。线程控制

  1. NUMBA_NUM_THREADS

如果设置,则并行 CPU 目标的线程池中的线程数将采用此值。必须大于零。该值与OMP_NUM_THREADSMKL_NUM_THREADS无关。

默认值: 运行时确定的系统 CPU 核心数,可通过numba.config.NUMBA_DEFAULT_NUM_THREADS访问。

  1. NUMBA_THREADING_LAYER

此环境变量控制用于 CPU 并行目标(@vectorize(target='parallel')@guvectorize(target='parallel')@njit(parallel=True))的并发执行的库。变量类型是字符串,默认情况下是default,它将根据运行时中可用的内容选择线程层。有效值为(有关这些的更多信息,请参见线程层文档):

  • default - 根据当前运行时可用的内容选择线程层。
  • safe - 选择一个既安全又安全的线程层(需要 TBB 包)。
  • forksafe - 选择叉安全的线程层。
  • threadsafe - 选择线程安全的线程层。
  • tbb - 由英特尔 TBB 支持的线程层。
  • omp - 由 OpenMP 支持的线程层。
  • workqueue - 一个简单的内置工作共享任务调度程序。