.. _fix_gpu_linking:
Fixing problems with GPU
========================
If you use GPU acceleration with CuPy you should be somewhat
aware of the CUDA installation on the HPC that you are using.
If you have some linking issues, then a quick fix can be to
set **LD_LIBRARY_PATH**. This is not the most elegant method,
but usually it is the easiest to set up. For example if CuPy
cannot find **libnvrtc.so.11.2** on the HPC that we use you
can set:
.. code-block:: bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/software/packages/cuda/12.3/targets/x86_64-linux/lib
If you have no idea where to find the libraries that CuPy tries
to access, then you should read `this
`_ page of
the documentation of CUDA. Here is a quick summary for the
recommended way to set up for Linux users:
1. If you are using HPC, then usually you can load CUDA by first
finding the module that you need:
.. code-block:: bash
module spider cuda
grogupy uses CuPy for GPU acceleration, you can read more about
which CUDA version CuPy supports `here
`_, but currently it
can work with every major CUDA version, so you should choose the
default for simplicity. Then you can load the CUDA that you choose:
.. code-block:: bash
module load
If you are using your own machine then you can get your CUDA version
by running
.. code-block:: bash
nvcc --version
2. Then you should choose a Python module, which should be the
same that you will use in the sbatch script and load it as well in a similar way.
3. At this point the CUDA and Python version should be resolved,
now you should install grogupy with GPU acceleration:
.. code-block:: bash
python -m pip install grogupy[gpu]
You should use ``python -m``, so you do not use another install of pip
by accident.
4. Now you can install the nvidia index, where you can get the
missing libraries:
.. code-block:: bash
python3 -m pip install --upgrade setuptools pip wheel
python3 -m pip install nvidia-pyindex
5. Finally you have to find out which nvidia package contains the missing
library. You should take a look at the Metapackages chapter in the
documentation of CUDA above. The names are quite descriptive if you
are missing **libnvrtc.so.11.2**, then you should install
**nvidia-cuda-nvrtc-cu11**, if you use CUDA 12, then change the
version number to 12. Now install the choosen library:
.. code-block:: bash
python3 -m pip install
6. If you did everything as advised, then the missing CUDA
library should
be in the **nvidia** folder in the **site-packages** of the used
Python version. Usually it is in
**/home//.local/lib/python3.9/site-packages/nvidia**. If you
used a different Python, for example one that was installed by Conda,
then you can find the folder by running:
.. code-block:: bash
which python3
The **site-packages** will be one level up, next to **bin**.
7. Finally you can link the appropriate library to CuPy:
.. code-block:: bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home//.local/lib/python3.9/site-packages/nvidia//lib