NAS 能不能当模型盘:随机读差 33 倍,加载 6.5 秒变 4 分 47 秒

排障 · 约 6 步 / 15 分钟自查L0整理于 2026-11-04 有效期 180d

同一个 19.53GB 真实权重、同一台主机:本机盘读完 6.5 秒,NAS 上 4 分 47 秒,差 44 倍。而把文件搬上 NAS 本身花了 4 分 26 秒——搬一次够本机加载 41 次。分界线不在「慢多少」,在随机小块:本机随机读 4KB 是 34.8 MB/s、NAS 只有 0.7,差 50 倍,而模型加载里最多的恰好是小块。三步能在你把模型库搬上 NAS 之前把账算清。

NAS模型盘随机读加载SMBNVMe存储本地部署权重归档选型IO

这条适用于

版本指纹

Windows FILE_FLAG_NO_BUFFERING;SMB 映射盘;Linux 侧对应 O_DIRECT(需 4K 对齐)

具体做法

【实测条件】同一台 Windows 主机,同一份数据,两条路径(本机 NVMe / 局域网 NAS 经 SMB 映射),全程 FILE_FLAG_NO_BUFFERING 绕过页缓存。2026-11-04 00:16-00:24 采集。

【三方存储四档对照】
本机 NVMe:顺序写 1385.8 / 顺序读 2855.6 / 随机读 8MB 块 2656.1(332 IOPS)/ 随机读 4KB 块 34.8 MB/s(8898.7 IOPS,p50 0.12 ms)
局域网 NAS(15T):顺序写 95.0 / 顺序读 68.0 / 随机读 8MB 块 80.5(10.1 IOPS)/ 随机读 4KB 块 0.7 MB/s(183.1 IOPS,p50 0.78 ms、p95 12.572 ms)
DGX 板载 NVMe:顺序写 3.5 / 顺序读 11.3 GB/s(dd 16MB 块 O_DIRECT)

【真实权重加载(19.53GB,int8 safetensors,逐文件求和)】
本机:读 4GB 切片 3054.0 MB/s → 全量 6.5 秒(100GB 33.5 秒)
NAS:读 2GB 切片 69.5 MB/s → 全量 287.2 秒 = 4 分 47 秒(100GB 1470.6 秒)
差 44 倍。

【最反常识的一个数】把 19.53GB 复制到 NAS 上本身花了 266.6 秒(75.0 MB/s,4 分 26 秒)。也就是说:搬运一次的时间,是本机加载一次的 41 倍。这不是「顺手放一下」,是每次换模型都要重付一次的固定成本。

【为什么小块最致命】大块顺序读靠「一口气传」,随机小块靠「每块都要来回一次」。NAS 的瓶颈从来不是带宽,是往返次数。所以顺序读本机对 NAS 是 42 倍、随机 8MB 块 33 倍、一落到 4KB 小块变成 50 倍。而一个 19.53GB 的仓库是几十个 safetensors 分片 + config + tokenizer + 索引:加载器先读索引、再按索引去每个分片定位张量头、再按张量名跳着读 —— 这个「跳着读」就是随机小块。

【口径陷阱】本机 2656.1 是随机读 8MB 块,DGX 11.3 GB/s 是顺序读 16MB 块,两者不是同一口径。按同口径比(都取顺序大块):本机 2855.6 MB/s vs 11.3 GB/s,真实差距约 4 倍。别拿 11.3 去比 2656 然后说「差 4.3 倍是随机换顺序的代价」——那是两个变量混在一起。

【结论】NAS 该买,但它该放在归档那一栏,不是模型库那一栏。模型总量 4TB 以内,一块 NVMe 的钱就买到 33 倍加载速度;要挂多个模型就加盘或上多卡,别指望网络盘。

失效边界
NAS 的硬件规格未知(几盘 RAID、机械还是 SSD、千兆还是 2.5G),所以 80.5 MB/s 这个数无法归因——可能是盘慢、可能是网络慢、可能是单线程 SMB 的天花板,文中只写现象不写归因。随机读只做了单线程单队列,NVMe 的强项是深队列,所以本机侧被低估。只测了读得到多快,没测加载完之后跑得多快(加载带宽 ≠ 推理 tok/s)。6.5 秒 / 287.2 秒 / 44 倍等为按实测带宽换算,非独立计时。
← ffmpeg 字幕每行几个字是算出来的:12 号字 16 字 705px,第 17 个就折行内网推理服务「偶尔连不上」:先查代理环境变量,别查配置 →

← 返回全部排错方案