Я работаю над прогнозированием результатов в тензорном потоке, и прогнозирование заняло около 15 минут для каждого элемента в списке. Поэтому я хотел сделать прогноз в установке с несколькими графическими процессорами, в которой имеется 8 графических процессоров, что позволило мне сделать 8 таких прогнозов за 15 минут.
Я слышал, что модуль concurrent.futures в python помогает нам выполнять многопроцессорную обработку в python, и пытался присвоить итерируемый (datatype-list) функции, которая выполняет прогнозирование с использованием ProcessPoolExecutor в concurrent.futures.
def function(list_of_queries , GPU_node = "0"):
os.environ["CUDA_VISIBLE_DEVICES"] = GPU_node
print(os.getpid())
print(os.environ["CUDA_VISIBLE_DEVICES"])
core_config = tf.ConfigProto()
core_config.gpu_options.allow_growth = True
session = tf.Session(config=core_config)
import nvgpu
print(nvgpu.available_gpus(),"is the available gpu")
print(nvgpu.gpu_info())
import nvgpu
print(nvgpu.available_gpus(),"is the available gpu\n")
print(nvgpu.gpu_info())
if tf.test.gpu_device_name():
print('Default GPU Device: {}\n'.format(tf.test.gpu_device_name()))
from tensorflow.python.client import device_lib
local_device_protos = device_lib.list_local_devices()
print([x.name for x in local_device_protos if x.device_type == 'GPU'])
return [list_of_queries, GPU_device]
from tensorflow.python.client import device_lib
def get_available_gpus():
local_device_protos = device_lib.list_local_devices()
return [x.name for x in local_device_protos if x.device_type == 'GPU']
gpus = get_available_gpus()
with concurrent.futures.ProcessPoolExecutor(max_workers = len(gpus)) as executor:
results = [x for x in executor.map(func ,list_of_queries, gpus)]
print('results: ', results)
Я ожидал, что модуль tenorflow-gpu будет использовать все 8 графических процессоров при прогнозировании выходных данных, но вместо этого он полностью использует только один графический процессор и занимает очень мало места в остальных 7 графических процессорах. Я получаю сообщение об ошибке следующим образом: BrokenProcessPool: процесс в пуле процессов был внезапно прерван во время работы или ожидания будущего.
Было бы полезно, если бы вы могли сказать мне, что не так с вышеупомянутым подходом, и если есть способ назначить графические процессоры каждому работнику и заставить их делать прогнозирование с помощью функции предиката_схожего?