docs: def GpuUsage(**kargs):
      """ Get the current GPU usage of available GPUs """
      usage = (False, None)
      gpu_status = {'vent_usage': {'dedicated': [], 'mem_mb': {}}}
  
      path_dirs = PathDirs(**kargs)
      path_dirs.host_config()
      template = Template(template=path_dirs.cfg_file)
  
      # get running jobs using gpus
      try:
          d_client = docker.from_env()
          c = d_client.containers.list(all=False,
                                       filters={'label': 'vent-plugin'})
          for container in c:
              if ('vent.gpu' in container.attrs['Config']['Labels'] and
                      container.attrs['Config']['Labels']['vent.gpu'] == 'yes'):
                  device = container.attrs['Config']['Labels']['vent.gpu.device']
                  if ('vent.gpu.dedicated' in container.attrs['Config']['Labels'] and
                          container.attrs['Config']['Labels']['vent.gpu.dedicated'] == 'yes'):
                      gpu_status['vent_usage']['dedicated'].append(device)
                  elif 'vent.gpu.mem_mb' in container.attrs['Config']['Labels']:
                      if device not in gpu_status['vent_usage']['mem_mb']:
                          gpu_status['vent_usage']['mem_mb'][device] = 0
                      gpu_status['vent_usage']['mem_mb'][device] += int(
                          container.attrs['Config']['Labels']['vent.gpu.mem_mb'])
      except Exception as e:  # pragma: no cover
          logger.error('Could not get running jobs ' + str(e))
  
      port = '3476'
      # default docker gateway
      host = '172.17.0.1'
      result = template.option('nvidia-docker-plugin', 'port')
      if result[0]:
          port = result[1]
      result = template.option('nvidia-docker-plugin', 'host')
      if result[0]:
          host = result[1]
      else:
          try:
              # now just requires ip, ifconfig
              route = check_output(('ip', 'route')).decode('utf-8').split('\n')
              default = ''
              # grab the default network device.
              for device in route:
                  if 'default' in device:
                      default = device.split()[4]
                      break
  
              # grab the IP address for the default device
              ip_addr = check_output(('ifconfig', default)).decode('utf-8')
              ip_addr = ip_addr.split('\n')[1].split()[1]
              host = ip_addr
          except Exception as e:  # pragma: no cover
              logger.error('Something with the ip addresses'
                           'went wrong ' + str(e))
  
      # have to get the info separately to determine how much memory is availabe
      nd_url = 'http://' + host + ':' + port + '/v1.0/gpu/info/json'
      try:
          r = requests.get(nd_url)
          if r.status_code == 200:
              status = r.json()
              for i, device in enumerate(status['Devices']):
                  gm = int(round(math.log(int(device['Memory']['Global']), 2)))
                  gpu_status[i] = {'global_memory': 2**gm,
                                   'cores': device['Cores']}
          else:
              usage = (False, 'Unable to get GPU usage request error code: ' +
                       str(r.status_code))
      except Exception as e:  # pragma: no cover
          usage = (False, 'Error: ' + str(e))
  
      # get actual status of each gpu
      nd_url = 'http://' + host + ':' + port + '/v1.0/gpu/status/json'
      try:
          r = requests.get(nd_url)
          if r.status_code == 200:
              status = r.json()
              for i, device in enumerate(status['Devices']):
                  if i not in gpu_status:
                      gpu_status[i] = {}
                  gpu_status[i]['utilization'] = device['Utilization']
                  gpu_status[i]['memory'] = device['Memory']
                  gpu_status[i]['processes'] = device['Processes']
              usage = (True, gpu_status)
          else:
              usage = (False, 'Unable to get GPU usage request error code: ' +
                       str(r.status_code))
      except Exception as e:  # pragma: no cover
          usage = (False, 'Error: ' + str(e))
  
      return usage