命令行界面
Numba 是一个 Python 包,通常你从 Python 中 import numba
并使用 Python 应用程序编程接口(API)。然而,Numba 也附带了一个命令行接口(CLI),即一个在你安装 Numba 时安装的工具 numba
。
目前,CLI 的唯一目的是让您快速显示有关系统和安装的一些信息,或使用 Numba 快速获取 Python 脚本的调试信息。
用法
要在终端中使用 Numba CLI,请使用 numba
后跟选项和参数,例如 --help
或 -s
,如下所述。
有时当你输入 numba
时可能会遇到“命令未找到”错误,这是因为你的 PATH
没有正确配置。在这种情况下,你可以使用等效的命令 python -m numba
。如果仍然出现“命令未找到”,请尝试按照这里的建议 import numba
:依赖列表。
两个版本 numba
和 python -m numba
是相同的。第一个版本输入更短,但如果你的 PATH
不包含 numba
安装的位置,导致出现“命令未找到”错误,那么使用 python -m numba
变体会很有用。
要在 IPython 或 Jupyter 中使用 Numba CLI,请使用 !numba
,即在命令前加上感叹号。这是执行 shell 命令的通用 IPython/Jupyter 功能,在常规的 python
终端中不可用。
帮助
要查看所有可用选项,请使用 numba --help
:
$ numba --help
usage: numba [-h] [--annotate] [--dump-llvm] [--dump-optimized]
[--dump-assembly] [--annotate-html ANNOTATE_HTML] [-s]
[--sys-json SYS_JSON]
[filename]
positional arguments:
filename Python source filename
optional arguments:
-h, --help show this help message and exit
--annotate Annotate source
--dump-llvm Print generated llvm assembly
--dump-optimized Dump the optimized llvm assembly
--dump-assembly Dump the LLVM generated assembly
--annotate-html ANNOTATE_HTML
Output source annotation as html
-s, --sysinfo Output system information for bug reporting
--sys-json SYS_JSON Saves the system info dict as a json file
系统信息
numba -s
(或等效的 numba --sysinfo
) 命令会打印出关于您的系统和 Numba 安装以及相关依赖项的大量信息。
记住:你可以在 IPython 或 Jupyter 中使用 !numba -s
加上感叹号来查看此信息。
示例输出:
$ numba -s
System info:
--------------------------------------------------------------------------------
__Time Stamp__
Report started (local time) : 2022-11-30 15:40:42.368114
UTC start time : 2022-11-30 15:40:42.368129
Running time (s) : 2.563586
__Hardware Information__
Machine : x86_64
CPU Name : ivybridge
CPU Count : 3
Number of accessible CPUs : ?
List of accessible CPUs cores : ?
CFS Restrictions (CPUs worth of runtime) : None
CPU Features : 64bit aes avx cmov cx16 cx8 f16c
fsgsbase fxsr mmx pclmul popcnt
rdrnd sahf sse sse2 sse3 sse4.1
sse4.2 ssse3 xsave
Memory Total (MB) : 14336
Memory Available (MB) : 11540
__OS Information__
Platform Name : macOS-10.16-x86_64-i386-64bit
Platform Release : 20.6.0
OS Name : Darwin
OS Version : Darwin Kernel Version 20.6.0: Thu Sep 29 20:15:11 PDT 2022; root:xnu-7195.141.42~1/RELEASE_X86_64
OS Specific Version : 10.16 x86_64
Libc Version : ?
__Python Information__
Python Compiler : Clang 14.0.6
Python Implementation : CPython
Python Version : 3.10.8
Python Locale : en_US.UTF-8
__Numba Toolchain Versions__
Numba Version : 0+untagged.gb91eec710
llvmlite Version : 0.40.0dev0+43.g7783803
__LLVM Information__
LLVM Version : 11.1.0
__CUDA Information__
CUDA Device Initialized : False
CUDA Driver Version : ?
CUDA Runtime Version : ?
CUDA NVIDIA Bindings Available : ?
CUDA NVIDIA Bindings In Use : ?
CUDA Detect Output:
None
CUDA Libraries Test Output:
None
__NumPy Information__
NumPy Version : 1.23.4
NumPy Supported SIMD features : ('MMX', 'SSE', 'SSE2', 'SSE3', 'SSSE3', 'SSE41', 'POPCNT', 'SSE42', 'AVX', 'F16C')
NumPy Supported SIMD dispatch : ('SSSE3', 'SSE41', 'POPCNT', 'SSE42', 'AVX', 'F16C', 'FMA3', 'AVX2', 'AVX512F', 'AVX512CD', 'AVX512_KNL', 'AVX512_SKX', 'AVX512_CLX', 'AVX512_CNL', 'AVX512_ICL')
NumPy Supported SIMD baseline : ('SSE', 'SSE2', 'SSE3')
NumPy AVX512_SKX support detected : False
__SVML Information__
SVML State, config.USING_SVML : False
SVML Library Loaded : False
llvmlite Using SVML Patched LLVM : True
SVML Operational : False
__Threading Layer Information__
TBB Threading Layer Available : True
+-->TBB imported successfully.
OpenMP Threading Layer Available : True
+-->Vendor: Intel
Workqueue Threading Layer Available : True
+-->Workqueue imported successfully.
__Numba Environment Variable Information__
None found.
__Conda Information__
Conda Build : not installed
Conda Env : 4.12.0
Conda Platform : osx-64
Conda Python Version : 3.9.12.final.0
Conda Root Writable : True
__Installed Packages__
(output truncated due to length)
调试
如上文帮助输出所示,numba
命令包含了一些选项,可以帮助你调试 Numba 编译的代码。
要尝试一下,创建一个名为 myscript.py
的示例脚本:
import numba
@numba.jit
def f(x):
return 2 * x
f(42)
然后执行以下命令之一:
$ numba myscript.py --annotate
$ numba myscript.py --annotate-html myscript.html
$ numba myscript.py --dump-llvm
$ numba myscript.py --dump-optimized
$ numba myscript.py --dump-assembly