memory mapping、lazy loading?大模型权重的高效加载?memory mapping、lazy loading?
参数量大(数十 GB 到数百 GB),若一次性读入内存再搬到 GPU,会占满内存或显存、启动慢且可能 OOM。需要按需、分块、低峰值的加载方式。
mmap:把 checkpoint 文件映射到进程地址空间,不立刻读入物理内存;访问某段时由 OS 按需调页。这样多进程或多次访问同一文件可共享物理页,且峰值内存接近「当前用到的部分」而非整个文件。safetensors 与部分格式支持按 key 的 offset 做 mmap,加载时只映射、实际张量在首次访问或拷贝到 GPU 时才读入,适合单机多卡或推理时按层加载。
Lazy loading:不一次性加载全部参数,而是按层或按模块在首次前向用到时再加载并可选地释放已用层(如流水线推理)。实现上:state_dict 按 key 或按层组织;加载器只建「占位」或只读 meta,实际 tensor 在 forward 到该层时从磁盘读入并填到设备。可结合 mmap:文件 mmap,按需读对应 offset 到 GPU。这样显存峰值约为「单层或若干层」而非全模型,适合超大模型推理与多卡分片加载。
| 返回模块 | 返回总览 |