Manuel d'alchimie du code
Installation de CUDA et SpaCY sur Manjaro
Dans cet article, je vais te montrer comment installer CUDA et CuDNN sur Manjaro pour les utiliser avec SpaCY.
SpaCY une librairie de traitement du langage naturel pour Python basée sur les modèles d'apprentissage profond.
Installation des dépendances pour Manjaro
Nous allons d'abord installer quelques dépendances de base pour le système. J'ai un noyau Linux 5.15, alors si tu as un noyau plus récent, tu devrais adapter le nom du paquet linux515-nvidia
.
sudo pacman -Sy base-devel linux515-nvidia rust
Installation de CUDA 11.5
Nous allons installer la version 11.5 de CUDA sur Manjaro en nous inspirant de ce tutoriel
https://forum.manjaro.org/t/howto-installing-nvidia-cuda-and-cudnn-for-machine-learning/97162
On télécharge l'installateur depuis le site de NVIDIA.
wget https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_495.29.05_linux.run
chmod +x cuda_11.5.1_495.29.05_linux.run
sudo ./cuda_11.5.1_495.29.05_linux.run
On va maintenant ajouter les chemins des bibliothèques CUDA dans le PATH et dans le LD_LIBRARY pour la compilation de packages C.
Comme Manjaro utilise bash et zsh, on va ajouter ces lignes dans les deux fichiers d'initialisation utilisateur:
-
~/.bashrc
-
~/.zshrc
export PATH="${PATH}:/usr/local/cuda-11.5/bin"
export LD_LIBRARY="${LD_LIBRARY}:/usr/local/cuda-11.5/lib64"
On va maintenant exécuter la mise à jour des chemins de librairies de compilation avec ldconfig
sudo su
echo /usr/local/cuda-11.5/lib64 >> /etc/ld.so.conf
ldconfig
exit
Ce code va nous permettre d'extraire les capacités de notre installation et de les enregistrer dans des fichiers de configuration.
if [ -f ~/$CUDA_EXAMPLES_PATH/1_Utilities/deviceQuery/deviceQuery ]; then
~/$CUDA_EXAMPLES_PATH/1_Utilities/deviceQuery/deviceQuery
~/$CUDA_EXAMPLES_PATH/1_Utilities/deviceQuery/deviceQuery | grep "CUDA Capability Major/Minor version number:" > ~/ComputeCapability.CUDA
for i in `sed s'/=/ /g' ~/ComputeCapability.CUDA | awk '{print $6}'`
do
export CUDA_COMPUTE_CAPABILITY=$i
echo "CUDA_COMPUTE_CAPABILITY "$CUDA_COMPUTE_CAPABILITY
awk -v "a=$CUDA_COMPUTE_CAPABILITY" -v "b=10" 'BEGIN {printf "%.0f\n", a*b}' > ~/ComputeCapability.opencv
done
fi
Installation de CuDNN
On peut maintenant installer l'extension CuDNN pour les réseaux de neurones. On va créer des liens symboliques vers toutes les combinaisons de fichiers objets requis.
chmod +x cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz
tar -xf ~/cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz -C ~/
sudo cp cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
cd /usr/local/cuda/lib64
if [ -f libcudnn.so ]; then
sudo rm libcudnn.so
fi
if [ -f libcudnn.so.8 ]; then
sudo rm libcudnn.so.8
fi
sudo ln libcudnn.so.8.3.2 libcudnn.so.8
sudo ln libcudnn.so.8 libcudnn.so
cd /usr/local/cuda-11.5/targets/x86_64-linux/lib
if [ -f libcudnn_adv_infer.so ]; then sudo rm libcudnn_adv_infer.so; fi
if [ -f libcudnn_ops_train.so ]; then sudo rm libcudnn_ops_train.so; fi
if [ -f libcudnn_cnn_train.so ]; then sudo rm libcudnn_cnn_train.so; fi
if [ -f libcudnn_cnn_infer.so ]; then sudo rm libcudnn_cnn_infer.so; fi
if [ -f libcudnn_adv_train.so ]; then sudo rm libcudnn_adv_train.so; fi
if [ -f libcudnn_ops_infer.so ]; then sudo rm libcudnn_ops_infer.so; fi
if [ -f libcudnn_adv_infer.so.8 ]; then sudo rm libcudnn_adv_infer.so.8; fi
if [ -f libcudnn_ops_train.so.8 ]; then sudo rm libcudnn_ops_train.so.8; fi
if [ -f libcudnn_cnn_train.so.8 ]; then sudo rm libcudnn_cnn_train.so.8; fi
if [ -f libcudnn_cnn_infer.so.8 ]; then sudo rm libcudnn_cnn_infer.so.8; fi
if [ -f libcudnn_adv_train.so.8 ]; then sudo rm libcudnn_adv_train.so.8; fi
if [ -f libcudnn_ops_infer.so.8 ]; then sudo rm libcudnn_ops_infer.so.8; fi
sudo ln libcudnn_adv_infer.so.8.3.2 libcudnn_adv_infer.so.8
sudo ln libcudnn_ops_train.so.8.3.2 libcudnn_ops_train.so.8
sudo ln libcudnn_cnn_train.so.8.3.2 libcudnn_cnn_train.so.8
sudo ln libcudnn_cnn_infer.so.8.3.2 libcudnn_cnn_infer.so.8
sudo ln libcudnn_adv_train.so.8.3.2 libcudnn_adv_train.so.8
sudo ln libcudnn_ops_infer.so.8.3.2 libcudnn_ops_infer.so.8
sudo ln libcudnn_adv_infer.so.8 libcudnn_adv_infer.so
sudo ln libcudnn_ops_train.so.8 libcudnn_ops_train.so
sudo ln libcudnn_cnn_train.so.8 libcudnn_cnn_train.so
sudo ln libcudnn_cnn_infer.so.8 libcudnn_cnn_infer.so
sudo ln libcudnn_adv_train.so.8 libcudnn_adv_train.so
sudo ln libcudnn_ops_infer.so.8 libcudnn_ops_infer.so
sudo ldconfig
Création d'un environnement avec Anaconda pour SpaCY
Nous allons créer un environnement de développement pour SpaCY et y installer plusieurs librairies, dont PyTorch et SpaCY
conda create -n spacyvenv conda activate spacyvenv
Installation de PyTorch et SpaCY sur CUDA 11.5
Nous installons PyTorch depuis le dépôt GitHub officiel au lieu d'utiliser Conda. C'est beaucoup moins de trouble comme ça et on s'assure d'avoir la version la plus à jour.
conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses python=3.10
conda install -c pytorch magma-cuda115
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py install
Installation de spaCy et des dépendances. CuPy donne parfois du trouble alors il faut le réinstaller.
git clone https://github.com/explosion/spaCy
cd spaCy
export PYTHONPATH=`pwd`
pip install -r requirements.txt
python setup.py build_ext --inplace
pip install '.[cuda115]'
conda update -n base -c defaults conda
pip install --upgrade pip
pip uninstall cupy-cuda115
pip install cupy-cuda115
Installation des modèles en anglais et en français
Les deux premiers sont des modèles précis entrainés sur des GPU et les deux derniers sont des modèles simples entraînés sur des CPU.
python -m spacy download en_core_web_trf
python -m spacy download fr_dep_news_trf
python -m spacy download en_core_web_sm
python -m spacy download fr_core_news_sm