RAPIDS

From Alliance Doc
Jump to navigation Jump to search
This site replaces the former Compute Canada documentation site, and is now being managed by the Digital Research Alliance of Canada.

Ce site remplace l'ancien site de documentation de Calcul Canada et est maintenant géré par l'Alliance de recherche numérique du Canada.

This page is a translated version of the page RAPIDS and the translation is 100% complete.
Other languages:

Description

RAPIDS est une suite de bibliothèques de logiciels open source de NVIDIA qui sert principalement à l'exécution de pipelines de science des données et d'analyse en Python avec des GPU. La suite s'appuie sur CUDA pour l'optimisation des calculs de bas niveau et fournit des API Python conviviales semblables à celles de Pandas ou Scikit-learn.

Les principales composantes sont :


  • cuDF : bibliothèque Python de DataFrames GPU (selon le format en colonne Apache Arrow) pour le chargement, la fusion, l'agrégation, la sélection et autres manipulations des données.
  • cuML : suite de bibliothèques pour l’implémentation d’algorithmes d’apprentissage machine et de fonctions primitives, qui permet le partage d’API compatibles avec d’autres projets RAPIDS.
  • cuGraph : bibliothèque pour l’analyse de graphiques accélérée par GPU, qui offre une fonctionnalité semblable à NetworkX et est parfaitement intégrée à la plateforme [de science des données] RAPIDS.
  • Cyber Log Accelerators (CLX ou clicks) : collection d’exemples RAPIDS dans les domaines de la sécurité, la science des données et le génie, qui permet d’appliquer rapidement RAPIDS et l’accélération GPU à des cas concrets de cybersécurité.
  • cuxFilter : bibliothèque de connecteurs pour relier facilement des bibliothèques de visualisation et des DataFrames GPU et permet aussi d’utiliser interactivement des graphiques de différentes bibliothèques dans le même tableau de bord.
  • cuSpatial : bibliothèque C++/Python avec accélération GPU pour les systèmes d’information géographique incluant la recherche de points à l’intérieur d’un polygone, la jointure spatiale, les systèmes de coordonnées, les primitives de forme, les distances et l’analyse de trajectoires.
  • cuSignal : accélération GPU dans le traitement des signaux avec CuPy, Numba et l’écosystème RAPID. Dans certains cas, cuSignal est un port direct de Scipy Signal pour utiliser des ressources de calcul via CuPy, mais qui contient aussi des kernels Numba CUDA pour plus d’accélération à des fonctions sélectionnées
  • cuCIM : boîte à outils extensible pour l’accélération GPU des entrées/sorties, la vision par ordinateur et le traitement des primitives, principalement dans le domaine de l’ imagerie médicale.
  • RAPIDS Memory Manager (RMM) : outil de gestion des allocations de mémoire pour cuDF (C++ et Python) et les autres bibliothèques RAPIDS. RMM gère aussi le remplacement des allocations de mémoire CUDA et de la mémoire des périphériques CUDA et effectue rapidement les allocations et désallocations de manière asynchrone en réservant une quantité définie de mémoire.

Images Apptainer

Pour créer une image Apptainer (auparavant Singularity) pour RAPIDS, il faut d’abord trouver et sélectionner une image Docker fournie par NVIDIA.

Trouver une image Docker

Les trois types d’images Docker pour RAPIDS sont : base, runtime et devel. Pour chaque type, plusieurs images sont fournies pour les différentes combinaisons des versions de RAPIDS et de CUDA avec Ubuntu ou CentOS.

  • NVIDIA GPU Cloud (NGC), onglet Tags
    • base : comprend un environnement RAPIDS prêt à l’emploi. Utilisez ce type d’image pour soumettre des tâches à l'ordonnanceur Slurm;
    • runtime : ajoute à l’image de base un serveur Jupyter Notebook et des exemples. Utilisez ce type d’image pour travailler interactivement avec RAPIDS par des notebooks ou des exemples.
  • Docker Hub, onglet Tags
    • devel : comprend l’arborescence source complète de RAPIDS, la chaîne d’outils de compilation, les outils de débogage, les entêtes et les bibliothèques statiques pour développer avec RAPIDS. Utilisez ce type d’image pour implémenter des opérations personnalisées qui ont un accès de bas niveau à des processus CUDA.

NOTE : À partir de la version RAPIDS v23.08, les images de type basesont disponibles ici, les images de type runtime sont remplacées par des images notebooks qui sont disponibles ici, et les images de type devel ne sont plus supportées.

