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

基于PyTorch微调T5-small(XSum数据集)时栈尺寸错误的解决方法

解决RuntimeError: stack expects each tensor to be equal size问题

这个错误的核心原因是训练循环中尝试堆叠(stack)长度不一致的张量,通常是因为输入/输出序列未做统一padding,导致同一个batch内的样本维度不匹配。以下是具体解决步骤:

1. 用Seq2Seq专用数据整理器自动处理padding

直接使用Hugging Face的DataCollatorForSeq2Seq,它会自动对batch内的输入、标签做padding,同时将标签的padding部分设为-100(T5损失函数会忽略该值,避免无效计算)。

from transformers import AutoTokenizer, DataCollatorForSeq2Seq
from torch.utils.data import DataLoader

# 初始化tokenizer和数据整理器
tokenizer = AutoTokenizer.from_pretrained("t5-small")
data_collator = DataCollatorForSeq2Seq(
    tokenizer=tokenizer,
    model="t5-small",
    padding=True,
    return_tensors="pt"
)

# 加载数据集时传入collate_fn
train_dataloader = DataLoader(
    train_dataset,
    batch_size=8,
    shuffle=True,
    collate_fn=data_collator
)

2. 手动实现数据整理逻辑(若需自定义)

如果不想用现成的collator,手动处理batch时必须确保所有张量维度一致:

def custom_collate_fn(batch):
    # 提取batch内的输入和标签序列
    input_ids_list = [item["input_ids"] for item in batch]
    labels_list = [item["labels"] for item in batch]
    
    # 对输入序列做padding,统一到batch内最大长度
    padded_inputs = tokenizer.pad(
        {"input_ids": input_ids_list},
        padding=True,
        return_tensors="pt"
    )
    
    # 对标签序列做padding,并用-100替换pad_token(避免计入损失)
    padded_labels = tokenizer.pad(
        {"input_ids": labels_list},
        padding=True,
        return_tensors="pt"
    )["input_ids"]
    padded_labels[padded_labels == tokenizer.pad_token_id] = -100
    
    return {
        "input_ids": padded_inputs["input_ids"],
        "attention_mask": padded_inputs["attention_mask"],
        "labels": padded_labels
    }

# 加载数据集时使用自定义整理器
train_dataloader = DataLoader(
    train_dataset,
    batch_size=8,
    shuffle=True,
    collate_fn=custom_collate_fn
)

3. 检查训练循环中的张量操作

  • 确保传入模型的input_ids、attention_mask、labels均为[batch_size, seq_len]形状的张量;
  • 排查代码中是否存在手动调用torch.stack()的场景,若有,需先对张量做padding再堆叠,或改用torch.cat()(适用于维度拼接的场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:40:01