tjdnbj 2024-02-28 10:33 采纳率: 41.2%
浏览 3
已结题

动手深度学习AlexNet问题提问

以下是我的代码,请问运行后为何会出现DataLoader worker (pid(s) 28432, 17060, 10920, 24856) exited unexpectedly的错误,该如何修改呢?是否和我的电脑硬件是cpu的配置有关?

import time
import torch
from torch import nn,optim
import torchvision

import sys
sys.path.append("C:/Users/zyx20/Desktop/深度学习编程/pythonProject")
import d2lzh_pytorch as d2l
device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
class Alexnet(nn.Module):
    def __init__(self):
        super(Alexnet,self).__init__()
        self.conv=nn.Sequential(nn.Conv2d(1,96,11,4),
                                nn.ReLU(),
                                nn.MaxPool2d(3,2),
                                nn.Conv2d(96,256,5,1,2),
                                nn.ReLU(),
                                nn.MaxPool2d(3,2))
        self.fc=nn.Sequential(
            nn.Linear(256*5*5,4096),
            nn.ReLU(),
            nn.Dropout(),
            nn.Linear(4096,4096),
            nn.ReLU(),
            nn.Dropout(),
            nn.Linear(4096,10)
        )
    def forward(self,img):
        feature=self.conv(img)
        output=self.fc(feature.view(img.shape[0],-1))
        return output
net=Alexnet()

def load_data_fashion_mnist(batch_size,resize=None,root='C:/Users/zyx20/Desktop/深度学习编程/MNIST/raw'):
    #Download the fashion minst dataset and then load into memory#
    trans=[]
    if resize:
        trans.append(torchvision.transforms.Resize(size=resize))
    trans.append(torchvision.transforms.ToTensor())

    transform=torchvision.transforms.Compose(trans)
    mnist_train = torchvision.datasets.FashionMNIST(root=root, train=True,download=True, transform=transform)
    mnist_test = torchvision.datasets.FashionMNIST(root=root, train=False,download=True, transform=transform)

    train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True, num_workers=4)
    test_iter = torch.utils.data.DataLoader(mnist_test, batch_size=batch_size, shuffle=False, num_workers=4)

    return train_iter,test_iter

batch_size=128
train_iter,test_iter=load_data_fashion_mnist(batch_size,resize=124)
#训练
lr,num_epochs=0.001,5
optimizer=torch.optim.Adam(net.parameters(),lr=lr)
d2l.train_ch5(net,train_iter,test_iter,num_epochs,batch_size,optimizer,device,num_epochs)



  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-28 10:35
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,您尝试使用 torch.utils.data.DataLoader 并设置了 num_workers=4,这意味着您希望启动 4 个工作进程来并行加载数据。当出现 "DataLoader worker (pid(s) ...) exited unexpectedly" 错误时,这通常是由于以下几个原因:

    1. 环境问题:多进程模式下,Python 的子进程可能由于某些环境因素(如资源限制、权限不足或系统信号处理异常)而意外退出。
    2. 资源共享冲突:例如,如果您在 CPU 环境下运行,并且 CPU 资源紧张,或者数据集文件被多个worker同时访问导致I/O冲突,可能会导致 worker 进程崩溃。
    3. 数据预处理错误:如果数据预处理过程中存在未捕获的异常,当 worker 进程尝试对某个批次的数据进行预处理时,异常可能导致该进程终止。
    4. CUDA 初始化问题:尽管您已经正确地根据设备情况选择是否使用 CUDA,但在多进程环境下,每个 worker 都需要能够安全地初始化 CUDA。有时候,即使是在 CPU 上运行,也会因全局 CUDA 状态的管理不当而导致问题。

    解决此问题的步骤可以是:

    • 减少工作进程数:首先,您可以尝试将 num_workers 设置为0,以确保问题不是由多进程引起的:
    train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True, num_workers=0)
    test_iter = torch.utils.data.DataLoader(mnist_test, batch_size=batch_size, shuffle=False, num_workers=0)
    
    • 检查代码和数据完整性:确保数据预处理函数没有未处理的异常,以及数据集中不存在损坏或无法读取的图片文件。

    • 环境调整:对于多进程,确保您的操作系统支持足够的并发进程,适当增加系统资源或检查是否有其他程序占用过多资源。

    • CUDA与multiprocessing配合:如果之前有在同一个进程中初始化过CUDA上下文,那么在多进程环境下需要特别注意。可以尝试在每个 worker 中显式初始化 CUDA。

    • 异常捕获:在数据加载的worker进程中添加适当的异常捕获机制,这样即便发生错误也能正常结束进程而不是崩溃。

    请注意,在实际调试中,上述每一步都需结合实际情况逐一排查。对于CPU配置的机器,理论上不应该因为硬件配置直接导致此问题,但确实有可能因资源分配不合理或其他软件层面的因素造成。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月29日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法
  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了