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

求助:RuntimeError: Trying to resize storage that is not resizable报错原因排查

问题分析与解决方案

这个报错RuntimeError: Trying to resize storage that is not resizable出现在PyTorch DataLoader的collate阶段,结合你的场景(仅5秒音频数据集触发、2秒数据集正常、固定在第19个batch报错),核心原因是某个/某些音频样本转换为spectrogram后生成的Tensor使用了不可调整大小的存储,当default_collate尝试自动拼接batch时触发了错误。以下是具体原因排查和解决方法:

可能的触发原因

  • Tensor存储不可调整:用torch.from_numpy()或torch.as_tensor()将librosa等库生成的numpy数组转为Tensor时,如果原numpy数组是只读视图(比如从文件读取时的特殊内存映射),生成的Tensor会共享原数组的不可变存储,无法被resize。5秒音频的spectrogram数据量更大,处理时更容易触发这种情况,而2秒音频的小数据量刚好避开了存储限制。
  • 异常音频文件:数据集中可能存在损坏、采样率/声道数不一致的5秒音频,导致生成的spectrogram Tensor存在异常存储属性。即使随机拆分数据,这些异常样本总会被分配到第19个batch(比如数据量刚好让该样本落在第19个batch的固定位置),从而每次都触发报错。
  • 多Worker存储冲突:DataLoader的多Worker模式下,可能出现Tensor存储的跨进程共享问题,导致某个Worker中的Tensor存储变为不可调整。2秒音频数据集因为数据量小,Worker处理速度快,未触发该冲突。

解决方法

  1. 强制生成可调整存储的Tensor:
    在Dataset的__getitem__方法中,将spectrogram Tensor转为拥有独立可调整存储的版本:

    # 替换原有的torch.from_numpy()或torch.as_tensor()
    spec = torch.tensor(librosa.feature.melspectrogram(y=audio))
    # 或者对已有Tensor克隆
    spec = torch.from_numpy(librosa.feature.melspectrogram(y=audio)).clone()
    

    确保每个Tensor都有自己的可调整存储,避免default_collate拼接时的resize失败。

  2. 排查异常音频样本:
    临时将DataLoader的num_workers设为0,运行训练时打印每个batch的样本路径,提取第19个batch的所有样本,单独检查这些音频文件的完整性、采样率、声道数是否统一。对异常文件进行修复或移除。

  3. 禁用多Worker或自定义collate_fn:
    临时将num_workers设为0,若不再报错,说明是多Worker导致的存储冲突。可以尝试升级PyTorch版本,或自定义collate_fn手动处理batch拼接:

    def custom_collate_fn(batch):
        processed_batch = []
        for item in zip(*batch):
            if isinstance(item[0], torch.Tensor):
                # 先将每个Tensor转为可调整的,再拼接
                processed = torch.stack([t.clone() for t in item])
                processed_batch.append(processed)
            else:
                processed_batch.append(item)
        return tuple(processed_batch)
    

    在DataLoader中指定collate_fn=custom_collate_fn即可。

内容的提问来源于stack exchange,提问作者Jack Of All Trades

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:05:21