离线环境使用sentence-transformers,需要在有网环境下载好模型,再将文件迁移到离线机器上。
这里尝试基于网络资料,详细示例sentence-transformers下载模型和离线加载模型的过程。
1 基础准备
1.1 环境准备
需要一台能访问外网的设备,确保联网和离线机器的python和sentence-transformers版本一致。
确定测试的模型版本,这里采用BGE的bce-embedding-base_v1,对应链接如下
https://hf-mirror.com/maidalun1020/bce-embedding-base_v1
1.2 hf配置
由于涉及到向量模型,需要从hf下载,这里配置hf-mirror国内站点。
示例代码如下
import os
os.environ['HF_ENDPOINT'] = "https://hf-mirror.com"
参考链接如下
https://blog.csdn.net/liliang199/article/details/149976911
2 在线下载模型
在联网机器上,执行以下任一方法即可。同时,下载时会一并获取其所有依赖。
2.1 save_pretrained保存
使用save_pretrained` 保存到指定路径。
此方法通过save_pretrained函数将模型完整保存到指定目录,可以保证文件结构清晰、完整。
示例代码如下
from sentence_transformers import SentenceTransformer
# 模型名称,从Hugging Face模型库中选择
model_name = "maidalun1020/bce-embedding-base_v1"
# 定义本地保存路径,你可以自行指定
local_save_path = "./my_local_model"
# 下载模型并保存到指定文件夹
model = SentenceTransformer(model_name)
model.save_pretrained(local_save_path)
运行后,模型文件会被保存到 ./my_local_model 目录。
如果需要为某些模型启用远程代码,可以添加 trust_remote_code=True 参数
2.2 cache_folder从缓存中提取
另外,也可以通过设置 cache_folder 让库自动下载,然后从指定缓存路径中找到模型文件夹。
示例代码如下
from sentence_transformers import SentenceTransformer
# 定义缓存路径,模型将下载至此
cache_folder = "./my_cache_folder"
model = SentenceTransformer(
model_name_or_path="maidalun1020/bce-embedding-base_v1",
cache_folder=cache_folder
)
# 执行一次编码,确保所有依赖项都下载完成
_ = model.encode("Hello, world.")
运行后,在 ./my_cache_folder 目录下就能找到所需的模型文件。
2.3 git手动下载
如果遇到网络问题,可以直接使用 git clone 从hf模型库克隆模型仓库。
git clone https://hf-mirror.com/maidalun1020/bce-embedding-base_v1
此时,需要配置git lfs,默认拉取所有文件。
否则对于大一些的文件,可能只能下载到文件链接,需git lfs拉取文件。
3 离线加载模型
3.1 加载示例
将联网机器上下载好的整个模型文件夹,如 ./my_local_model,复制到离线机器上。
然后,在离线代码中直接指向该文件夹路径即可。
from sentence_transformers import SentenceTransformer
# 指向复制过来的模型文件夹的实际路径
model_path = "/path/to/your/local/model"
model = SentenceTransformer(
model_name_or_path=model_path,
local_files_only=True # 强制只使用本地文件,避免意外访问网络
)
# 现在可以愉快地使用了
sentences = ["这是一个示例句子", "这是另一个示例"]
embeddings = model.encode(sentences)
print(embeddings.shape)
3.2 参数说明
在以上加载代码中,需要关注如下参数。
1)local_files_only=True
这个参数非常关键,它能强制程序只从本地加载模型,避免了因网络问题而卡住或报错。
2)trust_remote_code=True
当需要使用一些自定义模型架构时,需要开启此参数。
reference
如何在离线环境中加载Sentence Transformers远程源码模型
https://blog.gitcode.com/ac3849f55aa75b738167d8146d6609e5.html
BCEmbedding: Bilingual and Crosslingual Embedding for RAG
https://hf-mirror.com/maidalun1020/bce-embedding-base_v1
hf的国内平替hf-mirror