sentence-transformer如何离线加载和使用模型

离线环境使用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

https://blog.csdn.net/liliang199/article/details/149976911

相关推荐
wjs20242 分钟前
RSS Item 元素:深入解析与使用指南
开发语言
Wect5 分钟前
深度剖析浏览器跨域问题
前端·面试·浏览器
小郑加油5 分钟前
python学习Day11:认识与创建CSV文件
开发语言·python·学习
陈随易19 分钟前
bun将会支持Bun.image,你怎么看?
前端·后端·程序员
念何架构之路27 分钟前
Go Web基础和Http演进
开发语言·后端·golang
初心未改HD34 分钟前
Go语言database/sql与SQLx:构建健壮的数据访问层
开发语言·golang
jingqingdai335 分钟前
别用正则格式化 HTML!我用 DOM 遍历实现零风险本地格式化,老项目重构效率直接拉满
前端·重构·html
晚风吹红霞36 分钟前
C++异常处理核心知识点全解析
开发语言·c++
CoderCodingNo37 分钟前
【信奥业余科普】C++ 的奇妙之旅 | 17:面的铺展与文本的本质——二维数组与字符串
开发语言·c++
J2虾虾38 分钟前
Java Lambda 表达式详解文档
java·开发语言