Многопроцессорная обработка не удалась с одним GPU - PullRequest
0 голосов
/ 27 января 2019

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

Ошибка выполнения

Файл THCudaCheck FAIL = c: \ a \ w \ 1 \ s \ tmp_conda_3.6_091443 \ conda \conda-bld \ pytorch_1544087948354 \ work \ torch \ csrc \ generic \ StorageSharing.cpp line = 232 ошибка = 71: операция не поддерживается
Файл "C: \ Users \ Anaconda3 \ lib \ site-packages \ torch \ multiprocessing \ Reductions.py ", строка 213, в redu_tensor (устройство, дескриптор, storage_size_bytes, storage_offset_bytes) = storage._share_cuda _ ()
RuntimeError: ошибка времени выполнения cuda (71): операция не поддерживается в c: \ a \ w \ 1 \ s\ tmp_conda_3.6_091443 \ conda \ conda-bld \ pytorch_1544087948354 \ work \ torch \ csrc \ generic \ StorageSharing.cpp: 232

Упрощенный пример, который может воспроизводить ошибки

import torch
from torch import nn

# model used to do inference
class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.fc1 = nn.Linear(100,1)

    def forward(self,x):
        return self.fc1(x)

# class running inference
class A(object):
    def __init__(self):
        pass

    def do_something(self, model):
        # do something
        x = torch.randn(100).view(-1)
        print(model.forward(x))

    def run(self):
        mp = torch.multiprocessing.get_context('spawn')
        processes = []

        for i in range(2):
            p = mp.Process(target=self.do_something, args=(Model().cuda(),))
            processes.append(p)

        for p in processes:
            p.start()

if __name__ == '__main__':
    a = A()
    a.run()

Буду очень признателен, если кто-нибудь сможет помочь решить эту проблему.Кстати, мой компьютер работает под управлением Windows 10 с одним графическим процессором GTX 1070.

...