使用SentenceTransformers无法本地保存大模型的问题求助
问题与解决方案
问题描述
尝试使用SentenceTransformers保存大语言模型时,频繁出现下载超时、加载分片进程被终止的问题,精简后的代码如下:
from sentence_transformers import SentenceTransformer modelPath = "/Users/bob/.cache" model = SentenceTransformer("Salesforce/SFR-Embedding-Mistral") model.save(modelPath)
错误日志示例:
llm-fast-py3.11bob /Volumes/2TBWDB/code/llm_fast [main] $ /Volumes/2TBWDB/code/llm_fast/.venv/bin/python /Volumes/2TBWDB/code/llm_fast/llm_fast/prove/scarica.py modules.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████| 229/229 [00:00<00:00, 413kB/s] config_sentence_transformers.json: 100%|█████████████████████████████████████████████████████████████████████████████████████| 123/123 [00:00<00:00, 288kB/s] README.md: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 85.3k/85.3k [00:00<00:00, 756kB/s] sentence_bert_config.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████| 54.0/54.0 [00:00<00:00, 187kB/s] config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████| 663/663 [00:00<00:00, 1.99MB/s] model.safetensors.index.json: 100%|█████████████████████████████████████████████████████████████████████████████████████| 22.2k/22.2k [00:00<00:00, 29.4MB/s] model-00001-of-00003.safetensors: 100%|██████████████████████████████████████████████████████████████████████████████████| 4.94G/4.94G [00:46<00:00, 106MB/s] model-00002-of-00003.safetensors: 100%|██████████████████████████████████████████████████████████████████████████████████| 5.00G/5.00G [00:46<00:00, 107MB/s] model-00003-of-00003.safetensors: 100%|██████████████████████████████████████████████████████████████████████████████████| 4.28G/4.28G [00:40<00:00, 107MB/s] Downloading shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [02:14<00:00, 44.72s/it] Loading checkpoint shards: 33%|███████████████████████████████▋ | 1/3 [00:17<00:35, 17.53s/it]zsh: killed /Volumes/2TBWDB/code/llm_fast/.venv/bin/python /Users/bob/.pyenv/versions/3.11.7/lib/python3.11/multiprocessing/resource_tracker.py:254: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown warnings.warn('resource_tracker: There appear to be %d '
环境信息:Python 3.11.7、sentence-transformers 2.6.1、Mac M1 16GB(Sonoma 14.4.1)、磁盘剩余55GB、200MBit光纤网络,intfloat/e5-mistral-7b-instruct等其他大模型也出现相同问题。
解决方法
1. 手动下载模型文件后本地加载保存
- 下载模型对应的所有必要文件(包括
config.json、sentence_bert_config.json、所有.safetensors分片、modules.json等)到本地文件夹。 - 使用本地路径初始化模型并保存:
from sentence_transformers import SentenceTransformer # 替换为你本地下载好的模型文件夹路径 local_model_dir = "/path/to/local/model/files" model = SentenceTransformer(local_model_dir) model.save("/Users/bob/.cache") - 大分片文件建议用多线程下载工具,支持断点续传,避免下载超时中断。
2. 启用量化加载减少内存占用
Mac M1 16GB内存加载7B级模型时容易因内存不足被系统终止进程,启用4-bit量化可大幅降低内存消耗:
from sentence_transformers import SentenceTransformer model = SentenceTransformer( "Salesforce/SFR-Embedding-Mistral", model_kwargs={"load_in_4bit": True} ) model.save("/Users/bob/.cache")
也可添加device_map="auto"让模型自动分配到CPU/GPU,进一步优化内存使用。
3. 调整下载超时与重试配置
通过配置HTTP会话增加重试次数和超时时间,避免下载阶段超时:
from sentence_transformers import SentenceTransformer from huggingface_hub import configure_http_backend import requests # 配置HTTP会话,增加重试次数 session = requests.Session() session.mount("https://", requests.adapters.HTTPAdapter(max_retries=3)) configure_http_backend(session=session) # 初始化模型时设置更长超时时间(5分钟) model = SentenceTransformer( "Salesforce/SFR-Embedding-Mistral", timeout=300 ) model.save("/Users/bob/.cache")
4. 清理缓存后重新尝试
删除Hugging Face缓存目录下的不完整模型文件,避免残留损坏文件导致加载失败:
# 清理指定模型的缓存 rm -rf ~/.cache/huggingface/hub/models--Salesforce--SFR-Embedding-Mistral
清理完成后重新运行保存代码。
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

