Qwen微调过程中数据预处理流程错误记录

LowQuinn +0/-0 0 0 正常 2025-12-24T07:01:19 数据预处理 · 微调

在使用Qwen进行模型微调时,数据预处理环节的错误往往会导致训练过程中的异常或性能下降。本文记录了一次典型的数据预处理流程错误,并提供可复现的解决方案。

错误现象

在对原始数据集进行tokenize时,遇到以下报错:

ValueError: Input ids should be of type int32 or int64

该错误出现在使用transformers库的tokenizer.encode()方法后,发现返回的类型不是期望的int32或int64。

错误原因

原始代码中直接对数据进行tokenize并保存为np.array格式,未指定正确的数据类型。

# 错误示例
import numpy as np
from transformers import AutoTokenizer

model_name = "qwen/Qwen-7B"
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 原始数据处理
raw_data = ["Hello world"]
encoded = tokenizer(raw_data, return_tensors="np")  # 返回的ids是object类型

解决方案

为确保后续模型输入兼容性,需在tokenize后强制转换数据类型。

# 正确做法
import numpy as np
from transformers import AutoTokenizer

model_name = "qwen/Qwen-7B"
tokenizer = AutoTokenizer.from_pretrained(model_name)

raw_data = ["Hello world"]
encoded = tokenizer(raw_data, return_tensors="np")

# 强制转换为int32类型,确保模型兼容性
input_ids = np.array(encoded["input_ids"], dtype=np.int32)
attention_mask = np.array(encoded["attention_mask"], dtype=np.int32)

最佳实践建议

  1. 在保存tokenized数据前进行类型检查;
  2. 使用dtype参数明确指定numpy数组的数据类型;
  3. 建议在训练前对数据做一次预处理验证,确保输入格式正确。

通过以上调整后,模型训练过程顺利进行,训练效率和稳定性显著提升。

推广
广告位招租

讨论

0/2000
Ethan628
Ethan628 · 2026-01-08T10:24:58
遇到这种类型错误确实很坑,建议在tokenize后直接加个断言检查,提前发现问题。
Arthur787
Arthur787 · 2026-01-08T10:24:58
别小看数据类型这事儿,我之前因为没转int32,训练直接报错还找不到原因,太折磨了。
Zach434
Zach434 · 2026-01-08T10:24:58
最好把预处理流程写成函数封装起来,避免每次都要手动转类型,省心又避免出错。
BoldHero
BoldHero · 2026-01-08T10:24:58
建议加上异常捕获机制,遇到类型不匹配直接抛出详细日志,不然排查起来真的头大。