使用自定义数据集训练HuggingFace对话模型遇缓存问题,结果无变化
我来帮你搞定这个头疼的问题——自定义数据集训练完还是用原始数据的情况我之前也碰到过,结合你的描述,给你几个具体的解决步骤:
1. 彻底清理旧缓存
这个仓库默认会把数据集和模型权重缓存到/home/joo/.cache/torch/pytorch_transformers/目录里,旧的原始数据集缓存肯定在捣乱。你可以直接删掉这个目录里的相关缓存文件,要是怕麻烦,直接整个删了也没问题(如果其他项目没用到这里的缓存的话):
rm -rf /home/joo/.cache/torch/pytorch_transformers/
2. 强制跳过缓存加载自定义数据
很多时候,就算你指定了自定义数据集路径,代码还是会优先读缓存。你可以先看看仓库的训练和交互脚本有没有--no_cache这类参数,有的话训练和交互时都加上:
# 训练命令 python train.py --dataset_path ./my.json --no_cache # 交互命令 python interact.py --model_checkpoint ./runs/Oct08_18-22-53_joo-tf_openai-gpt/ --dataset_path ./my.json --no_cache
如果没有这个参数,就去改数据集加载的代码(比如utils.py或者dataset.py里的加载逻辑),找到加载数据集的地方,加上use_cache=False或者cache_dir=None,强制它重新读取你本地的自定义文件。
3. 加日志确认数据集是否真的加载了
你可以在interact.py里加几行打印代码,确认加载的是不是你的自定义数据集:
# 在加载完personalities之后添加 print(f"当前加载的数据集路径:{args.dataset_path}") print(f"总人格数量:{len(personalities)}") print(f"第一个人格内容:{personalities[0]}")
运行交互脚本时,就能直接看到是不是加载了18879个人格,第一个是不是你加的内容,这样就能快速定位问题。
4. 先确认训练时数据集就加载对了
别忘了回头检查训练时的日志,确认训练脚本确实加载了18879个人格(也就是你的自定义数据集)。如果训练时就没读对自定义数据,那模型肯定还是原始的效果。
关于问题的普遍性
这个问题更多是这个仓库的特定缓存逻辑导致的——它默认自动缓存数据集,而且在没明确禁用缓存时,会优先用缓存的原始数据,而不是你传入的自定义文件。不过训练自定义模型时,缓存优先级的问题确实是个常见坑,很多框架都可能碰到,核心就是要确保加载数据时明确跳过旧缓存,或者直接清理掉旧缓存。
内容的提问来源于stack exchange,提问作者Vic Nicethemer