Construire une image Apptainer

Par exemple, si la commande Docker pull pour une image sélectionnée se lit

docker pull nvcr.io/nvidia/rapidsai/rapidsai:cuda11.0-runtime-centos7

avec un ordinateur qui supporte Apptainer, vous pouvez construire une image Apptainer (ici rapids.sif) avec la commande suivante, basée sur l'étiquette pull

[name@server ~]$ apptainer build rapids.sif docker://nvcr.io/nvidia/rapidsai/rapidsai:cuda11.0-runtime-centos7

Le processus prend habituellement de 30 à 60 minutes. Puisque la taille de l’image est grande, assurez-vous que vous avez assez de mémoire et d’espace disque sur le serveur.

Travailler sur une grappe

Une fois que vous avez une image Apptainer pour RAPIDS sur une de nos grappes, vous pouvez demander une session interactive sur un nœud GPU ou soumettre une tâche en lot à l 'ordonnanceur quand votre code RAPIDS est prêt.

Travailler interactivement sur un nœud GPU

Si l’image Apptainer a été construite avec une image Docker de type runtime ou devel, elle inclut un serveur Jupyter Notebook et peut être employée pour explorer RAPIDS interactivement sur un nœud de calcul GPU.
Pour demander une session interactive sur un nœud de calcul GPU, par exemple un GPU de type T4 de Graham, utilisez

[name@gra-login ~]$ salloc --ntasks=1 --cpus-per-task=2 --mem=10G --gres=gpu:t4:1 --time=1:0:0 --account=def-someuser

Quand la ressource est allouée, lancez l’interpréteur RAPIDS sur le nœud GPU avec

[name@gra#### ~]$ module load apptainer
[name@gra#### ~]$ apptainer shell --nv -B /home -B /project -B /scratch  rapids.sif
  • l'option --nv fait le bind mount du périphérique GPU de l’hôte sur le conteneur pour que l’accès au GPU puisse se faire de l’intérieur du conteneur Apptainer;
  • l'option -B fait le bind mount des systèmes de fichiers auxquels vous voulez avoir accès dans le conteneur.

Lorsque l’invite de l’interpréteur change pour Apptainer>, vous pouvez consulter les statistiques pour le GPU dans l'interpréteur pour vous assurer que vous avez accès au GPU.

Apptainer> nvidia-smi

Lancez Conda et activez l’environnement RAPIDS.

Apptainer> source /opt/conda/etc/profile.d/conda.sh
Apptainer> conda activate rapids


Lorsque l’invite change pour (rapids) Apptainer>, vous pouvez lancer le serveur Jupyter Notebook server dans l’environnement RAPIDS; ceci affichera l’URL du serveur.

(rapids) Apptainer> jupyter-lab --ip $(hostname -f) --no-browser

NOTE : À partir de la version 23.08, RAPIDS n'a pas besoin d'être activé après que Conda ait démarré puisque tous les paquets sont inclus dans l'environnnement Conda de base; par exemple, vous pouvez lancer le serveur Jupyter Notebook dans l'environnement de base avec

Apptainer> source /opt/conda/etc/profile.d/conda.sh
Apptainer> jupyter-lab --ip $(hostname -f) --no-browser

Puisqu’un nœud de calcul sur Graham n’est pas connecté directement à l’internet, il faut configurer un tunnel SSH pour faire la redirection de port entre votre ordinateur et le nœud GPU. Pour les détails, voyez comment se connecter à JupyterLab.

Soumettre une tâche

Une fois que votre code RAPIDS est prêt et que vous voulez soumettre une tâche à l’ordonnanceur Slurm, vous devez préparer un fichier script pour soumettre la tâche et un autre pour la faire exécuter.

Script de soumission

File : submit.sh

#!/bin/bash
#SBATCH --gres=gpu:t4:1
#SBATCH --cpus-per-task=2
#SBATCH --mem=10G
#SBATCH --time=dd:hh:mm
#SBATCH --account=def-someuser
module load apptainer
Apptainer exec --nv -B /home -B /scratch rapids.sif /path/to/run_script.sh


Script d'exécution

File : run_script.sh

#!/bin/bash
source /opt/conda/etc/profile.d/conda.sh
conda activate rapids     # nécessaire seulement avec  RAPIDS v.23.06 ou précédentes 
nvidia-smi 
python /path/to/my_rapids_code.py


Références