Interrogez-nous, nous vous répondrons !

Collecte de métriques GPU avec Grafana

Il est important de noter que ce paramétrage n'est pas sécurisé. Nous recommandons vivement de lire la documentation pour chaque composant utilisé indépendamment et d'utiliser les fonctionnalités de sécurité intégrées chaque fois que possible.

Dans ce guide, nous allons montrer comment surveiller chaque GPU sur votre serveur et créer de beaux tableaux de bord avec Grafana. Toutes les métriques seront collectées en utilisant l'exportateur Prometheus. L'exportateur appellera périodiquement le binaire nvidia-smi pour lire toutes les valeurs disponibles toutes les quelques secondes.

Installer Grafana

Pour garantir un processus d'installation fluide, il est recommandé d'installer Grafana à partir du dépôt officiel du projet. Avant d'ajouter le dépôt à la liste des sources du gestionnaire de paquets, veuillez vérifier que tous les paquets requis sont présentés dans le système d'exploitation. La commande suivante installe ceux qui manquent :

sudo apt -y install apt-transport-https software-properties-common wget

Créons un répertoire séparé pour les trousseaux de clés :

sudo mkdir -p /etc/apt/keyrings/

Téléchargez et appliquez la clé GPG de Grafana :

wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

Ajoutez le dépôt Grafana en utilisant la clé téléchargée :

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Mettez à jour le cache et installez Grafana :

sudo apt update && sudo apt -y install grafana

Après la fin du processus, vous pouvez lancer l'application :

sudo systemctl start grafana-server.service

Si vous voulez exécuter Grafana en parallèle avec le système d'exploitation :

sudo systemctl enable grafana-server.service

Installer Prometheus

Pour déterminer la version actuelle et accéder au lien de téléchargement du paquet, vous devriez visiter le site officiel du projet. Par exemple, si vous avez besoin d'installer Prometheus v2.47.1, vous pouvez utiliser le lien suivant :

wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz

Décompressez l'archive :

tar xvfz prometheus-2.47.1.linux-amd64.tar.gz

Ouvrez le répertoire décompressé :

cd prometheus-2.47.1.linux-amd64

Copions deux fichiers exécutables dans le répertoire système :

sudo cp prometheus /usr/local/bin
sudo cp promtool /usr/local/bin

Créons un répertoire séparé pour les fichiers de configuration :

sudo mkdir /etc/prometheus

Et copions ces fichiers dedans :

sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus

Créez un fichier de configuration nommé prometheus.yml, qui contiendra les principaux paramètres et cibles de Prometheus :

sudo nano /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
  scrape_interval: 5s
  static_configs:
  - targets: ['localhost:9090']
- job_name: 'nvidia'
  scrape_interval: 5s
  static_configs:
  - targets: ['localhost:9835']

Il y a des options de base et deux cibles :

  1. localhost:9090 - Cette cible est une cible Prometheus intégrée par défaut.
  2. localhost:9835 - Celle-ci sera utilisée pour gratter les métriques à partir de nvidia_smi_exporter.

Appuyez sur Ctrl + X, puis Y, puis Enter pour enregistrer le fichier et quitter l'éditeur de texte. Il est conseillé d'exécuter Prometheus en tant qu'utilisateur dédié, sans accès au shell. Nous vous suggérons de créer un utilisateur de cette façon :

sudo useradd --no-create-home --shell /bin/false prometheus

Bien. Les fichiers exécutables ont été copiés, et les fichiers de configuration sont à leur place. Il est maintenant temps d'informer le système d'exploitation que Prometheus peut être utilisé en tant que démon et géré avec systemd. Exécutez la commande suivante et insérez ce contenu :

sudo systemctl edit --full --force prometheus.service
[Unit]
  Description=Prometheus
  Wants=network-online.target
  After=network-online.target
  [Service]
  User=prometheus
  Group=prometheus
  Type=simple
  ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries
  [Install]
  WantedBy=multi-user.target

Enregistrez et quittez en appuyant sur Ctrl + X, puis Y, puis Enter. Ensuite, vous devez rendre le nouvel utilisateur propriétaire de deux répertoires de travail et de leur contenu :

sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus

Tout est prêt pour démarrer Prometheus. Lancez le démon :

sudo systemctl start prometheus

Vérifiez l'état et vous obtiendrez un résultat comme celui-ci :

sudo systemctl status prometheus
● prometheus.service - Prometheus
  Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2023-10-09 12:44:16 UTC; 5min ago
Main PID: 2223 (prometheus)
   Tasks: 42 (limit: 425060)
  Memory: 96.4M
     CPU: 1.099s
  CGroup: /system.slice/prometheus.service
          └─2223 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml ->
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.263Z caller=head.go:760 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.269Z caller=head.go:760 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.269Z caller=head.go:760 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.270Z caller=head.go:797 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.273Z caller=main.go:1045 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.273Z caller=main.go:1048 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.273Z caller=main.go:1229 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.274Z caller=main.go:1266 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.274Z caller=main.go:1009 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.274Z caller=manager.go:10>

La dernière commande indiquera que le démon Prometheus doit être chargé automatiquement au démarrage du système d'exploitation :

sudo systemctl enable prometheus

Grattage de métriques sous Linux

