← 文章 / 编程开发
龙虾哥AI工程化实战 9小时前 · 2026-09-06 10:36:20 · 4 阅读

小白转行AI大模型系列(二)把 15GB 的 Qwen 下载下来,拆开看看里面装了什么

大家好,我是龙虾哥。

上一课我们认识了 7B 参数是什么、显存怎么算,还领到了启智社区的免费算力。有同学在评论区催了:说好的跑起来呢?

别急,跑起来之前还差最后一步——把模型下载下来。

这一课我们就干一件事:把 Qwen2.5-7B 完完整整下载到服务器上,然后拆开看看,这 15GB 的文件里面到底装了什么。这一步看着简单,其实有不少坑。

先说个历史:为什么全世界都在用"抱脸"下载模型

去模型网站逛,你会看到两个名字反复出现:HuggingFace 和 ModelScope。当前,现在国内也有一些平台可以承载模型,比如启智社区和魔乐社区,但主流的还是HF和MS。

HuggingFace(抱脸)这个名字,就是那个笑脸 emoji 🤗 的来源。很多人以为它是模型平台起家的,其实不是。它 2016 年在纽约成立的时候,是一家做青少年聊天机器人的公司,后来转型做了开源 NLP 工具库,2018 年随着 Transformer 架构火起来,顺势推出了 Transformers 库,一脚踩在了时代的点上。

现在它已经是 AI 界的 GitHub——开源模型基本都在这里首发,GPT 系的开源版、Llama、Qwen 全在上面。最近甚至传出英伟达将以129亿美元的价格收购HF,HF的原班人马直接变身亿万富豪!

那我们为什么不用它?

不是不用,是国内访问它太慢。所以阿里达摩院 2021 年推出了国内的"平替":ModelScope(魔搭),模型一样全,国内直连、下载飞快,不用科学上网。我们课程统一用它。

三行代码,把 70 亿参数拉到本地

下载模型不是复制粘贴文件,是有专门的工具的。ModelScope 提供了一个 Python 库,核心就一个函数 snapshot_download——字面意思就是"快照下载",把模型仓库里的所有文件原封不动拉下来。

上代码,这几行在实验代码仓库里就有(src/download_model.py),可以复制运行:

from modelscope import snapshot_download model_dir = snapshot_download    'Qwen/Qwen2.5-7B-Instruct',    cache_dir='/tmp/models',)print(”模型已下载到:”, model_dir)

解释一下:

  • 'Qwen/Qwen2.5-7B-Instruct':模型在魔搭上的"门牌号",作者名/模型名
  • cache_dir:下载到哪。这里有个小讲究——模型目录是可以复用的,工具会先查本地有没有,缺哪个补哪个,不会傻乎乎每次全量重下。

运行后等着就行,7B 模型 FP16 下大约 14-15GB,网速快的话十几分钟到半小时。

一个偷懒的技巧:在启智社区建任务的时候,选择模型 Qwen2.5-7B-Instruct(我们实验手册的步骤里配了截图),平台会自动把权重迁移到环境里的 /tmp/pretrainmodel 目录,你直接跳过下载这步。不过我还是建议你亲手跑一遍下载流程——工作里你面对的场景,十有八九是要自己下的。

拆开看:15GB 里到底装了什么

下载完,ls -lh 一下,你会看到一堆文件,主要有这些:

文件作用
config.json模型结构配置:几层、多少个头、隐层多大等等,这是模型的"户口本",每个模型的结构都是唯一的
model-0000x-of-0000y.safetensors权重文件,真正装着 70 亿个参数的实体,分片存储,每个分片 3~4 G 左右
tokenizer.json分词器,把文字切成 token 的"翻译官"
tokenizer_config.json分词器的配置
generation_config.json生成回答时的默认参数(温度、最大长度这些)

其中最重要的就两样:safetensors 和 tokenizer。

safetensors 是权重本身。你可以把它理解成模型"上学多年"学来的全部记忆,压成了数字矩阵。为什么叫这个名字?safety + tensors,安全张量。这里有个值得讲的背景:早年模型权重都用 PyTorch 的 pickle 格式存(.bin 文件),而 pickle 有个祖传毛病——反序列化时会执行文件里嵌入的任意代码。也就是说,你从网上下载一个 .bin 模型,运行的时候,恶意作者可以顺手在你机器上执行任意代码。这不是危言耸听,前两年安全厂商真的在 HuggingFace 上扫出过携带恶意代码的模型文件。所以 HuggingFace 后来推出了 safetensors 格式:纯数据、不含代码、加载又快,现在基本是标配了。

tokenizer 是入口的翻译官。模型不认识"你好"这两个汉字,它只认识数字。tokenizer 负责把你的文字切成一个个 token,再映射成数字编号。比如"人工智能"可能被切成"人工"+"智能"两个 token。为什么重要?因为你的上下文长度、计费、显存里的 KV cache(以后详细讲解),全是按 token 算的——不懂 tokenizer,后面聊推理优化就是空中楼阁。这块我们后面会单独展开讲。

验证一下:数字对不对得上

最后做个验收,算一下目录总大小:

du -sh /tmp/pretrainmodel/Qwen2.5-7B-Instruct/    # 预期:约 14-15 GB

上一课我们口算过:7B × 2 字节 × 1.2 ≈16.8GB。

那这里怎么只有 14-15GB?注意区分两个概念:

  • 模型权重本身:7B × 2 字节 = 14GB,这就是磁盘上那堆 safetensors 的大小
  • 运行时显存:权重加载到显存后,还要额外分配 KV cache、激活值等运行时开销,所以估算公式里才有那个 1.2 的经验系数

磁盘 14GB ≈ 权重,显存 16.8GB ≈ 权重 + 运行开销。两个数字都对上了,说明你的理解闭环了。

本课自测(对着实验手册完成的同学应该都能答):

  1.    模型下载到了哪个目录?总大小多少?
  2.    safetensors 和 tokenizer 各自的作用是什么?
  3.    为什么磁盘 14GB,显存却要按 16.8GB 估?

小结 + 下集预告

这一课你收获三件事:

  1.    模型下载用 ModelScope 的 snapshot_download,三行代码搞定,目录可复用
  2.    模型目录的核心文件:safetensors 是权重实体,tokenizer 是文字到数字的翻译官
  3.    权重 14GB(磁盘)≠ 运行显存 16.8GB,差的那个 1.2 系数是运行时开销

下一课,压轴的好戏来了:加载模型,跑出第一句"你好,我是 Qwen"——我们既用 Transformers 直接推理,也会把 vLLM 服务起起来,让你体会工程里"玩具跑法"和"生产跑法"的区别。

模型文件拆完了,就要让它开口说话了。关注龙虾哥,别掉队,评论区见。


本课配套开源仓(全部实验代码 + 操作手册,免费拿走):

  • GitCode:https://gitcode.com/LXG_AI/LXG_LLM_INFER_COURSE

数据与工具来源:ModelScope 官方文档(modelscope.cn)、HuggingFace 官方文档(huggingface.co)

评论 (0)