一、问题现象:一个“只有 132 字节”的 tokenizer 文件?

最近在使用阿里云魔搭(ModelScope)平台下载 ChatGLM3-6B 系列大语言模型时,不少开发者遇到了一个诡异的问题:

下载后的 tokenizer.model 文件大小仅为 132 字节(132B)!

这显然极不正常。作为对比,正确的 tokenizer.model 文件应约为 5MB(5,000,000 字节),用于加载 SentencePiece 分词器。132B 的文件连最基本的分词规则都无法容纳,更别说支持中文、英文和特殊 token 了。

当你尝试用这样的模型启动推理服务时,通常会遇到如下错误:

OSError: Cannot load tokenizer from file: tokenizer.model is too small.

ValueError: Invalid model file: expected binary format, got HTML content.

那么,这个“132B 文件”到底是什么?又该如何正确下载模型?本文将深入剖析原因并提供完整解决方案。


二、根本原因:你下载的不是模型,而是“错误页面”

132 字节的 tokenizer.model 几乎可以肯定是 魔搭返回的 HTML 或 JSON 错误响应,而非真实的模型文件。常见内容包括:

  • 403 Forbidden 页面(未登录)
  • 404 Not Found(链接错误)
  • JSON 认证提示{"message": "Authentication required to access this model."}

🔍 如何验证?

执行以下命令查看文件内容:

cat tokenizer.model

如果你看到类似以下输出,就说明下载失败了:

<html>
<head><title>403 Forbidden</title></head>
<body>Access denied. Please log in.</body>
</html>

{"code":401,"message":"You need to accept the model license agreement first."}

❌ 常见错误操作

  1. 直接在浏览器中右键“另存为” 下载模型文件链接;
  2. 使用 wgetcurl 直接请求模型 URL,但未携带认证信息;
  3. 未在魔搭官网登录账号或未同意模型使用协议;
  4. 混淆了 Hugging Face 与 ModelScope 的模型 ID(如使用 THUDM/chatglm3-6b 而非 ZhipuAI/chatglm3-6b)。

三、正确做法:使用 ModelScope 官方 SDK 下载

魔搭官方强烈推荐使用其 Python SDK 进行模型下载,该方式会自动处理:

  • 用户认证(Token)
  • 协议同意
  • 文件完整性校验
  • 多线程加速下载

✅ 步骤 1:安装 ModelScope

pip install modelscope -U

✅ 步骤 2:编写下载脚本

from modelscope import snapshot_download

# 注意:魔搭上的 ChatGLM3 模型组织名为 ZhipuAI,不是 THUDM!
model_id = "ZhipuAI/chatglm3-6b-32k"  # 或 "ZhipuAI/chatglm3-6b"

local_dir = snapshot_download(
    model_id=model_id,
    cache_dir="./models",  # 本地保存路径
    revision="master"      # 可选:指定分支或版本
)

print(f"✅ 模型已成功下载至:{local_dir}")

💡 重要提示

  • 魔搭官网 登录你的账号;
  • 访问模型页面(如 chatglm3-6b-32k),点击“同意协议”;
  • SDK 会自动读取本地 Token(通常位于 ~/.modelscope/token)。

✅ 步骤 3:验证文件完整性

下载完成后,检查关键文件大小:

ls -lh ./models/ZhipuAI/chatglm3-6b-32k/tokenizer.model

正常输出应类似:

-rw-r--r-- 1 user user 5.0M Mar 25 14:30 tokenizer.model

同时可检查其他文件是否存在:

  • pytorch_model.bin.index.json
  • configuration_chatglm.py
  • modeling_chatglm.py

四、为什么不能手动下载?

魔搭对部分模型启用了访问控制(ACL),包括:

  • 需要用户登录;
  • 需要显式同意《模型使用协议》;
  • 下载链接有时效性和签名验证。

直接通过浏览器或 wget 获取的链接通常是临时重定向 URL,一旦过期或未认证,服务器就会返回错误页面——而这恰好就是那“132B 文件”的来源。

相比之下,snapshot_download 会在后台:

  1. 调用魔搭 API 获取有效下载地址;
  2. 自动附加用户 Token;
  3. 分块下载并校验 SHA256;
  4. 保证最终文件与官方发布一致。

五、附:Hugging Face vs ModelScope 模型 ID 对照表

平台 模型名称 正确 ID
Hugging Face ChatGLM3-6B THUDM/chatglm3-6b
ModelScope(魔搭) ChatGLM3-6B ZhipuAI/chatglm3-6b
ModelScope(魔搭) ChatGLM3-6B-32K ZhipuAI/chatglm3-6b-32k

⚠️ 切勿混用!在魔搭上使用 THUDM/... 会导致模型不存在或下载空文件。


六、总结与建议

问题 根本原因 解决方案
tokenizer.model 仅 132B 下载了魔搭的错误页面(HTML/JSON) 使用 modelscope.snapshot_download() 官方 SDK 下载
模型加载失败 文件损坏或缺失 删除错误文件,重新通过 SDK 下载
权限被拒绝 未登录或未同意协议 在魔搭官网登录并接受模型条款

📌 最佳实践建议:

  1. 永远不要手动下载大模型文件
  2. 优先使用官方 SDK(ModelScope / HuggingFace Hub)
  3. 下载前确认模型 ID 和平台匹配
  4. 定期清理缓存目录,避免残留错误文件

七、延伸阅读


结语:大模型时代,工具链的正确使用往往比模型本身更重要。一个小小的 tokenizer.model 文件,背后却涉及权限、协议、网络、SDK 等多个环节。希望本文能帮你避开“132B 陷阱”,顺利跑起你的 ChatGLM3!

如有疑问,欢迎在评论区留言交流 👇

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。