这个坑值得记一笔。加载权重时报 Error while deserializing header,文件大小与官方标注接近,但就是读不进去。
刚开始盯着「文件被编辑器或杀毒软件改动」,折腾了半个多小时,排掉了。
排查方向其实有限,先把可能性排一排。下载中断,文件尾部不完整;磁盘写入失败但进程没有感知;分片索引与实际文件不匹配。
动手时先比对文件大小与官方标注值
python -c "import os;print(os.path.getsize('model.safetensors'))"
再往下用官方库做一次读取校验
python -c "from safetensors import safe_open;f=safe_open('model.safetensors','pt');print(len(f.keys()))"
随后重新下载并核对哈希
python -c "import hashlib;print(hashlib.sha256(open('model.safetensors','rb').read()).hexdigest()[:16])"
剩下的就是确认分片索引里的文件都在
python -c "import json;print(json.load(open('model.safetensors.index.json'))['weight_map'])")
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
改完先别撤,确认这几项。校验通过并能读出全部张量,模型加载成功,推理结果正常。
这里还有个坑。文件损坏不会在下载阶段报错,只有真正加载时才暴露,大文件下载后做一次哈希校验能省下很多排查时间。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。