Déploiement et Configuration d'un Environnement de Deep Learning sous Linux

Connexion SSH à un Serveur Distant

L'accès distant est indispensable pour interagir avec les serveurs de calcul Linux. La méthode standard pour établir une connexion sécurisée via SSH depuis un terminal (Linux, macOS ou Windows avec OpenSSH) est la suivante :

ssh -p <PORT> <UTILISATEUR>@<ADRESSE_IP>

Pour les utilisateurs nécessitant une interface graphique ou une gestion avancée des transferts de fichiers, des clients SSH et SFTP dédiés peuvent être utilisés pour faciliter l'administration et le déploiement de scripts.

Installation d'Anaconda et Gestion de Python

Pour isoler les dépendances scientifiques, l'utilisation d'Anaconda ou Miniconda est recommandée. Téléchargez le script d'installation depuis le dépôt officiel ou un miroir local, puis exécutez-le en mode silencieux pour une installation propre :

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3

Après l'installation, initialisez le shell et mettez à jour les variables d'environnement :

/opt/miniconda3/bin/conda init bash
source ~/.bashrc

Configuration des Pilotes NVIDIA et de CUDA

Avant d'installer les bibliothèques de calcul parallèle, il est crucial de désactiver le pilote open-source nouveau qui entre en conflit avec les pilotes propriétaires NVIDIA.

echo -e "blacklist nouveau\noptions nouveau modeset=0" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
sudo reboot

Une fois le système redémarré, basculez en mode multi-utilisateur pour installer le pilote NVIDIA sans que le serveur d'affichage ne soit actif :

sudo systemctl isolate multi-user.target
sudo bash NVIDIA-Linux-x86_64-535.129.03.run --silent
sudo systemctl isolate graphical.target

Installation du Toolkit CUDA et de cuDNN

Téléchargez le toolkit CUDA (par exemple, la version 12.2) et exécutez l'installateur en excluant le pilote graphique, car celui-ci a déjà été installé précédemment :

sudo sh cuda_12.2.2_535.129.03_linux.run --silent --toolkit

Ajoutez les chemins CUDA aux variables d'environnement système dans ~/.bashrc :

export CUDA_HOME=/usr/local/cuda-12.2
export LD_LIBRARY_PATH="${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}"
export PATH="${CUDA_HOME}/bin:${PATH}"

Pour cuDNN, extrayez l'archive et copiez les en-têtes et les bibliothèques dynamiques dans le répertoire CUDA :

tar -xvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz
sudo cp cudnn-linux-x86_64-8.9.4.25_cuda12-archive/include/cudnn*.h /usr/local/cuda-12.2/include/
sudo cp cudnn-linux-x86_64-8.9.4.25_cuda12-archive/lib/libcudnn* /usr/local/cuda-12.2/lib64/
sudo chmod a+r /usr/local/cuda-12.2/include/cudnn*.h /usr/local/cuda-12.2/lib64/libcudnn*

Validez l'installation du compilateur CUDA avec la commande nvcc --version.

Déploiement des Frameworks : TensorFlow et PyTorch

Installez les frameworks via pip en vous assurant de sélectionner les versions compatibles avec votre toolkit CUDA.

# Installation de TensorFlow avec support GPU
pip install tensorflow[and-cuda]

# Installation de PyTorch (ex: pour CUDA 12.1)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

Voici un script moderne pour vérifier l'accélération matérielle :

import tensorflow as tf
import torch

# Vérification TensorFlow
gpus_tf = tf.config.list_physical_devices('GPU')
print(f"TensorFlow GPU détectés : {len(gpus_tf)}")

# Vérification PyTorch
if torch.cuda.is_available():
    print(f"PyTorch GPU détecté : {torch.cuda.get_device_name(0)}")
else:
    print("Aucun GPU disponible pour PyTorch.")

Déploiement d'un Serveur Jupyter Distant

Pour permettre l'exécution de notebooks via un navigateur web, configurez JupyterLab. Commencez par générer un hachage de mot de passe sécurisé :

python -c "from jupyter_server.auth import passwd; print(passwd('VotreMotDePasseFort'))"

Créez un fichier de configuration jupyter_server_config.py et adaptez les paramètres suivants :

c.ServerApp.ip = '0.0.0.0'
c.ServerApp.port = 8888
c.ServerApp.open_browser = False
c.ServerApp.root_dir = '/workspace/notebooks'
c.ServerApp.password = 'argon2:...' # Remplacez par le hash généré
c.ServerApp.allow_remote_access = True

Lancez le service en arrière-plan ou via un gestionnaire de processus comme tmux ou systemd :

jupyter lab --config=/chemin/vers/jupyter_server_config.py

Gestion des Environnements Virtuels Python

L'isolation des dépendances est cruciale pour éviter les conflits entre les projets. Voici les approches standard :

Avec Conda

# Création d'un environnement avec des paquets spécifiques
conda create -n projet_cv python=3.10 opencv numpy pandas -y
conda activate projet_cv

# Clonage d'un environnement existant
conda create --name projet_cv_backup --clone projet_cv

Avec Virtualenv et Pip

python3 -m venv .venv_projet
source .venv_projet/bin/activate
pip install -r requirements.txt

# Exportation des dépendances
pip freeze > requirements.txt

Allocation et Surveillance des Ressources GPU

Pour surveiller l'utilisation de la mémoire et le taux d'utilisation des GPU en temps réel, utilisez la commande watch combinée à nvidia-smi :

watch -n 1 nvidia-smi

Si votre serveur dispose de plusieurs GPU et que vous souhaitez restreindre l'exécution d'un script à des cartes spécifiques, définissez la variable d'environnement CUDA_VISIBLE_DEVICES avent l'exécution :

# Utilisation exclusive des GPU 0 et 2
CUDA_VISIBLE_DEVICES=0,2 python train_model.py

Alternativement, cette restriction peut être appliquée directement dans le code Python avant l'initialisation des frameworks :

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1,3"

Intégration avec PyCharm Professionnel

PyCharm permet de développer localement tout en exécutant le code sur le serveur distant. Pour configurer cela :

  1. Accédez aux paramètres du projet et ajoutez un nouvel interpréteur Python de type "SSH Interpreter".
  2. Renseignez les identifiants du serveur distant et spécifiez le chemin de l'exécutable Python (par exemple, celui de votre environnement Conda ou Virtualenv).
  3. Configurez les mappings de synchronisation (Deployment) pour lier le répertoire local du projet à un répertoire absolu sur le serveur distant.
  4. Utilisez le menu "Tools" > "Deployment" > "Browse Remote Host" pour gérer les fichiers directement sur le serveur sans passer par un client SFTP externe.

Étiquettes: Linux deep-learning NVIDIA-CUDA anaconda JupyterLab

Publié le 16 juillet à 03h15