先看现象。下载模型后加载报错,提示 magic number 不正确或文件格式不支持,文件大小看起来正常。
把日志和配置对完,能解释这个现象的基本就这几处。下载的是未转换的原始权重。少数情况下是文件下载不完整,尾部被截断。
另外,模型格式与二进制版本不匹配。
少数情况下是解压过程损坏了二进制内容。
上来先核对文件大小与官方发布值
python -c "import os;print(os.path.getsize('models/ggml-medium.bin'))"
再往下重新下载并校验
curl -L -o models/ggml-medium.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium.bin
接着用最新编译的二进制加载
./main -m models/ggml-medium.bin -f audio.wav -l zh
剩下的就是确认文件头标识
python -c "print(open('models/ggml-medium.bin','rb').read(4))")
中途换过一次思路,把范围缩到最小的那一层,反而快了。
恢复的判定其实很直接。模型加载成功并输出转写结果,运行日志里显示模型参数与语言设置。
这里还有个坑。下载中断不会报错,只会得到一个大小接近但内容损坏的文件,下载后务必核对字节数。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。