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

使用IterableDataset.map()遇挂起,添加num_proc触发类型错误求助

问题原因与解决方案

错误原因

你加载数据集时设置了streaming=True,得到的是IterableDataset类型,而该类型的map()方法不支持num_proc参数——多进程并行处理仅对非流式的常规Dataset类生效。

解决方案

方案1:关闭流式加载(推荐,若数据集内存可容纳)

如果你的数据集大小在内存允许范围内,直接移除streaming=True参数,加载为常规Dataset后即可正常使用num_proc进行多进程加速:

print("Loading dataset...")
# 移除streaming=True,加载为可并行处理的常规Dataset
dataset = load_dataset("json", data_files={"train": train_file, "eval": eval_file})
train_dataset = dataset["train"]
eval_dataset = dataset["eval"]

之后原map()调用中的num_proc参数就能正常工作,解决程序挂起的性能问题。

方案2:优化流式数据集的处理逻辑

若数据集过大无法全量加载到内存,可通过以下方式提升流式处理效率:

  • 使用Fast Tokenizer:确保初始化tokenizer时开启use_fast=True,Fast版本的tokenizer比普通实现速度快数倍。
  • 调大batch_size:适当增大map()的batch_size参数,减少批次处理的额外开销。
  • 精简pretrain_tokenize_function:移除函数内的冗余计算、不必要的对象初始化或IO操作,压缩单批次处理时间。

方案3:手动实现多进程流式处理(进阶)

如果必须保留流式加载且需要多进程,可借助Python的multiprocessing库手动实现并行处理逻辑,但该方式复杂度较高,仅推荐在上述方案无法满足需求时尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:42:20