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