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

相关推荐
雪的季节5 小时前
Python基础5-18
开发语言·python
YWL5 小时前
OpenLayers + Vue 2 使用指南(01)
前端·javascript·vue.js
暖和_白开水5 小时前
数据分析agent (七):contextvars 模块上下文request_id
java·前端·数据分析
程序员黑豆5 小时前
鸿蒙应用开发:Flex 组件从入门到实战
前端·华为·harmonyos
大爱编程♡5 小时前
Vue3+TypeScript+element-plus的文章管理项目(配后端接口)-退出及文章管理页面
前端·javascript·typescript
先吃饱再说5 小时前
React 组件设计:从 Props 传递到组件封装
前端·react.js
独立开阀者_FwtCoder5 小时前
最近做了一个健身小程序:智形健身助手,健身的佬们来提点意见
前端·javascript·github
舒灿5 小时前
喵ing Tab 1.0.0 正式发布
前端·ai编程
葡萄城技术团队5 小时前
当表格数据来自外部系统:SpreadJS 如何让异步公式一键刷新
前端
小徐_23335 小时前
Open Wot 1.0.5 发布:让 AI 接入 wot-ui,只需要两条命令
前端·uni-app·ai编程