【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
标题
220、【AI】【模型部署】跑起第一个模型(上):装 CPU 环境与下载 Qwen2.5-0.5B
背景
上篇 blog
【AI】【模型部署】装库前先"隔离":venv 虚拟环境从概念到落地
把环境概念讲清了:venv 是 Python 官方的隔离方案——python3 -m venv myenv建独立房间(自己的 bin/python、pip 与 site-packages),激活source …/activate、退出deactivate,前缀方式等价;Ubuntu/Debian 的 PEP 668 会拦系统级pip install,正解是先进 venv;venv 装坏可删目录重建。本篇在这个 venv 里正式动手:装 CPU 版 torch、transformers、modelscope,并从 ModelScope 下载开源模型Qwen2.5-0.5B-Instruct——跑起第一个模型的"准备篇",下一篇在 Notebook 里真正推理
模型部署
目标是把一个真实模型跑起来。第一步不是"跑",是先把三样东西放进 venv:能算数的张量库、会加载模型的推理库、能从国内仓库拉模型文件的下载工具。
🔍为什么是这三件套 + CPU 版
| 包 | 职责 | 中文定位 |
|---|---|---|
torch | 张量计算、跑神经网络 | 模型运行的地基 |
transformers | 加载模型、分词、推理统一 API | 模型的"通用挂载层" |
modelscope | 从 ModelScope 下载模型文件 | 国内模型仓库的下载器 |
torch 特意选CPU 版:本机没有 GPU,装默认版会拖进几 GB 的 CUDA 运行库(用不上);官方提供了单独的 CPU wheel 源,体积小很多。
🧩第一步:装 CPU 版 torch
在 venv 里用官方 CPU 源安装(--index-url只对这一次生效):
jupyter-venv/bin/pipinstalltorch\--index-url https://download.pytorch.org/whl/cpu# 实际输出关键行:# Using cached torch-2.14.0+cpu-cp312-cp312-manylinux_2_28_x86_64.whl (196.3 MB)# Successfully installed … torch-2.14.0+cpu版本号里的
+cpu后缀是辨别标记:2.14.0+cpu表示"纯 CPU 版",与 CUDA 版是两套 wheel,装错会互不可见。196MB 的包是压缩大小,解压后占约几百 MB,属正常。
🧩第二步:装 transformers 与 modelscope
这两个走默认 PyPI 即可,体积小:
jupyter-venv/bin/pipinstalltransformers modelscope# 实际输出关键行:# Successfully installed … transformers-5.16.1 modelscope-1.40.0装完用一条命令确认三件套版本(顺带验证 import 不报错):
jupyter-venv/bin/python-c\"import torch, transformers, modelscope; print(torch.__version__, transformers.__version__, modelscope.__version__)"# 2.14.0+cpu 5.16.1 1.40.0如何确认装的是纯 CPU 版:跑一条自检,看 CUDA 与线程情况:
jupyter-venv/bin/python-c\"import torch; print('cuda_built=', torch.backends.cuda.is_built()); print('threads=', torch.get_num_threads())"# cuda_built= False# threads= 8cuda_built=False直接证明这是无 CUDA 的纯 CPU 构建;threads=8表示推理会用到本机 8 核——CPU 推理慢不等于单核,torch 会尽量吃满多核。
🧩第三步:下载 Qwen2.5-0.5B-Instruct
模型仓库在 ModelScope,用官方 SDK 一键下载整份文件:
jupyter-venv/bin/python-c\"from modelscope import snapshot_download; print(snapshot_download('Qwen/Qwen2.5-0.5B-Instruct'))"下载完成会打印缓存目录;实测本机结果:
/home/adminpc/.cache/modelscope/models/Qwen--Qwen2.5-0.5B-Instruct/snapshots/master本次实测:11 个文件约21 秒全部拉完(峰值约 55MB/s),期间进度条按文件逐一下载、最大的是 943MB 的 model.safetensors。
为什么选它:0.5B(约 5 亿参数)是能在 CPU 上流畅跑的最小档,又保留了完整的对话能力(Instruct 版带指令微调),跑通后再换大模型只是换一行仓库名。参数与文件体积的关系可先验算:权重字节数 ≈ 参数量 × 每参数字节数,Qwen2.5-0.5B 用 bf16 存储(每参数 2 字节),0.5×10⁹ × 2 ≈ 1GB——与实际 943MB 的model.safetensors对得上。照此估算,7B 模型光权重就要 ~14GB,CPU 内存吃紧,这也是先从 0.5B 入手的原因。
📚下载到手的到底是什么:11 个文件、约 1GB
下载清单(实测):
| 文件 | 大小 | 是什么 |
|---|---|---|
config.json | 659 B | 架构与超参声明 |
model.safetensors | 943 MB | 模型全部权重(真正的大头) |
tokenizer.json/vocab.json/merges.txt | ~11 MB | 分词器三件套 |
generation_config.json | 242 B | 生成参数默认值 |
tokenizer_config.json | 7 KB | 分词器配置(特殊符号等) |
README.md/LICENSE/ 其余 | <20 KB | 说明与许可 |
下载速度实测约 55 MB/s,1GB 总量几十秒内完成;目录整体占用 954MB。两个实用细节:
- 重复下载是幂等的:
snapshot_download重跑会先比对已存在文件,只补缺失/变化的部分,不会把 1GB 重新拉一遍; - 缓存位置可改:默认落在
~/.cache/modelscope/,可用环境变量MODELSCOPE_CACHE指到别的目录(比如放在项目旁,方便整目录拷贝去服务器)。
四个常见坑,遇事先对号入座:
| 现象 | 原因 | 对策 |
|---|---|---|
| 系统里 pip 直接被拒 | PEP 668 拦系统 Python | 到 venv 里装(219 讲过) |
| torch 装完体积巨大 | 没走 CPU 源,拉了带 CUDA 的默认版 | 加--index-url https://download.pytorch.org/whl/cpu |
from_pretrained报找不到仓库 | 仓库名/平台写错(ModelScope 与 HuggingFace 各管一套) | 用 modelscope 的Qwen/Qwen2.5-0.5B-Instruct这种"组织/模型"全名 |
| 换了模型名仍秒失败 | 本地无缓存又没网 | 先snapshot_download下到本地,再本地目录加载 |
至此"模型"已经安静地躺在本机缓存里——它不是装进 pip 的包,而是一堆文件,下一篇就用 Notebook 把其中最核心的config.json与model.safetensors加载起来真正推理。
最后看一眼这一步的空间账(实测,便于心里有数):venv 的 site-packages 共约 1.4GB,其中 torch 769MB、transformers 113MB、modelscope 66MB;模型缓存另占 954MB。也就是说装推理环境 + 一个小模型 ≈ 2.4GB——换大模型(7B 起)时模型本身会到十几 GB,提前规划磁盘。
📌一句话记忆
跑模型第一步是环境:在 venv 里装 CPU 版 torch(
--index-url …/whl/cpu,得2.14.0+cpu)+ transformers(加载/推理 API)+ modelscope(下载工具);再用snapshot_download('Qwen/Qwen2.5-0.5B-Instruct')从 ModelScope 拉下约 1GB 的 11 个文件到缓存目录——模型本质是一堆文件(config.json 声明结构、model.safetensors 装权重),下一篇把这些文件加载起来跑第一次推理。
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【AI】【模型部署】跑起第一个模型(下):Notebook 里首次推理