加载慢从哪里来
模型加载的耗时由几件事叠加:磁盘读取权重、分片拼接与格式转换、把权重搬运到显存,以及加载之后的图捕获与预热。定位的关键是把这几个阶段分开计时,判断慢在冷缓存、慢盘,还是网络盘的小文件延迟。加载慢和推理慢是两回事,先量出来再谈优化。
基本信息
| 适用平台 | Linux 服务器,本地盘与 NFS、CIFS 网络盘 |
|---|---|
| 常用工具 | ls、free、iostat(sysstat 包)、time |
| 关键变量 | 磁盘类型、分片文件数量、并行读盘的进程数 |
| 权限要求 | 普通用户即可,部分发行版查盘需 root |
典型使用场景
- 冷启动第一次慢:第二次走页缓存明显变快,属于正常现象
- 网络盘小文件:文件数量多时延迟被放大,考虑本地盘或预热缓存
- 多卡并行加载:张量并行下每个进程各自读盘,IO 压力成倍上涨
- 格式转换与校验:启动期做转换或校验会占时间,可在构建镜像阶段前移
- 重启风暴:多实例同时重启抢同一块盘,加载时间整体拉长
分段计时
分段计时
df -h /models # 先确认权重放在哪种存储上
ls -l /models/qwen | wc -l # 分片数量,碎成大量小文件要警惕
free -h # 首次加载前后看缓冲区缓存的变化
iostat -x 1 5 # 需装 sysstat,看盘吞吐与占用是否打满
time vllm serve /models/qwen --port 8000 # 从启动到就绪的总耗时各阶段观察点
| 阶段 | 观察点 | 正常的慢与反常的慢 |
|---|---|---|
| 权重读取 | 盘吞吐与占用率 | 第一次冷读慢属正常,第二次仍慢要查盘 |
| 格式转换 | 启动日志里的转换与校验记录 | 每次启动都转换说明没做缓存 |
| 搬运到显存 | 加载期间的显存占用曲线 | 长时间停在固定值多为等待读盘 |
| 就绪前预热 | 图捕获与预热日志的时间戳 | 权重就绪不等于服务可用 |
把加载完成与服务就绪分开计时:权重就绪之后还有图捕获与预热,只报加载时间会低估真实的恢复时长。
权重用 safetensors 这类可直接映射的格式,通常比需要反序列化大对象的格式更快,也能避开加载期的额外内存峰值。