Installation¶
Numba is compatible with Python 3.6 or later, and Numpy versions 1.15 or later.
Our supported platforms are:
- Linux x86 (32-bit and 64-bit)
- Linux ppcle64 (POWER8)
- Windows 7 and later (32-bit and 64-bit)
- OS X 10.9 and later (64-bit)
- NVIDIA GPUs of compute capability 2.0 and later
- AMD ROC dGPUs (linux only and not for AMD Carrizo or Kaveri APU)
- ARMv7 (32-bit little-endian, such as Raspberry Pi 2 and 3)
- ARMv8 (64-bit little-endian, such as the NVIDIA Jetson)
Automatic parallelization with @jit is only available on 64-bit platforms.
Installing using conda on x86/x86_64/POWER Platforms¶
The easiest way to install Numba and get updates is by using conda , a cross-platform package manager and software distribution maintained by Anaconda, Inc. You can either use Anaconda to get the full stack in one download, or Miniconda which will install the minimum packages required for a conda environment.
Once you have conda installed, just type:
$ conda install numba
$ conda update numba
Note that Numba, like Anaconda, only supports PPC in 64-bit little-endian mode.
To enable CUDA GPU support for Numba, install the latest graphics drivers from NVIDIA for your platform. (Note that the open source Nouveau drivers shipped by default with many Linux distributions do not support CUDA.) Then install the cudatoolkit package:
$ conda install cudatoolkit
You do not need to install the CUDA SDK from NVIDIA.
Installing using pip on x86/x86_64 Platforms¶
Binary wheels for Windows, Mac, and Linux are also available from PyPI. You can install Numba using pip :
$ pip install numba
This will download all of the needed dependencies as well. You do not need to have LLVM installed to use Numba (in fact, Numba will ignore all LLVM versions installed on the system) as the required components are bundled into the llvmlite wheel.
To use CUDA with Numba installed by pip , you need to install the CUDA SDK from NVIDIA. Please refer to Setting CUDA Installation Path for details. Numba can also detect CUDA libraries installed system-wide on Linux.
Enabling AMD ROCm GPU Support¶
The ROCm Platform allows GPU computing with AMD GPUs on Linux. To enable ROCm support in Numba, conda is required, so begin with an Anaconda or Miniconda installation with Numba 0.40 or later installed. Then:
- Follow the ROCm installation instructions.
- Install roctools conda package from the numba channel:
$ conda install -c numba roctools
See the roc-examples repository for sample notebooks.
Installing on Linux ARMv7 Platforms¶
Berryconda is a conda-based Python distribution for the Raspberry Pi. We are now uploading packages to the numba channel on Anaconda Cloud for 32-bit little-endian, ARMv7-based boards, which currently includes the Raspberry Pi 2 and 3, but not the Pi 1 or Zero. These can be installed using conda from the numba channel:
$ conda install -c numba numba
Berryconda and Numba may work on other Linux-based ARMv7 systems, but this has not been tested.
Installing on Linux ARMv8 (AArch64) Platforms¶
We build and test conda packages on the NVIDIA Jetson TX2, but they are likely to work for other AArch64 platforms. (Note that while the Raspberry Pi CPU is 64-bit, Raspbian runs it in 32-bit mode, so look at Installing on Linux ARMv7 Platforms instead.)
Conda-forge support for AArch64 is still quite experimental and packages are limited, but it does work enough for Numba to build and pass tests. To set up the environment:
- Install conda4aarch64. This will create a minimal conda environment.
- Add the c4aarch64 and conda-forge channels to your conda configuration:
$ conda config --add channels c4aarch64 $ conda config --add channels conda-forge
$ conda install -c numba numba
On CUDA-enabled systems, like the Jetson, the CUDA toolkit should be automatically detected in the environment.
Installing from source¶
Installing Numba from source is fairly straightforward (similar to other Python packages), but installing llvmlite can be quite challenging due to the need for a special LLVM build. If you are building from source for the purposes of Numba development, see Build environment for details on how to create a Numba development environment with conda.
If you are building Numba from source for other reasons, first follow the llvmlite installation guide. Once that is completed, you can download the latest Numba source code from Github:
$ git clone git://github.com/numba/numba.git
Source archives of the latest release can also be found on PyPI. In addition to llvmlite , you will also need:
- A C compiler compatible with your Python installation. If you are using Anaconda, you can use the following conda packages:
- Linux x86 : gcc_linux-32 and gxx_linux-32
- Linux x86_64 : gcc_linux-64 and gxx_linux-64
- Linux POWER : gcc_linux-ppc64le and gxx_linux-ppc64le
- Linux ARM : no conda packages, use the system compiler
- Mac OSX: clang_osx-64 and clangxx_osx-64 or the system compiler at /usr/bin/clang (Mojave onwards)
- Windows: a version of Visual Studio appropriate for the Python version in use
Then you can build and install Numba from the top level of the source tree:
$ python setup.py install
Dependency List¶
Numba has numerous required and optional dependencies which additionally may vary with target operating system and hardware. The following lists them all (as of September 2019).
- Required build time:
- setuptools
- numpy
- llvmlite
- Compiler toolchain mentioned above
- OpenMP C headers and runtime libraries compatible with the compiler toolchain mentioned above and accessible to the compiler via standard flags (Linux, Windows).
- llvm-openmp (OSX) — provides headers for compiling OpenMP support into Numba’s threading backend
- intel-openmp (OSX) — provides OpenMP library support for Numba’s threading backend.
- tbb-devel — provides TBB headers/libraries for compiling TBB support into Numba’s threading backend
- setuptools
- numpy
- llvmlite
- scipy — provides cython bindings used in Numba’s np.linalg.* support
- tbb — provides the TBB runtime libraries used by Numba’s TBB threading backend
- jinja2 — for “pretty” type annotation output (HTML) via the numba CLI
- cffi — permits use of CFFI bindings in Numba compiled functions
- intel-openmp — (OSX) provides OpenMP library support for Numba’s OpenMP threading backend
- ipython — if in use, caching will use IPython’s cache directories/caching still works
- pyyaml — permits the use of a .numba_config.yaml file for storing per project configuration options
- colorama — makes error message highlighting work
- icc_rt — (numba channel) allows Numba to use Intel SVML for extra performance
- pygments — for “pretty” type annotation
- gdb as an executable on the $PATH — if you would like to use the gdb support
- Compiler toolchain mentioned above, if you would like to use pycc for Ahead-of-Time (AOT) compilation
- r2pipe — required for assembly CFG inspection.
- radare2 as an executable on the $PATH — required for assembly CFG inspection. See here for information on obtaining and installing.
- graphviz — for some CFG inspection functionality.
- sphinx
- pygments
- sphinx_rtd_theme
- numpydoc
- make as an executable on the $PATH
Checking your installation¶
You should be able to import Numba from the Python prompt:
$ python Python 3.8.1 (default, Jan 8 2020, 16:15:59) [Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numba >>> numba.__version__ '0.48.0'
You can also try executing the numba —sysinfo (or numba -s for short) command to report information about your system capabilities. See Command line interface for further information.
$ numba -s System info: -------------------------------------------------------------------------------- __Time Stamp__ 2018-08-28 15:46:24.631054 __Hardware Information__ Machine : x86_64 CPU Name : haswell CPU Features : aes avx avx2 bmi bmi2 cmov cx16 f16c fma fsgsbase lzcnt mmx movbe pclmul popcnt rdrnd sse sse2 sse3 sse4.1 sse4.2 ssse3 xsave xsaveopt __OS Information__ Platform : Darwin-17.6.0-x86_64-i386-64bit Release : 17.6.0 System Name : Darwin Version : Darwin Kernel Version 17.6.0: Tue May 8 15:22:16 PDT 2018; root:xnu-4570.61.1~1/RELEASE_X86_64 OS specific info : 10.13.5 x86_64 __Python Information__ Python Compiler : GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final) Python Implementation : CPython Python Version : 2.7.15 Python Locale : en_US UTF-8 __LLVM information__ LLVM version : 6.0.0 __CUDA Information__ Found 1 CUDA devices id 0 GeForce GT 750M [SUPPORTED] compute capability: 3.0 pci device id: 0 pci bus id: 1
(output truncated due to length)
© Copyright 2012-2020, Anaconda, Inc. and others
Ошибка при установке numba
Пишу в командную консоль: pip install numba Но почему-то выдает такую ошибку, не могу понять в чем дело, Visual Stubio стоит последний и все к нему драйвера:
ERROR: Command errored out with exit status 1: command: 'c:\users\musix\appdata\local\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\musix\\AppData\\Local\\Temp\\pip-install-m2_iwcks\\llvmlite_b3cf5be956a8463a8b756702ce3bd223\\setup.py'"'"'; __file__='"'"'C:\\Users\\musix\\AppData\\Local\\Temp\\pip-install-m2_iwcks\\llvmlite_b3cf5be956a8463a8b756702ce3bd223\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\musix\AppData\Local\Temp\pip-record-w_b7naza\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\musix\appdata\local\programs\python\python39\Include\llvmlite' cwd: C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ Complete output (27 lines): running install running build got version from file C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\llvmlite/_version.py running build_ext c:\users\musix\appdata\local\programs\python\python39\python.exe C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ffi\build.py Trying generator 'Visual Studio 15 2017 Win64' Traceback (most recent call last): File "C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ffi\build.py", line 191, in main() File "C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ffi\build.py", line 179, in main main_win32() File "C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ffi\build.py", line 88, in main_win32 generator = find_win32_generator() File "C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ffi\build.py", line 76, in find_win32_generator try_cmake(cmake_dir, build_dir, generator) File "C:\Users\musix\AppData\Local\Temp\pip-install-m2_iwcks\llvmlite_b3cf5be956a8463a8b756702ce3bd223\ffi\build.py", line 28, in try_cmake subprocess.check_call(['cmake', '-G', generator, cmake_dir]) File "c:\users\musix\appdata\local\programs\python\python39\lib\subprocess.py", line 368, in check_call retcode = call(*popenargs, **kwargs) File "c:\users\musix\appdata\local\programs\python\python39\lib\subprocess.py", line 349, in call with Popen(*popenargs, **kwargs) as p: File "c:\users\musix\appdata\local\programs\python\python39\lib\subprocess.py", line 947, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "c:\users\musix\appdata\local\programs\python\python39\lib\subprocess.py", line 1416, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] Не удается найти указанный файл error: command 'c:\\users\\musix\\appdata\\local\\programs\\python\\python39\\python.exe' failed with exit code 1 ---------------------------------------- ERROR: Command errored out with exit status 1: 'c:\users\musix\appdata\local\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\musix\\AppData\\Local\\Temp\\pip-install-m2_iwcks\\llvmlite_b3cf5be956a8463a8b756702ce3bd223\\setup.py'"'"'; __file__='"'"'C:\\Users\\musix\\AppData\\Local\\Temp\\pip-install-m2_iwcks\\llvmlite_b3cf5be956a8463a8b756702ce3bd223\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\musix\AppData\Local\Temp\pip-record-w_b7naza\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\musix\appdata\local\programs\python\python39\Include\llvmlite' Check the logs for full command output.Отслеживать
задан 20 янв 2021 в 8:08
349 3 3 серебряных знака 14 14 бронзовых знаковpypi.org/project/numba Python versions: 3.6-3.8 а у вас питон 3.9 , попробуйте поставить версию пониже
20 янв 2021 в 8:47
numba.pydata.org Numba supports Python 2.7 and 3.4-3.7 а на их сайте версии ещё ниже поддерживаются.
20 янв 2021 в 8:53Я установил более старую версию Python, 2.7 и 3.7.9, прописываю так же pip install numba и все равно так же вылезает эта же ошибка, может я что-то не так делаю?
Не устанавливается библиотека numba. Как решить?
Судя по pypi.org данный пакет бинарно совместим с Python >=3.7, <3.10. А из исходников собрать для 3.10 не удастся. См. гитхаб issue. Ответ написан более года назад Нравится 1 2 комментария
Капсамун Артем @Art5 Автор вопроса
спасибо, помоглоКапсамун Артем, Тогда пометьте, что мой ответ — решение.
P.S. Ну и у данного пакета есть несколько альтернатив, на habr.com была относительно недавно статья. Что-то про сравнение быстродействия питона с другими языками. Надо комментарии смотреть. И мне тоже, я numbа немного использовал, а застревать на 3.9 не хочется.
Ответы на вопрос 0
Ваш ответ на вопросВойдите, чтобы написать ответ
- pip
Как исправить Проблемы с установкой Numpy?
- 1 подписчик
- 17 нояб.
- 23 просмотра

