【Pytorch】【DataLoader】RuntimeError: CUDA error: initialization error

RuntimeError: CUDA error: initialization error

错误详情

  File "~/miniconda3/envs/dx/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 49, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "~/miniconda3/envs/dx/lib/python3.8/site-packages/torch/utils/data/dataset.py", line 261, in __getitem__
    return tuple(tensor[index] for tensor in self.tensors)
  File "~/miniconda3/envs/dx/lib/python3.8/site-packages/torch/utils/data/dataset.py", line 261, in <genexpr>
    return tuple(tensor[index] for tensor in self.tensors)
RuntimeError: CUDA error: initialization error
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

错误原因

数据使用TensorDataset封装,再传入DataLoader中。
DataLoader数据已经在GPU中,导致报错。

...
TRAINING_PROP = 0.8
num_data_sample = data_x.shape[0]
train_x = FloatTensor(data_x[:int(num_data_sample*TRAINING_PROP)]).to(DEVICE)     
train_y = FloatTensor(data_y[:int(num_data_sample*TRAINING_PROP)]).to(DEVICE)   
...
train_dataloder = DataLoader(dataset=TensorDataset(train_x, train_y), 
                             batch_size=BATCH_SIZE, 
                             shuffle=True, 
                             num_workers=8)
...
for step, (batch_x, batch_y) in enumerate(train_dataloder):
    ...
    pred_y = model(batch_x)
    ...

错误解决

参考:
RuntimeError:Cuda error: initialization on dataloader

DataLoader的数据须放在CPU中,在训练的时候再传到GPU

...
num_data_sample = data_x.shape[0]
# 不传到GPU上
train_x = FloatTensor(data_x[:int(num_data_sample*TRAINING_PROP)])    
train_y = FloatTensor(data_y[:int(num_data_sample*TRAINING_PROP)])  
...
train_dataloder = DataLoader(dataset=TensorDataset(train_x, train_y), 
                             batch_size=BATCH_SIZE, 
                             shuffle=True, 
                             num_workers=8)
...
for step, (batch_x, batch_y) in enumerate(train_dataloder):
	# 传到GPU上
    batch_x = batch_x.to(DEVICE) 
    batch_y = batch_y.to(DEVICE) 
    ...
    pred_y = model(batch_x)
    ...
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值