Как поделиться списком тензоров в многопроцессорной PyTorch? - PullRequest
0 голосов
/ 07 июня 2018

Я программирую с помощью многопроцессорной обработки PyTorch.Я хочу, чтобы все подпроцессы могли читать / записывать один и тот же список тензоров (без изменения размера).Например, переменная может быть

m = list(torch.randn(3), torch.randn(5))

Поскольку каждый тензор имеет разные размеры, я не могу организовать их в один тензор.

В списке питонов нет функции share_memory_ () и многопроцессорной обработки.Менеджер не может обработать список тензоров.Как я могу разделить переменную m среди нескольких подпроцессов?

1 Ответ

0 голосов
/ 15 июня 2018

Я нахожу решение самостоятельно.Это довольно просто.Просто вызовите share_memory_ () для каждого элемента списка.Сам список не находится в общей памяти, но элементы списка:

Демонстрационный код

import torch.multiprocessing as mp
import torch

def foo(worker,tl):
    tl[worker] += (worker+1) * 1000

if __name__ == '__main__':
    tl = [torch.randn(2), torch.randn(3)]

    for t in tl:
        t.share_memory_()

    print("before mp: tl=")
    print(tl)

    p0 = mp.Process(target=foo, args=(0, tl))
    p1 = mp.Process(target=foo, args=(1, tl))
    p0.start()
    p1.start()
    p0.join()
    p1.join()

    print("after mp: tl=")
    print(tl)

Вывод

before mp: tl=
[
 1.5999
 2.2733
[torch.FloatTensor of size 2]
, 
 0.0586
 0.6377
-0.9631
[torch.FloatTensor of size 3]
]
after mp: tl=
[
 1001.5999
 1002.2733
[torch.FloatTensor of size 2]
, 
 2000.0586
 2000.6377
 1999.0370
[torch.FloatTensor of size 3]
]
...