Installation#
Currently, we do not provide pre-compiled binaries for DRTK. You will need to build the package from source. The current version of DRTK is 0.1.0.
Prerequisites#
Before installing DRTK, ensure you have the following prerequisites installed:
PyTorch >= 2.1.0
CUDA Toolkit
Additionally, we recommend installing the following packages to run tests and examples:
torchvision
opencv_python
Installing DRTK from GitHub using pip#
The easiest way to install DRTK is by using pip with the GitHub repository directly:
# To install latest
pip install git+https://github.com/facebookresearch/DRTK.git
# To install stable
pip install git+https://github.com/facebookresearch/DRTK.git@stable
Warning
It may take significant amount of time to compile. The time could be 30 minutes or more.
This should be enough in most cases, given that PyTorch, CUDA Toolkit, and Build Essentials for your platform are installed and the environment is correctly configured.
Specifying Architectures#
If you know the CUDA architecture of the device where the code will run, then it would be better to specify it directly, e.g.:
# TORCH_CUDA_ARCH_LIST can use "named" architecture, see table below
TORCH_CUDA_ARCH_LIST="Ampere" install git+https://github.com/facebookresearch/DRTK.git
or specify numerical values for architectures explicitly:
# TORCH_CUDA_ARCH_LIST can combine several architectures separated with semicolon or space.
# Add `+PTX` if you want also to save intermediate byte code for better compatibility.
TORCH_CUDA_ARCH_LIST="8.0;8.6+PTX" install git+https://github.com/facebookresearch/DRTK.git
If TORCH_CUDA_ARCH_LIST
is not specified, DRTK will build for the following architectures by default: 7.2, 7.5, 8.0, 8.6, 9.0.
TORCH_CUDA_ARCH_LIST
can take one or more values from the supported named or numerical architectures list.
When combining values, use a semicolon ; or space to combine numerical values and the + symbol to combine named values.
List of numerical architectures values supported by PyTorch: '3.5', '3.7', '5.0', '5.2', '5.3', '6.0', '6.1', '6.2', '7.0', '7.2', '7.5', '8.0', '8.6', '8.7', '8.9', '9.0', '9.0a'
.
The “named” architectures supported by PyTorch are listed in the table below:
Name |
Arch |
---|---|
Kepler+Tesla |
3.7 |
Kepler |
3.5+PTX |
Maxwell+Tegra |
5.3 |
Maxwell |
5.0;5.2+PTX |
Pascal |
6.0;6.1+PTX |
Volta+Tegra |
7.2 |
Volta |
7.0+PTX |
Turing |
7.5+PTX |
Ampere+Tegra |
8.7 |
Ampere |
8.0;8.6+PTX |
Ada |
8.9+PTX |
Hopper |
9.0+PTX |
Note
We do not test the DRTK package on architectures before Volta.
For more information about TORCH_CUDA_ARCH_LIST
, refer to the PyTorch documentation or view the source code on GitHub.
Installing from a Cloned Repository#
Alternatively, you can install the package from a local repository clone. It could be helpful if you need to modify the package code.
Clone the repository and cd
into it:
git clone https://github.com/facebookresearch/DRTK
cd DRTK
Then, install the package from the path using pip
. Note the --no-build-isolation
flag, it is needed for modern build
system to disable building in a separate, clean Python environment.
The reason is that it will install a default torch
version from pip, which likely will not match the one already installed in the system (due to usage of --index-url
).
pip install . --no-build-isolation
Building and installing a wheel#
To build a wheel run:
# You might need to install `build` first
# pip install --upgrade build
python -m build --wheel --no-isolation
Alternatively, you can use the deprecated CLI of setuptools
:
# You might need to install `wheel` first, though newer versions of setuptools do not require it anymore.
# pip install --upgrade wheel
python setup.py bdist_wheel
Then, you will find a wheel in the dist/
folder. You can install this wheel by running:
pip install dist/drtk-<tags>.whl
where <tags>
are compatibility tags. You can figure them out by listing the dist/
directory. E.g.:
pip install dist/drtk-0.1.0-cp310-cp310-linux_x86_64.whl
Reinstalling the Wheel#
If you have already installed the package using pip
, it will not reinstall the package unless the version number has been incremented.
This behavior can be problematic if you are modifying the package locally and need to reinstall it.
To force a reinstall, add the following arguments: --upgrade --force-reinstall --no-deps
. For example:
pip install --upgrade --force-reinstall --no-deps .
In place build#
For package development, it can be beneficial to do an inplace build with:
# There can be issues with concurrent build jobs, it is safer to specify `-inplace -j 1`
python setup.py build_ext --inplace -j 1
Then you can use the root of the cloned repository as a working directory, and you should be able to do import drtk
and run tests and examples.
Troubleshooting#
1. CUDA Error: No Kernel Image Available#
Example Error Message:
RuntimeError: CUDA error: no kernel image is available for execution on the device
Cause: This error occurs when the CUDA code was not built for the architecture of the device on which the code is running.
Solution: Specify the correct architecture using the TORCH_CUDA_ARCH_LIST
environment variable when building the package. Refer to the examples in the Specifying Architectures section above.
2. Import Error: *.so
Not Found#
Example Error Message:
ImportError: libcudnn.so.9: cannot open shared object file: No such file or directory
Cause: This issue is likely due to build isolation. Since DRTK currently does not distribute pre-compiled binaries, it is hard to get version mismatch otherwise.
Solution: Ensure you include the --no-build-isolation
flag when installing from a local clone to use the correct CUDA and PyTorch libraries from your current environment:
python -m build --wheel --no-isolation
and
pip install . --no-build-isolation
3. Compilation Errors in CUDA or PyTorch headers#
Example Error Message:
error: no suitable conversion function from “const __half” to “unsigned short” exists
Cause: This error typically indicates a compiler version mismatch. It is likely that your C++ or CUDA compiler version is too old to support some of the features.
Solution: Please consult PyTorch and CUDA documentation to figure out what CUDA version is supported by your PyTorch version and what C++ compiler version is needed.
4. C++ Compilation Errors in PyTorch header aten/src/ATen/core/boxing/impl/boxing.h#
Example Error Message:
aten/src/ATen/core/boxing/impl/boxing.h:41:105: error: expected primary-expression before ‘>’ token
Cause: This issue is related to problematic SFINAE logic in template code. It has been observed in some recent versions of PyTorch.
Solution: One recommended solution is to add -std=c++20
to the nvcc arguments, as suggested in this GitHub issue.
This line has already been added to setup.py`
:
nvcc_args.append("-std=c++20")
Warning
If you are using an older version of the CUDA Toolkit, adding this flag might result in an error:
unrecognized command line option '-std=c++20'
In this case, you may need to remove the -std=c++20
flag from setup.py
, or update your CUDA Toolkit to a version that supports C++20.
Note
According to the comments in the GitHub issue, this was fixed in PyTorch v2.4.0 release.