Accelerate disk_offload 怎样把模型权重映射到本地目录
如果模型已经加载到内存,Accelerate 的 disk_offload() 可以把参数转换成指定目录中的 memory-mapped 权重;前向计算时,所需参数会被取回并送到 execution_device。如果模型还在检查点阶段,则用 load_checkpoint_and_dispatch(),在 device_map 中把目标模块标为 "disk",再通过 offload_folder 提供目录。
官方地址:https://huggingface.co/docs/accelerate/
本地目录是权重的落盘位置,不是执行设备。offload_dir或offload_folder要指向可持续读写的目录,execution_device仍要指向实际承担前向计算的设备。
- 已加载的模型:使用
disk_offload(model, offload_dir, execution_device)。 - 加载检查点:使用
device_map的"disk",并设置offload_folder。 - 只支持推理:磁盘卸载不是训练内存优化方案,磁盘速度也会直接影响取权重开销。
先把本地目录和执行设备分开理解
disk_offload() 的三个关键参数很容易被混在一起:model 是要被卸载的模型对象,offload_dir 是保存 memory-mapped 权重的目录,execution_device 是执行前向计算的设备,通常是 GPU。官方文档描述的行为是:参数落在目录中,前向需要某层时再加载到执行设备,使用后再卸回去。
因此,目录不应该写成只在当前命令中存在的临时路径,也不要把它误写成 "cuda:0"。如果本地没有可用 GPU,应该先确认实际推理设备和内存预算;磁盘卸载本身不会把计算搬到磁盘上。

模型已经加载时直接调用 disk_offload
当你已经有一个完整的 PyTorch 模型对象,最小写法是把它交给 disk_offload()。下面的目录只是示例,生产环境应换成容量足够、生命周期稳定的本地盘目录。
from pathlib import Path
import torch
from accelerate import disk_offload
# 目录用于保存 memory-mapped 权重,不要指向一次性临时目录
offload_dir = Path("./model-offload")
offload_dir.mkdir(parents=True, exist_ok=True)
# model 应该是已经加载好的 PyTorch 模型
model = disk_offload(
model,
offload_dir=offload_dir,
execution_device=torch.device("cuda:0"), # 前向计算仍在 GPU 上完成
)
# 输入也要放到与执行设备匹配的位置
inputs = inputs.to("cuda:0")
with torch.no_grad(): # 推理不建立反向图,避免额外占用显存
outputs = model(**inputs)
这个调用的重点不是返回一个新目录,而是让模型参数与目录建立卸载关系。前向时,Accelerate 的钩子会处理参数在磁盘、CPU 和执行设备之间的移动。若输入仍在 CPU,而模型的执行设备是 GPU,就会出现设备不匹配;若目录没有写权限或剩余空间不足,问题也会在卸载阶段暴露。
加载检查点时用 device_map 把模块放到 disk
如果模型还没有完整加载,可以让 load_checkpoint_and_dispatch() 根据模块名分配设备。映射值可以是 GPU 编号、"cpu" 或 "disk";当映射里出现 "disk" 时,要同时提供 offload_folder。下面的模块名是示意,实际名称要以当前模型的模块树为准。
from pathlib import Path
import torch
from accelerate import init_empty_weights, load_checkpoint_and_dispatch
checkpoint_dir = "./checkpoint"
offload_folder = Path("./checkpoint-offload")
offload_folder.mkdir(parents=True, exist_ok=True)
# 在 meta 设备上创建空模型,避免先复制一份完整权重到 RAM
with init_empty_weights():
model = build_model_from_config() # 按项目配置创建模型骨架
# 只把明确的模块放到磁盘;残差块应按模型规则避免被拆开
device_map = {
"embed": 0, # 输入嵌入放到第一张 GPU
"layers.0": 0, # 热路径层优先放在 GPU
"layers.1": "cpu", # CPU 作为中间层级
"layers.2": "disk", # 该模块参数映射到 offload_folder
"lm_head": 0, # 输出头回到执行设备
}
model = load_checkpoint_and_dispatch(
model,
checkpoint=checkpoint_dir,
device_map=device_map,
offload_folder=offload_folder,
no_split_module_classes=["DecoderLayer"], # 保持残差块的完整性
)
这里的关键是三者成套出现:模块名决定哪些权重使用磁盘,"disk" 表示落盘,offload_folder 提供落盘目录。不要照抄示例中的模块名;如果检查点键与模型结构不一致,加载器可能因为缺失或不匹配的键而失败。

