Installing PyTorch on Debian bullseye (Debian 11)
• deep-learning • PermalinkI have just rebuilt PyTorch for my Debian bullseye machine (Debian 11 as it will become) from source. This blog post documents how I did this.
System setup
I have the following key packages/libraries installed. There will certainly be others that I have overlooked, of course; please feel free to let me know of anything I’ve overlooked.
- Python:
python3-dev(currently version 3.9.2-2) - Essential packages (according to the PyTorch installation page) are:
ninja-buildcmakelibmagma-devpython3-numpypython3-yamlpython3-setuptoolspython3-cffipython3-typing-extensionspython3-futurepython3-sixpython3-requests
-
The PyTorch website also says that
mklshould be included, which is probably provided by thelibmkl-devpackage. But that provides alternatives to thelibblaslibrary packages, so it fine to install one of the open sourcelibblas-devpackages instead (libblas-dev,libblas64-dev,libopenblas-devorlibopenblas64-dev). -
Though the PyTorch page says that
dataclassesis required, this is only for Python versions less than 3.7, so there is no need to install this. -
CUDA: The Debian non-free archive includes the package
nvidia-cuda-toolkit, which does everything required (unlike the case with TensorFlow). - cuDNN:
libcudnn8-dev(version 8.1.0.77-1+cuda11.2; this package was downloaded directly from the NVIDIA website)
Building PyTorch
I started by following the guidance on the PyTorch installing from source webpage.
Downloading the PyTorch source code
I followed the instructions as given; I also checked out the latest
release branch, which at the time of writing is r1.8.1.
$ git clone --recursive https://github.com/pytorch/pytorch
$ cd pytorch
$ git checkout -t origin/release/1.8
$ git submodule sync
$ git submodule update --init --recursive
(where the last two commands are needed if updating an existing checkout, though they do not do any harm if not).
Pre-build
The version number in the PyTorch sources does not match the official version number for some reason. So I “corrected” it:
$ echo 1.8.1 > version.txt
Building the package
It’s a one-line command:
$ python3 setup.py install --user
This compilation step is pretty long, but that is all that is needed.
To clean the build directory after it had finished, I ran:
$ python3 setup.py clean
Building torchvision and torchaudio
Installing dependencies
torchvision looks for certain graphics libraries during the build.
I’m not sure which are strictly required, but here are the packages to
install to ensure that everything is present (in addition to having
PyTorch itself already installed as above):
libpng-devlibpng-toolslibjpeg-devffmpeglibavcodec-devlibavformat-devlibavutil-devlibswresample-devlibswscale-dev
There is also an extra dependency on python3-scipy in the setup.py
extras_require option; I am unclear whether this is needed.
torchaudio does not have any dependencies beyond PyTorch itself.
Downloading and building
I used pip (or pip3) to install rather than directly using
setup.py, as otherwise the package gets installed in egg format.
I installed torchvision as follows:
$ git clone https://github.com/pytorch/vision.git
$ cd vision
$ git checkout -t origin/release/0.9
$ echo 0.9.1 > version.txt
$ pip install --user .
Cleaning, if needed, apparently still needs to be done via setup.py:
python3 setup.py clean
torchaudio was only a tiny bit trickier:
$ git clone --recursive https://github.com/pytorch/audio.git
$ cd audio
$ git checkout -t origin/release/0.8
$ git submodule sync
$ git submodule update --init --recursive
(As with PyTorch, the last two commands are needed if updating an existing checkout, though they do not do any harm if not).
Then I edited setup.py, modifying lines 14-16 to read:
# Creating the version file
version = '0.8.1'
sha = 'e4e171a51714b2b2bd79e1aea199c3f658eddf9a'
Then a one-line build command:
$ pip install --user .
and I was done.