Ich möchte herausfinden, welche GPU auf dem Server kostenlos ist → Ich frage mich, ob ich die GPU-Nutzungsrate aus dem Programm abrufen kann ~ Ich habe ein wenig nachgeforscht und der Befehl nvidia-smi
, den ich immer verwende, liefert je nach Option eine maschinenlesbare Ausgabe Ich habe das gefunden.
Die Option "--query-gpu" ruft die gewünschten Informationen ab, verarbeitet sie in den durch die Option "--format" angegebenen Ausgabestil und gibt sie aus.
Es scheint beispielsweise, dass Sie die folgenden Informationen angeben können.
--index: Hardware-Maschinennummern, die mit 0 beginnen, z. B. "0" oder "1" --memory.free: Menge an freiem GPU-Speicher, z. B. "5123 MiB" --memory.used: Verwendeter GPU-Speicher, z. B. "3451 MiB" --memory.total: Die in der GPU installierte Speichermenge, z. B. "8113 MiB" --utilization.gpu: GPU-Auslastung wie "12%" --utilization.memory: GPU-Speicherauslastung, z. B. "49%" --Timelink: Die Zeit, zu der der Befehl nvidia-smi ausgeführt wurde, z. B. "2016/12/16 22: 05: 43.771". --uuid: Eine global eindeutige, unveränderliche ID. Es scheint, dass es nichts mit der an der GPU angebrachten Nummer zu tun hat, wie "GPU-92275dc5-b7cc-1a5f-0348-f389e3040f2b".
Es gibt viele andere Schlüssel, also probieren Sie sie mit nvidia-smi --help-query-gpu
aus.
Es wird verwendet, um die durch --query-gpu
angegebenen Informationen an CSV auszugeben. --Format = csv
ist der einfachste Weg, es aufzurufen, aber Sie können auch noheader
und nounits
angeben.
--noheader
: Die Kopfzeile wird nicht als erste Zeile der CSV angezeigt
--nounits
: Wenn Sie beispielsweise die GPU-Auslastung (utlization.gpu) erhalten, wird "10%" zu "10".
Sie können diese kombinieren, um "--format = csv, noheader" oder "--format = csv, noheader, nounits" zu erstellen.
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())
Es hat so funktioniert.
nvidia_smi_path
): nvidia-smi
Legen Sie dies fest, wenn Sie den Befehlspfad als absoluten Pfad angeben möchten. Der Standardwert ist "nvidia-smi".Schlüssel
): Geben Sie die Informationen an, die Sie im Objekt Liste
oder Tupel
erhalten möchten, wobei jedes Element eine Zeichenfolge ist. Standardmäßig ist es im Code unter "DEFAULT_ATTRIBUTES" aufgeführt.no_units
): Legen Sie mit bool
fest, ob Sie Einheiten in den Wert jedes Schlüssels aufnehmen möchten. Der Standardwert ist "True", wobei die Einheit weggelassen wird.
--Rückgabewert:dict
ist der durch das zweite Argument angegebeneWenn Sie den Bot-GPU-Status mit "Slack" usw. fragen, können Sie auf diese Weise leicht einen Bot erstellen, der Ihnen den GPU-Nutzungsstatus anzeigt. Enjoy!
Recommended Posts