Obtenir des informations telles que l'utilisation du GPU à partir de Python (commande nvidia-smi)

Je veux savoir quel GPU sur le serveur est gratuit → Je me demande si je peux obtenir le taux d'utilisation du GPU à partir du programme ~ J'ai fait un peu de recherche et la commande nvidia-smi que j'utilise toujours donne une sortie lisible par machine en fonction de l'option Je l'ai trouvé.

Option --query-gpu

L'option --query-gpu récupère les informations souhaitées, les traite dans le style de sortie spécifié par l'option --format et les renvoie.

Par exemple, il semble que vous puissiez spécifier les informations suivantes.

--index: numéros de machine matérielle commençant par 0, tels que "0" ou "1" --memory.free: quantité de mémoire GPU libre, telle que "5123 Mio" --memory.used: mémoire GPU utilisée, telle que "3451 Mio" --memory.total: la quantité de mémoire installée dans le GPU, telle que "8113 Mio" --utilization.gpu: utilisation du GPU, comme "12%" --utilization.memory: utilisation de la mémoire GPU, telle que "49%" --Timelink: heure à laquelle la commande nvidia-smi a été exécutée, par exemple "2016/12/16 22: 05: 43.771" --uuid: un identifiant unique et inchangé au monde. Il semble que cela n'a rien à voir avec le numéro apposé sur le GPU, tel que "GPU-92275dc5-b7cc-1a5f-0348-f389e3040f2b"

Il existe de nombreuses autres clés, alors vérifiez-les avec nvidia-smi --help-query-gpu.

option --format

Il est utilisé pour afficher les informations spécifiées par --query-gpu en CSV. --Format = csv est la manière la plus simple de l'appeler, mais vous pouvez également spécifier noheader et nounits.

--noheader: la ligne d'en-tête n'apparaît pas comme la première ligne du CSV --nounits: Par exemple, lorsque vous obtenez l'utilisation du GPU (utlization.gpu), "10%" devient "10".

Vous pouvez les combiner pour créer --format = csv, noheader ou --format = csv, noheader, nounits.

Fonction pour obtenir des informations nvidia-smi en Python

import subprocess
import json

DEFAULT_ATTRIBUTES = (
    'index',
    'uuid',
    'name',
    'timestamp',
    'memory.total',
    'memory.free',
    'memory.used',
    'utilization.gpu',
    'utilization.memory'
)

def get_gpu_info(nvidia_smi_path='nvidia-smi', keys=DEFAULT_ATTRIBUTES, no_units=True):
    nu_opt = '' if not no_units else ',nounits'
    cmd = '%s --query-gpu=%s --format=csv,noheader%s' % (nvidia_smi_path, ','.join(keys), nu_opt)
    output = subprocess.check_output(cmd, shell=True)
    lines = output.decode().split('\n')
    lines = [ line.strip() for line in lines if line.strip() != '' ]

    return [ { k: v for k, v in zip(keys, line.split(', ')) } for line in lines ]


import pprint
pprint.pprint(get_gpu_info())

Cela a fonctionné comme ça.

--Premier argument (nvidia_smi_path): nvidia-smi Définissez ceci lorsque vous souhaitez spécifier le chemin de la commande comme chemin absolu. La valeur par défaut est `` nvidia-smi ''. --Deuxième argument (keys): spécifiez les informations que vous souhaitez obtenir dans l'objet list ou tuple où chaque élément est une chaîne de caractères. Par défaut, il est répertorié dans DEFAULT_ATTRIBUTES dans le code.

Avec cela, si vous demandez bot gpu status avec slack etc., il semble que vous puissiez facilement créer un bot qui vous indiquera l'état d'utilisation du GPU. Enjoy!

Recommended Posts

Obtenir des informations telles que l'utilisation du GPU à partir de Python (commande nvidia-smi)
Obtenez des informations sur la carte BTC / JPY de Python --bitflyer
[Python] Obtenez des informations produit telles que ASIN et JAN avec Amazon PA-API ver5.0
Exécuter des commandes depuis Python
Exécuter la commande depuis Python
Informations obtenues à partir de tweet_id (Python)
Obtenez uniquement la version Python (telle que 2.7.5) sur le shell CentOS 7
Obtenez des informations sur l'alambic avec Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
Obtenir des données de Quandl en Python
À propos de Python, à partir et à l'importation, comme
python Obtenez la météo à venir de l'API météo
Obtenez des informations météorologiques avec Python et le grattage
Liste des commandes telles que Docker / Kubernetes
[Python] Informations sur les lentilles de grattage sur price.com
Obtenez des options en Python à partir des fichiers JSON et des arguments de ligne de commande
Collecter des informations sur Twitter avec Python (API Twitter)
Obtenez des informations sur la propriété en grattant avec python
Obtenir le code HTML de l'élément avec du sélénium Python
Obtenez des taux de change à partir des taux de change ouverts en Python
[Note] Obtenir des données de PostgreSQL avec Python
Récupérer les frappes de / dev / input (python evdev)
Obtenez le niveau de la batterie de SwitchBot avec Python
[Python] Obtenez des informations sur le package Python avec l'API PyPI
Obtenez la probabilité de précipitation de XML avec Python
Appeler des commandes depuis Python (édition Windows)
[Python] Obtenez la couleur principale de la capture d'écran
Obtenir l'historique des métriques de MLflow en Python
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type