You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地加载HuggingFace模型时加载分片耗时过长求解

解决HuggingFace模型分片加载耗时过长的方案

针对你遇到的本地缓存模型但每次加载分片耗时7-10分钟的问题,以下是几个实用的解决办法:

1. 将分片模型合并为单文件(一次性操作)

你可以先加载一次模型(尽管这次慢,但只需要做一次),然后重新保存为单文件格式,后续加载就不会再有分片加载的问题:

from transformers import AutoModelForCausalLM, AutoTokenizer

# 首次加载模型(耗时较长,仅执行一次)
model = AutoModelForCausalLM.from_pretrained('./cache/model', low_cpu_mem_usage=True)
tokenizer = AutoTokenizer.from_pretrained('./cache/model')

# 保存为单文件格式(safe_serialization=False 生成单文件而非分片)
model.save_pretrained('./cache/model_single_file', safe_serialization=False)
tokenizer.save_pretrained('./cache/model_single_file')

之后每次加载模型时,直接使用新的单文件路径:

model = AutoModelForCausalLM.from_pretrained('./cache/model_single_file', low_cpu_mem_usage=True)
tokenizer = AutoTokenizer.from_pretrained('./cache/model_single_file')

2. 优化加载参数(无需修改模型文件)

如果不想重新保存模型,可以在加载时添加以下参数提升速度:

  • low_cpu_mem_usage=True:优化加载时的CPU内存占用,避免不必要的内存复制,减少加载时间。
  • device_map="auto":让transformers自动将模型层分配到GPU,减少CPU与GPU之间的数据传输耗时,尤其适合大模型。

示例代码:

model = AutoModelForCausalLM.from_pretrained(
    './cache/model',
    low_cpu_mem_usage=True,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained('./cache/model')

3. 量化加载模型(兼顾速度与性能)

如果你的业务场景允许,可以使用4bit/8bit量化加载模型,模型体积会大幅缩小,加载速度显著提升,同时对推理性能影响很小:

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    './cache/model',
    load_in_4bit=True,  # 或 load_in_8bit=True
    device_map="auto",
    low_cpu_mem_usage=True
)
tokenizer = AutoTokenizer.from_pretrained('./cache/model')

补充说明

分片模型加载慢的核心原因是需要逐个读取多个shard文件并在内存中拼接,涉及多次磁盘IO操作;合并为单文件后只需一次磁盘读取,加载速度会大幅提升。你提到的safe_serialization参数,在保存模型时设置为False就会生成单文件,所以通过上述“先加载再重新保存”的方式就能应用这个方案。

内容的提问来源于stack exchange,提问作者SJay_747

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:22:26