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

相关推荐
Crazy________2 小时前
4.10dockerfile构建镜像
java·开发语言
fish_xk2 小时前
c++内存管理
开发语言·c++·算法
独特的螺狮粉2 小时前
城市空气质量简易指数查询卡片:鸿蒙Flutter框架 实现的空气质量查询应用
开发语言·flutter·华为·架构·harmonyos
网域小星球2 小时前
C语言从0入门(八)|函数基础:封装、调用与参数传递精讲
c语言·开发语言
东宇科技2 小时前
如何使用js进行抠图。识别商品主体
开发语言·javascript·ecmascript
Dxy12393102162 小时前
Python使用PyEnchant详解:打造高效拼写检查工具
开发语言·python
网域小星球2 小时前
C 语言从 0 入门(十五)|综合小项目:菜单交互与简易功能实现
c语言·开发语言·交互
朦胧之3 小时前
AI 编程工具使用浅谈
前端·后端
网域小星球3 小时前
C 语言从 0 入门(十六)|动态内存管理:malloc /free/calloc /realloc 精讲
c语言·开发语言·free·malloc·动态内存