在使用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)
最佳实践建议
- 在保存tokenized数据前进行类型检查;
- 使用
dtype参数明确指定numpy数组的数据类型; - 建议在训练前对数据做一次预处理验证,确保输入格式正确。
通过以上调整后,模型训练过程顺利进行,训练效率和稳定性显著提升。

讨论