Toutes les étapes précédentes n'étaient que des préparations. Même si Grafana et Prometheus ont déjà été installés, ils ne savent rien l'un de l'autre. Ajoutons une nouvelle source de données à Grafana. Ouvrez votre navigateur web et tapez l'adresse suivante :

http://[LEADERGPU_IP_ADDRESS]:3000/connections/datasources/new

Pour la première connexion à Grafana, utilisez les identifiants par défaut : admin/admin. Il faut les changer immédiatement après. Sur la page ouverte, choisissez Prometheus :

Ajouter une source de données

Définissez le nom et l'URL de notre instance locale de Prometheus. Par défaut, il fonctionne sur le port 9090 et utilise le protocole HTTP simple :

Dialog New data

Faites défiler jusqu'à la fin et cliquez sur le bouton Save & test. Grafana enverra une courte requête à Prometheus et si tout va bien, vous recevrez un message comme celui-ci :

Sauvegarde des données et test

Maintenant, vous avez besoin d'un tableau de bord officiel prêt à l'emploi fonctionnant avec l'exportateur nvidia_gpu_metrics. Ouvrez le lien suivant dans votre navigateur :

https://grafana.com/grafana/dashboards/14574-nvidia-gpu-metrics/

Vous y avez le bouton Download JSON. Vous n'avez pas besoin de télécharger un fichier JSON. Faites simplement un clic droit dessus et sélectionnez Copy link address :

Obtenir le tableau de bord

Ouvrez l'interface web de Grafana à http://[LEADERGPU_IP_ADDRESS]:3000/, puis cliquez sur le symbole plus et sélectionnez l'option Import dashboard dans le menu :

Dialog Importer le tableau de bord

Insérez le lien copié dans le champ en appuyant sur le raccourci clavier Ctrl + V, puis cliquez sur le bouton Load :

Charger JSON tableau bord

Grafana téléchargera le tableau de bord, et vous devrez sélectionner la source de données précédemment créée, Prometheus, dans le menu déroulant. Ensuite, cliquez sur le bouton Import :

Importer source Prometheus

Un beau tableau de bord s’ouvrira, mais il ne montrera pas encore de données :

Tableau de bord vide

C'est parce que nous n'avons pas encore installé le dernier composant : le nvidia_gpu_exporter. Faisons-le. Ouvrez lien dans votre navigateur web et copiez le lien vers le paquet deb. Vous pouvez maintenant le télécharger à l'aide de l'utilitaire wget :

wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia-gpu-exporter_1.2.0_linux_amd64.deb

Enfin, installez-le :

sudo dpkg -i nvidia-gpu-exporter_1.2.0_linux_amd64.deb

Attendez quelques secondes et vous recevrez les premières données sur votre tableau de bord Grafana :

Tableau de bord avec des données

Profitez de votre nouvel outil de surveillance !

Grattage de métriques sur Windows Server

Le système décrit ci-dessus n'a pas besoin d'être situé sur le même serveur. Par exemple, vous pouvez établir une combinaison de Grafana et Prometheus sur un serveur (même un petit ordinateur à carte unique comme Raspberry Pi sera suffisant) et gratter les métriques GPU à partir d'un serveur distant. Le composant clé du système, nvidia_gpu_exporter, peut fonctionner non seulement sur Linux, mais aussi sur Windows Server. Nous avons préparé des instructions succinctes pour son installation.

Ouvrez PowerShell et exécutez les commandes suivantes séquentiellement. Autorisez l'utilisateur actuel à exécuter des scripts PowerShell :

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Obtenez et installez le gestionnaire de paquets Scoop :

iex "& {$(irm get.scoop.sh)} -RunAsAdmin"

Installez les paquets nssm et git à l'aide de Scoop. Ces paquets sont nécessaires pour obtenir nvidia_gpu_exporter depuis Github et l'installer en tant que service système :

scoop install nssm --global
scoop install git

Scoop gère les applications en les regroupant en collections, appelées seaux. Créons-en un avec l'application nécessaire :

scoop bucket add nvidia_gpu_exporter https://github.com/utkuozdemir/scoop_nvidia_gpu_exporter.git

Maintenant, nous sommes prêts à télécharger et installer l'application :

scoop install nvidia_gpu_exporter/nvidia_gpu_exporter --global

Lorsque l'application démarre, elle utilise le numéro de port 9835. Vous devez configurer le pare-feu de Windows Defender pour accepter les connexions de l'extérieur :

New-NetFirewallRule -DisplayName "Nvidia GPU Exporter" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9835

Dites au système d'exploitation que nvidia_gpu_exporter est un nouveau service et qu'il doit fonctionner pendant le chargement du système d'exploitation :

nssm install nvidia_gpu_exporter "C:\ProgramData\scoop\apps\nvidia_gpu_exporter\current\nvidia_gpu_exporter.exe"

La dernière étape consiste à lancer le service :

Start-Service nvidia_gpu_exporter

Veuillez noter que vous devez ajouter le serveur distant comme cible dans votre prometheus.yml :

…
  - job_name: 'nvidia'
    scrape_interval: 5s
    static_configs:
    - targets: ['REMOTE_SERVER_IP:9835']
…

Voir aussi :



Mis à jour: 28.03.2025

Publié: 25.06.2024


Des questions ? Écrivez-nous!

By clicking «I Accept» you confirm that you have read and accepted the website Terms and Conditions, Privacy Policy, and Moneyback Policy.