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é.
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
.
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
.
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.
no_units
): Définissez avec bool
si vous voulez inclure des unités dans la valeur de chaque clé. La valeur par défaut est «True», en omettant l'unité.list
avec des éléments dict
pour le nombre d'unités GPU
--Chaque clé de dict
est celle spécifiée par le deuxième argumentdict
est une chaîne d'octets (si vous voulez traiter ʻindex ou ʻutilization.gpu
comme un nombre, utilisez ʻint ()`)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