You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程Linux服务器中ImageFolder加载分类数据集卡顿问题求助

PyTorch数据加载阶段卡顿无进展(Linux服务器异常,Windows正常)

问题详情

在Linux服务器上使用ResNet-101或ConvNet执行图像分类任务时,程序在数据加载阶段卡顿无进展,调试时断点停留在数据集加载环节无法继续。但相同代码在Windows笔记本上运行完全正常。

相关界面截图:

  • 运行卡顿状态:运行卡顿界面
  • 调试断点反馈:调试断点反馈

部分核心代码:

def main():
    device = torch.device("cuda:2" if torch.cuda.is_available() else "cpu")
    print("using {} device.".format(device))

    data_transform = {
        "train": transforms.Compose([transforms.RandomResizedCrop(224),
                                     transforms.RandomHorizontalFlip(),
                                     transforms.ToTensor(),
                                     transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]),
        "val": transforms.Compose([transforms.Resize(256),
                                   transforms.CenterCrop(224),
                                   transforms.ToTensor(),
                                   transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])}

    image_path = r"/home/sc/ClassicalNeuralNetwork/dataset/CGIARWheatGrowthStageChallenge"
    assert os.path.exists(image_path), "{} path does not exist.".format(image_path)
    trains_dataset = datasets.ImageFolder(root=os.path.join(image_path, "train"),
                                         transform=data_transform["train"],
                                          target_transform=None)
    train_num = len(trains_dataset)

    flower_list = trains_dataset.class_to_idx
    cla_dict = dict((val, key) for key, val in flower_list.items())
    json_str = json.dumps(cla_dict, indent=4)
    with open('class_indices.json', 'w') as json_file:
        json_file.write(json_str)

    batch_size = 4
    nw = min([os.cpu_count(), batch_size if batch_size > 1 else 0, 4])
    print('Using {} dataloader workers every process'.format(nw))

    train_loader = torch.utils.data.DataLoader(trains_dataset,
                                               batch_size=batch_size, shuffle=True,
                                               num_workers=nw)

    validate_dataset = datasets.ImageFolder(root=os.path.join(image_path, "val"),
                                            transform=data_transform["val"])
    val_num = len(validate_dataset)
    validate_loader = torch.utils.data.DataLoader(validate_dataset,
                                                  batch_size=batch_size, shuffle=False,
                                                  num_workers=nw)

    print("using {} images for training, {} images for validation.".format(train_num,
                                                                           val_num))

    net = resnet101(num_classes=7)
    net = net.cuda(device)

解决方案

1. 调整DataLoader的num_workers参数

Linux下PyTorch多进程数据加载容易出现死锁,尤其是调试场景。先尝试将num_workers设为0(单进程模式):

nw = 0  # 替换原有的min(...)计算逻辑

如果单进程正常,再逐步尝试设置为1、2等,找到服务器能稳定运行的数值。调试时必须将num_workers设为0,否则多进程会导致调试器卡住。

2. 检查数据集文件权限

确认Linux服务器上数据集路径下的所有图片文件、文件夹都能被当前用户读取:

  • 用命令ls -l /home/sc/ClassicalNeuralNetwork/dataset/CGIARWheatGrowthStageChallenge/train查看权限
  • 手动测试读取图片:
from PIL import Image
import os
img_path = os.path.join("/home/sc/ClassicalNeuralNetwork/dataset/CGIARWheatGrowthStageChallenge/train", "your_class_folder", "sample.jpg")
try:
    img = Image.open(img_path)
    print("图片读取成功")
except Exception as e:
    print(f"读取失败:{e}")

3. 禁用pin_memory并调整shuffle设置

当shuffle=True且num_workers>0时,共享内存可能引发死锁。修改DataLoader初始化代码:

train_loader = torch.utils.data.DataLoader(trains_dataset,
                                           batch_size=batch_size, shuffle=True,
                                           num_workers=nw,
                                           pin_memory=False)

4. 验证PyTorch与CUDA版本兼容性

检查服务器上的PyTorch和CUDA版本是否匹配,对比Windows上的运行版本:

import torch
print(f"PyTorch版本:{torch.__version__}")
print(f"CUDA版本:{torch.version.cuda}")

若版本差异较大,尝试安装与Windows一致的PyTorch版本,或确保服务器CUDA驱动与PyTorch兼容。

内容的提问来源于stack exchange,提问作者pointy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:15:27