Getting Started¶
Installing pre-built conda packages¶
numba-dpex along with its dependencies can be installed using conda.
It is recommended to use conda packages from the anaconda.org/intel channel
to get the latest production releases.
conda create -n numba-dpex-env \
numba-dpex dpnp dpctl dpcpp-llvm-spirv \
-c conda-forge
To try out the bleeding edge, the latest packages built from tip of the main
source trunk can be installed from the dppy/label/dev conda channel.
conda create -n numba-dpex-env \
numba-dpex dpnp dpctl dpcpp-llvm-spirv \
-c dppy/label/dev -c conda-forge
Building from source¶
numba-dpex can be built from source using either conda-build or
setuptools (with scikit-build backend).
Steps to build using conda-build:
Ensure
conda-buildis installed in thebaseconda environment or create a new conda environment withconda-buildinstalled.
conda create -n build-env conda-build
conda activate build-env
Build using the vendored conda recipe
conda build conda-recipe -c conda-forge
Install the conda package
conda install -c local numba-dpex
Steps to build using setup.py:
As before, a conda environment with all necessary dependencies is the suggested first step.
# Create a conda environment that hass needed dependencies installed
conda create -n numba-dpex-env \
scikit-build cmake dpctl dpnp numba dpcpp-llvm-spirv llvmdev pytest \
-c conda-forge
# Activate the environment
conda activate numba-dpex-env
# Clone the numba-dpex repository
git clone https://github.com/IntelPython/numba-dpex.git
cd numba-dpex
python setup.py develop
Building inside Docker¶
A Dockerfile is provided on the GitHub repository to build numba-dpex
as well as its direct dependencies: dpctl and dpnp. Users can either use
one of the pre-built images on the numba-dpex GitHub page or use the
bundled Dockerfile to build numba-dpex from source. Using the Dockerfile
also ensures that all device drivers and runtime libraries are pre-installed.
Building¶
Numba dpex ships with multistage Dockerfile, which means there are different targets available for build. The most useful ones:
runtimeruntime-gpunumba-dpex-builder-runtimenumba-dpex-builder-runtime-gpu
To build docker image
docker build --target runtime -t numba-dpex:runtime ./
To run docker image
docker run -it --rm numba-dpex:runtime
Note
When trying to build a docker image with Intel GPU support, the Dockerfile
will attempt to use the GitHub API to get the latest Intel GPU drivers.
Users may run into an issue related to Github API call limits. The issue
can be bypassed by providing valid GitHub credentials using the
GITHUB_USER and GITHUB_PASSWORD
build args
to increase the call limit. A GitHub
access token
can also be used instead of the password.
Note
When building the docker image behind a firewall the proxy server settings
should be provided using the http_proxy and https_proxy build args.
These build args must be specified in lowercase.
The bundled Dockerfile supports different python versions that can be specified
via the PYTHON_VERSION build arg. By default, the docker image is based on
the official python image based on slim debian. The requested python version
must be from the available python docker images.
The BASE_IMAGE build arg can be used to build the docker image from a
custom image. Note that as the Dockerfile is based on debian any custom base
image should be debian-based, like debian or ubuntu.
The list of other build args are as follows. Please refer the Dockerfile to see currently all available build args.
PYTHON_VERSIONCR_TAGIGC_TAGCM_TAGL0_TAGONEAPI_VERSIONDPCTL_GIT_BRANCHDPCTL_GIT_URLDPNP_GIT_BRANCHDPNP_GIT_URLNUMBA_DPEX_GIT_BRANCHNUMBA_DPEX_GIT_URLCMAKE_VERSIONCMAKE_VERSION_BUILDINTEL_NUMPY_VERSIONINTEL_NUMBA_VERSIONCYTHON_VERSIONSCIKIT_BUILD_VERSIONhttp_proxyhttps_proxyGITHUB_USERGITHUB_PASSWORDBASE_IMAGE
Using the pre-built images¶
There are several pre-built docker images available:
runtimepackage that provides a pre-built environment withnumba-dpexalready installed. It is ideal to quickly setup and try
numba-dpex.
ghcr.io/intelpython/numba-dpex/runtime:<numba_dpex_version>-py<python_version>[-gpu]
builderpackage that has all required dependencies pre-installed and isideal for building
numba-dpexfrom source.
ghcr.io/intelpython/numba-dpex/builder:<numba_dpex_version>-py<python_version>[-gpu]
stagespackage primarily meant for creating a new docker image that isbuilt on top of one of the pre-built images.
After setting up the docker image, to run numba-dpex the following snippet
can be used.
docker run --rm -it ghcr.io/intelpython/numba-dpex/runtime:0.20.0-py3.10 bash
It is advisable to verify the SYCL runtime and driver installation within the container by either running,
sycl-ls
or,
python -m dpctl -f
Note
To enable GPU device, the device argument should be used and one of the
*-gpu images should be used.
For passing GPU into container on linux use arguments --device=/dev/dri.
However if you are using WSL you need to pass
--device=/dev/dxg -v /usr/lib/wsl:/usr/lib/wsl instead.
For example, to run numba-dpex with GPU support on WSL:
docker run --rm -it \
--device=/dev/dxg -v /usr/lib/wsl:/usr/lib/wsl \
ghcr.io/intelpython/numba-dpex/runtime:0.20.0-py3.10-gpu
Testing¶
numba-dpex uses pytest for unit testing and the following example
shows a way to run the unit tests.
python -m pytest --pyargs numba_dpex.tests
Examples¶
A set of examples on how to use numba-dpex can be found in
numba_dpex/examples.