【问题标题】:NOT using multiprocessing but get CUDA error on google colab while using PyTorch DataLoader不使用多处理但在使用 PyTorch DataLoader 时在 google colab 上出现 CUDA 错误
【发布时间】:2023-03-30 02:19:01
【问题描述】:

我已将我的 GitHub 存储库克隆到 google colab 并尝试使用 PyTorch 的 DataLoader 加载数据。

global gpu, device
if torch.cuda.is_available():
    gpu = True
    device = 'cuda:0'
    torch.set_default_tensor_type('torch.cuda.FloatTensor')
    print("Using GPU")
else:
    gpu = False
    device = 'cpu'
    print("Using CPU")

data_transforms = transforms.Compose([
    #transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize([0.3112, 0.2636, 0.2047], [0.2419, 0.1972, 0.1554])
    ])
train_path = '/content/convLSTM/code/data/train/'
val_path = '/content/convLSTM/code/data/val/'
test_path = '/content/convLSTM/code/data/test/'

train_data = datasets.ImageFolder(root=train_path, transform=data_transforms)
val_data = datasets.ImageFolder(root=val_path, transform=data_transforms)
test_data = datasets.ImageFolder(root=test_path, transform=data_transforms)

train_loader = torch.utils.data.DataLoader(
    train_data,
    batch_size=18,
    num_workers=4,
    shuffle=False,
    pin_memory=True
    )

val_loader = torch.utils.data.DataLoader(
    val_data,
    batch_size=18,
    shuffle=False,
    num_workers=4,
    pin_memory=True
    )

test_loader = torch.utils.data.DataLoader(
    test_data,
    batch_size=18,
    shuffle=False,
    num_workers=4,
    pin_memory=True
    )
for batch_idx, (data, target) in enumerate(train_loader):
  print(batch_idx)
  if batch_idx==3:
    break

运行最后一个 for 循环时出现以下错误:

RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method

我尝试了num_workers = 1 而不是4,但错误仍然存​​在。我没有使用任何多处理。

我也试过不设置torch.set_default_tensor_type('torch.cuda.FloatTensor'),但错误仍然存​​在。

Python:3.6.8 | PyTorch:1.3.1

似乎是什么问题?

【问题讨论】:

  • 我只是尝试做test = next(iter(train_loader))而不是整个数据加载器,但我得到了同样的错误。

标签: pytorch google-colaboratory dataloader


【解决方案1】:

不确定您是否已经修复它,但以防其他人阅读此内容,使用 n 件作品激活 pytorch 多处理。要禁用它,您需要拥有默认的工作人员数量,即 0,而不是 1。

尝试将 num_workers 设置为 0 或使用 Torch Multiprocessing submodule

【讨论】:

    【解决方案2】:

    试着把 num_workers=0

    dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True, num_workers=0)
    

    这解决了 Kaggle notebook 的问题

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 2020-03-21
      • 2022-11-04
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2021-01-20
      • 2016-08-20
      相关资源
      最近更新 更多