Вывод / прогнозирование нескольких графических процессоров в Tensorflow - PullRequest
0 голосов
/ 17 мая 2019

Я работаю над прогнозированием результатов в тензорном потоке, и прогнозирование заняло около 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: процесс в пуле процессов был внезапно прерван во время работы или ожидания будущего.

Было бы полезно, если бы вы могли сказать мне, что не так с вышеупомянутым подходом, и если есть способ назначить графические процессоры каждому работнику и заставить их делать прогнозирование с помощью функции предиката_схожего?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...