- pip
Python почему не устанавливается aiogram?
- 1 подписчик
- 13 нояб.
- 136 просмотров

- Docker
- +1 ещё
Почему возникает ошибка установки зависимостей pip в docker container?
- 1 подписчик
- 12 нояб.
- 103 просмотра
Как увеличить скорость работы Python с Numba
Python – это интерпретируемый язык. Это означает, что код Python не компилируется напрямую в машинный код, а интерпретируется в режиме реального времени другой программой, называемой интерпретатором (в большинстве случаев CPython).
524 показа
4K открытийЭто одна из причин, почему Python обеспечивает такую большую гибкость (динамическая типизация, работает везде и т.д.) по сравнению с компилируемыми языками. Однако именно поэтому Python медленный.
На самом деле существует несколько способов разогнать код на Python. Самыми популярными из них являются:
- использование Cython;
- использование PyPy;
- расширение Python с использованием C/C++.
Cython позволяет напрямую вызывать библиотечные функции C и эффективно работать с большими данными. Но обладает и минусами, главными из которых являются «свой» синтаксис, который предполагает знание C, и сложности в отладке. Код Python можно ускорить, написав нативный код, но тогда использование Cython не даст прироста скорости близкой к известному PyPy.
PyPy использует технику, известную как мета-трассировка, которая преобразует интерпретатор в компилятор трассировки JIT (Just-in-time), т.е. выполнение кода включает в себя компиляцию. PyPy имеет высокую скорость, которая не уступает Cython, рационально обращается с памятью, но несмотря на совместимость со многими базовыми библиотеками Python, PyPy поддерживает далеко не все из них, и к тому же для выполнения Python-кода могут потребоваться его некоторые изменения.
Расширение Python с помощью C/C++ дает возможность добавлять новые встроенные модули в Python без труда, однако требует умения программировать на C. С помощью таких модулей можно реализовывать новые встроенные типы объектов и вызывать библиотечные функции C.
Вышеупомянутые методы требуют использования языка, отличного от Python, или компиляции кода для его работы с Python. Эти варианты не самые удобные и не всегда просты в настройке. Возникает вопрос, как быть тем, кто абсолютно не знаком с C/C++ и не желает такого знакомства. К счастью, выход есть всегда, и пакет Numba — прекрасное решение, которое поможет значительно ускорить код, не отказываясь от дружелюбного Python.
Numba & JIT compilation
Numba – это компилятор с открытым исходным кодом, использующий подход LLVM (Low Level Virtual Machine). Numba использует компиляцию JIT (Just-in-time) – это означает, что компиляция выполняется во время выполнения кода Python, а не раньше!
Установлю Numba с помощью pip.
pip install numba
Рассмотрю простой пример с проверкой числа на простоту.
Для использования Numba нужно просто импортировать декоратор (@njit) и добавить его к функции.
import math #Импортируем njit from numba import njit def isPrime(n): for i in range(2, int(math.sqrt(n)+1)): if n % i == 0: return False return n>1 def test(n): for i in range(n): isPrime(n) #добавим numba декоратор, чтобы функция работала быстрее @njit def isPrime(n): for i in range(2, int(math.sqrt(n)+1)): if n % i == 0: return False; return n>1; @njit def test_with_numba(n): for i in range(n): isPrime(n)
Посмотрю на результаты:
В таком представлении Numba смотрится слишком хорошим, чтобы быть правдой. Но у него наверняка есть свои недостатки.
Первый вызов функции, декорированной с использованием Numba, запускается долго. Это связано с тем, что Numba пытается выяснить типы параметров и скомпилировать функцию при первом её выполнении. Чтобы уменьшить затраты времени на компиляцию при каждом вызове программы на Python, можно записать результат компиляции функции в файловый кэш. Сделать это можно, добавив в аргументы к декоратору @njit(cache=True), и тогда последующие запуски кода будут быстрыми.
Не весь код на Python будет скомпилирован с Numba. Например, если вы используете смешанные типы для одной и той же переменной или для элементов списка, вы получите ошибку. Для контроля типов переменных в numba есть способ, позволяющий сразу определить тип функции и типы входящих переменных, например, добавив строку с нужными типами в декоратор. Проиллюстрирую типизацию на примере функции сложения с декоратором @vectorize:
import numpy as np from numba import vectorize, int64, int32, float32, float64 @vectorize([float64(float64, float64)]) def sum_numbers(x, y): return x + y
Передавая несколько типов, следует помнить, что порядок передачи последовательности типов должен следовать от наиболее конкретных к наименее (т. е. тип с плавающей запятой одинарной точности должен описываться раньше типа с плавающей запятой двойной точности), иначе диспетчеризация на основе типов не будет работать должным образом.
@vectorize([int32(int32, int32), int64(int64, int64), float32(float32, float32), float64(float64, float64)]) def sum_numbers_multitype(x, y): return x + y
Функция будет работать для указанных типов, однако с другими типами выдаст ошибку:
Numba создан специально с учетом Numpy и очень удобен для массивов Numpy. Как известно, Pandas основан на Numpy: поддерживает конвертацию структур данных Numpy в свои собственные структуры и наоборот. Данная особенность позволяет использовать Numba не только в паре с Numpy, но и с Pandas. Это приводит к сумасшедшей оптимизации при использовании пользовательских функций или даже при выполнении различных операций в любимой многими структуре данных pandas.DataFrame.
Рассмотрю ещё два примера:
import numpy as np import pandas as pd n = 1_000_000 df = pd.DataFrame(< 'x': np.random.random(n), 'y': 100 * np.random.random(n) >)
Воспользуюсь декоратором @vectorize, он позволяет использовать функции Python, принимающие скалярные входные аргументы, в качестве ufuncs.
Вычислю квадрат Х в наборе данных:
from numba import vectorize def squared_without_numba(x): return x ** 2 @vectorize def squared_with_numba(x): return x ** 2
Также посмотрю на применение Numba с методом @njit(parallel=True), который позволяет автоматически распараллелить выполнение кода в функции на разных ядрах CPU, но там, где это возможно.
from numba import njit @njit(parallel=True) def test_with_numba(x, y): n = len(x) result = np.empty(n, dtype=»float64″) for i, (x, y) in enumerate(zip(x, y)): result[i] = x**2 + y ** 2 return result
Приведенные примеры показали, что Numba позволяет сократить время выполнения кода и является простым способом сделать ваш код намного быстрее без особых усилий.
Попробуйте и убедитесь в этом лично!
