Package: nvgpu
nvgpu- NVIDIA GPU toolsIt provides information about GPUs and their availability for computation.Often we want to train a ML model on one of GPUs installed on a multi-GPU
machine. Since TensorFlow allocates all memory, only one such process can
use the GPU at a time. Unfortunatelynvidia-smiprovides only a text
interface with information about GPUs. This packages wraps it with an
easier to use CLI and Python interface.It's a quick and dirty solution callingnvidia-smiand parsing its output.
We can take one or more GPUs availabile for computation based on relative
memory usage, ie. it is OK with Xorg taking a few MB.In addition we have a fancy table of GPU with more information taken by
python binding to NVML.For easier monitoring of multiple machines it's possible to deploy agents (that
provide the GPU information in JSON over a REST API) and show the aggregated
status in a web application.InstallingFor a user:pipinstallnvgpuor to the system:sudo-HpipinstallnvgpuUsage examplesCommand-line interface:# grab all available GPUsCUDA_VISIBLE_DEVICES=$(nvgpuavailable)# grab at most available GPUCUDA_VISIBLE_DEVICES=$(nvgpuavailable-l1)Print pretty colored table of devices, availability, users, processes:$ nvgpu list
    status    type                 util.      temp.    MHz  users    since    pids    cmd
--  --------  -------------------  -------  -------  -----  -------  ---------------  ------  --------
 0  [ ]       GeForce GTX 1070      0 %          44    139                          
 1  [~]       GeForce GTX 1080 Ti   0 %          44    139  alice    2 days ago       19028   jupyter
 2  [~]       GeForce GTX 1080 Ti   0 %          44    139  bob      14 hours ago     8479    jupyter
 3  [~]       GeForce GTX 1070     46 %          54   1506  bob      7 days ago       20883   train.py
 4  [~]       GeForce GTX 1070     35 %          64   1480  bob      7 days ago       26228   evaluate.py
 5  [!]       GeForce GTX 1080 Ti   0 %          44    139  ?                         9305
 6  [ ]       GeForce GTX 1080 Ti   0 %          44    139Or shortcut:$ nvlPython API:importnvgpunvgpu.available_gpus()# ['0', '2']nvgpu.gpu_info()[{'index':'0','mem_total':8119,'mem_used':7881,'mem_used_percent':97.06860450794433,'type':'GeForce GTX 1070','uuid':'GPU-3aa99ee6-4a9f-470e-3798-70aaed942689'},{'index':'1','mem_total':11178,'mem_used':10795,'mem_used_percent':96.57362676686348,'type':'GeForce GTX 1080 Ti','uuid':'GPU-60410ded-5218-7b06-9c7a-124b77a22447'},{'index':'2','mem_total':11178,'mem_used':10789,'mem_used_percent':96.51994990159241,'type':'GeForce GTX 1080 Ti','uuid':'GPU-d0a77bd4-cc70-ca82-54d6-4e2018cfdca6'},...]Web application with agentsThere are multiple nodes. Agents take info from GPU and provide it in JSON via
REST API. Master gathers info from other nodes and displays it in a HTML page.
Agents can also display their status by default.AgentFLASK_APP=nvgpu.webappflaskrun--host0.0.0.0--port1080MasterSet agents into a config file. Agent is specified either via a URL to a remote
machine or'self'for direct access to local machine. Remove'self'if the
machine itself does not have any GPU. Default isAGENTS = ['self'], so that
agents also display their own status. SetAGENTS = []to avoid this.# nvgpu_master.cfg
AGENTS = [
         'self', # node01 - master - direct access without using HTTP
         'http://node02:1080',
         'http://node03:1080',
         'http://node04:1080',
]NVGPU_CLUSTER_CFG=/path/to/nvgpu_master.cfgFLASK_APP=nvgpu.webappflaskrun--host0.0.0.0--port1080Open the master in the web browser:http://node01:1080.Installing as a serviceOn Ubuntu withsystemdwe can install the agents/master as as service to be
ran automatically on system start.# create an unprivileged system usersudouseradd-rnvgpuCopynvgpu-agent.serviceto:sudovi/etc/systemd/system/nvgpu-agent.serviceSet agents to the configuration file for the master:sudovi/etc/nvgpu.confAGENTS=[# direct access without using HTTP'self','http://node01:1080','http://node02:1080','http://node03:1080','http://node04:1080',]Set up and start the service:# enable for automatic startup at bootsudosystemctlenablenvgpu-agent.service# startsudosystemctlstartnvgpu-agent.service# check the statussudosystemctlstatusnvgpu-agent.service# check the serviceopenhttp://localhost:1080AuthorBohumír Zámečník,Rossum, Ltd.License: MITTODOorder GPUs by priority (decreasing power, decreasing free memory)