Fix for systems without NVSMI

This commit is contained in:
iperov 2019-01-13 16:38:17 +04:00
parent 4625bcec1c
commit 12383570e8
3 changed files with 60 additions and 58 deletions

View file

@ -64,10 +64,12 @@ class ExtractSubprocessor(SubprocessorBase):
if (type == 'rects' or type == 'landmarks'):
if multi_gpu:
devices = nnlib.device.getDevicesWithAtLeastTotalMemoryGB(2)
else:
if not multi_gpu or len(devices) == 0:
devices = [nnlib.device.getBestDeviceIdx()]
if devices[0] == -1:
devices = []
if len(devices) == 0 or devices[0] == -1:
devices = [0]
devices = [ (idx, nnlib.device.getDeviceName(idx), nnlib.device.getDeviceVRAMTotalGb(idx) ) for idx in devices]
@ -86,34 +88,30 @@ class ExtractSubprocessor(SubprocessorBase):
'detector': self.detector}
if not self.cpu_only:
devices = self.get_devices_for_type(self.type, self.multi_gpu)
if len(devices) != 0:
for (device_idx, device_name, device_total_vram_gb) in devices:
num_processes = 1
if not self.manual and self.type == 'rects' and self.detector == 'mt':
num_processes = int ( max (1, device_total_vram_gb / 2) )
for i in range(0, num_processes ):
client_dict = base_dict.copy()
client_dict['device_idx'] = device_idx
client_dict['device_name'] = device_name if num_processes == 1 else '%s #%d' % (device_name,i)
client_dict['device_type'] = 'GPU'
yield client_dict['device_name'], {}, client_dict
return
print ("No capable GPU's found, falling back to CPU mode.")
num_processes = 1
if not self.manual and self.type == 'rects' and self.detector == 'mt':
num_processes = int ( max (1, multiprocessing.cpu_count() / 2 ) )
for i in range(0, num_processes ):
client_dict = base_dict.copy()
client_dict['device_idx'] = 0
client_dict['device_name'] = 'CPU' if num_processes == 1 else 'CPU #%d' % (i),
client_dict['device_type'] = 'CPU'
for (device_idx, device_name, device_total_vram_gb) in self.get_devices_for_type(self.type, self.multi_gpu):
num_processes = 1
if not self.manual and self.type == 'rects' and self.detector == 'mt':
num_processes = int ( max (1, device_total_vram_gb / 2) )
for i in range(0, num_processes ):
client_dict = base_dict.copy()
client_dict['device_idx'] = device_idx
client_dict['device_name'] = device_name if num_processes == 1 else '%s #%d' % (device_name,i)
client_dict['device_type'] = 'GPU'
yield client_dict['device_name'], {}, client_dict
else:
num_processes = 1
if not self.manual and self.type == 'rects' and self.detector == 'mt':
num_processes = int ( max (1, multiprocessing.cpu_count() / 2 ) )
yield client_dict['device_name'], {}, client_dict
for i in range(0, num_processes ):
client_dict = base_dict.copy()
client_dict['device_idx'] = 0
client_dict['device_name'] = 'CPU' if num_processes == 1 else 'CPU #%d' % (i),
client_dict['device_type'] = 'CPU'
yield client_dict['device_name'], {}, client_dict
#override
def get_no_process_started_message(self):