目录能用不等于推理一定合适
第一次使用时,我更愿意把目录、设备和模块映射分别写出来,再根据 hf_device_map 检查结果。自动映射适合快速试验,但它会根据当时可见的 GPU 和 CPU 内存做决定;如果 CPU 内存不足,可以显式把部分模块放到 "disk"。磁盘卸载没有预取机制,慢盘或拥挤的网络盘会放大每次取权重的延迟。
还要注意它的适用范围:官方说明 disk offload 面向推理,参数会在前向所需时进入执行设备,完成后再卸载;这不是训练时保存梯度和优化器状态的方案。推理容器重启后,目录中的映射文件也应与当前模型检查点和代码版本保持一致,不能把任意目录当作可复用缓存。
| 场景 | 推荐入口 | 需要确认 |
|---|---|---|
| 模型已经在内存 | disk_offload() | offload_dir 可写且容量足够 |
| 从检查点加载 | load_checkpoint_and_dispatch() | device_map 覆盖模型模块,配套 offload_folder |
| 需要训练 | 不要把 disk offload 当训练方案 | 改用训练场景适配的并行、分片或检查点策略 |
常见问题
offload_dir 和 offload_folder 是同一个参数吗?
它们都表示本地权重目录,但分别属于不同入口:disk_offload() 使用 offload_dir,load_checkpoint_and_dispatch() 使用 offload_folder。不要把两个函数的参数名混写。
为什么放到 disk 后仍然需要 GPU?
disk 只负责承载权重,前向计算仍由 execution_device 或映射中的计算设备完成。只有把执行设备明确设为 CPU,才是 CPU 推理;这时性能和内存边界要另行评估。
怎样判断映射是否符合预期?
加载后查看模型的 hf_device_map,确认目标模块是否出现在 "disk"、"cpu" 或 GPU 对应位置。这个检查只说明映射结果,不代表已经测得吞吐或延迟。
Accelerate load_checkpoint_and_dispatch 加载权重不匹配怎么办
- 上一篇
- Accelerate load_checkpoint_and_dispatch 加载权重不匹配怎么办
- 下一篇
- Triton dynamic batcher 怎么让高优先级请求先处理
-
- 科技周边 · 人工智能 | 25分钟前 |
- Accelerate load_checkpoint_and_dispatch 加载权重不匹配怎么办
- 285浏览 收藏
-
- 科技周边 · 人工智能 | 26分钟前 |
- Accelerate device_map 怎么给每张 GPU 和 CPU 设置 max_memory
- 484浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | 性能优化 · 人工智能 · 深度学习 · PyTorch CUDA SDPA scaled_dot_product_attention Flash Attention
- PyTorch scaled dot product attention怎样选择高效注意力后端
- 214浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | 性能优化 · python · ONNX Runtime InferenceSession SessionOptions 图优化 Execution Provider
- ONNX Runtime怎样为推理启用图优化
- 281浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 |
- OpenTelemetry GenAI怎样记录模型调用 token 属性
- 414浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | 向量数据库 · RAG 向量检索 LlamaIndex metadata filters
- LlamaIndex metadata filters怎样按元数据筛选检索节点
- 157浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 |
- MLflow prompt registry怎样给提示词版本做回滚管理
- 234浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 |
- LangChain structured output怎样把工具结果映射到数据模型
- 135浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- Ollama embeddings怎样为本地文档生成向量
- 230浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- Transformers Trainer怎样保留自定义字段传入模型
- 344浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- vLLM prefix caching怎样减少重复提示词延迟
- 312浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- MCP 多轮往返请求怎样让工具调用继续执行
- 458浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 893次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 894次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 978次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 967次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 793次使用
-
- AI 推理延迟中首 token 与总耗时分别怎么看
- 2026-09-09 387浏览
-
- Accelerate device_map 怎么把大模型分配到多设备
- 2026-10-04 150浏览
-
- PyTorch torch.load 开启 mmap 后为什么读取参数时才占用内存
- 2026-10-13 475浏览
-
- PyTorch state_dict 参数名前缀变化后怎么兼容旧检查点
- 2026-10-13 436浏览
-
- Accelerate prepare为什么要同时接收模型与优化器
- 2026-10-13 386浏览

