NAS 能不能当模型盘:随机读差 33 倍,加载 6.5 秒变 4 分 47 秒
同一个 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这条适用于
- 有一块本机 SSD 与一个网络盘(NAS / SMB / NFS 均可)
- 知道要放的模型总字节数,且有一份真实权重可读
- 能跑无缓冲读写(dd 或带 FILE_FLAG_NO_BUFFERING 的脚本)
版本指纹
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 倍等为按实测带宽换算,非独立计时。