基于bce-embedding-base_v1模型将torch模型转换为onnx模型

大模型工程淘汰赛:从智商竞赛到生存能力实战 大语言模型(LLM)已迈入能力饱和期,单纯依赖MMLU、HumanEval等基准测试得分的‘智商竞赛’正让位于真实场景下的工程生存能力比拼。其核心原理在于:当模型能力边际收益递减,工程缺陷的边际成本却呈指数上升——延迟抖动、冷启动慢、异常崩溃等非功能问题,直接决定用户是否持续使用。技术价值体现在将‘可靠’转化为可量化指标,如P99延迟稳定性、万次异常兜底率≥99.95%、热更新中断≤200ms等。典型应用场景覆盖金融问答、政务助手、工业质检等资源受限、高可用要求的产业落地现场。本文聚焦LLM工程化四大生死线 阅读详情

环境信息构建:
#确定cuda和onnxruntime的版本对应关系:https://blog.51cto.com/u_15962038/12360310

conda create -n mypython311 python=3.11.4 cudnn=8.9.2.26 cudatoolkit=11.8.0

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu118

pip install onnxruntime-gpu==1.18.1 onnx==1.17.0 numpy==1.26.4 transformers==4.46.2 triton==2.0.0

模型转换:

import os
import torch
from transformers import AutoTokenizer, AutoModel, AutoConfig
from transformers.onnx.features import FeaturesManager
BCE_MODEL_PATH='/path/bce-embedding-base_v1/'
tokenizer = AutoTokenizer.from_pretrained(BCE_MODEL_PATH)
config = AutoConfig.from_pretrained(BCE_MODEL_PATH)
bge_model = AutoModel.from_pretrained(BCE_MODEL_PATH)
bge_model.eval()
onnx_config = FeaturesManager.get_config("bert", "default")(config)
dummy_inputs = onnx_config.generate_dummy_inputs(tokenizer, framework='pt')
base_path="/path/output_model/bce-embedding-base_v1"
output_onnx_path = os.path.join(base_path, "bce-embedding-base_v1.onnx")
config_file = os.path.join(base_path, "bce-embedding-base_v1_config.json")
dynamic_axes = {
    'input_ids': {0: 'batch_size', 1: 'sequence_length'},  # 动态 batch size 和 序列长度
    'attention_mask': {0: 'batch_size', 1: 'sequence_length'},  # 动态 batch size 和 序列长度
    'token_type_ids': {0: 'batch_size', 1: 'sequence_length'},
    'output': {0: 'batch_size'}  # 动态 batch size
}
import json
#注意模型输出时,对应的onnx的模型输出要和output_names对应
with open(config_file, 'w', encoding='utf8') as fout:
    json.dump({
        "input_names": list(onnx_config.inputs.keys()),
        "output_names": list(onnx_config.outputs.keys())
    }, fout, ensure_ascii=False, indent=4)
torch.onnx.export(
    bge_model,    (dummy_inputs,),    f=output_onnx_path,
    input_names=list(onnx_config.inputs.keys()),output_names=list(onnx_config.outputs.keys()),
    dynamic_axes=dynamic_axes,  # 设置动态轴
    # do_constant_folding=True,
    # use_external_data_format=False,  # 根据模型大小决定是否使用外部数据格式
    # enable_onnx_checker=True,
    opset_version=14,
)

onnx模型加载推理

embedding_backend.py

from typing import List
from transformers import AutoTokenizer
import concurrent.futures
from tqdm import tqdm
from abc import ABC, abstractmethod

LOCAL_EMBED_PATH="飞onnx的原始模型路径,加载tokenize相关文件"

LOCAL_EMBED_WORKERS=3

LOCAL_EMBED_BATCH=1
class EmbeddingBackend(ABC):
    embed_version = "local_v0.0.1_20230525_6d4019f1559aef84abc2ab8257e1ad4c"

    def __init__(self, use_cpu: bool = False):
        self.use_cpu = use_cpu
        self._tokenizer = AutoTokenizer.from_pretrained(LOCAL_EMBED_PATH)
        self.workers = LOCAL_EMBED_WORKERS

    @abstractmethod
    def get_embedding(self, sentences, max_length) -> List:
        pass
    def get_len_safe_embeddings(self, texts: List[str]) -> List[List[float]]:
        all_embeddings = []
        batch_size = LOCAL_EMBED_BATCH

        with concurrent.futures.ThreadPoolExecutor(max_workers=self.workers) as executor:
            futures = []
            for i in range(0, len(texts), batch_size):
                batch = texts[i:i + batch_size]
                future = executor.submit(self.get_embedding, batch, LOCAL_EMBED_MAX_LENGTH)
                futures.append(future)
            for future in tqdm(futures):
                embeddings = future.result()
                all_embeddings += embeddings
        return all_embeddings

    def embed_documents(self, texts: List[str]) -> List[List[float]]:
        """Embed search docs using multithreading, maintaining the original order."""
        return self.get_len_safe_embeddings(texts)

    def embed_query(self, text: str) -> List[float]:
        """Embed query text."""
        return self.embed_documents([text])[0]

    @property
    def getModelVersion(self):
        return self.embed_version

模型加载:

import os
import numpy as np
import time
from onnxruntime import InferenceSession, SessionOptions, GraphOptimizationLevel
from embedding_backend import EmbeddingBackend

LOCAL_EMBED_MODEL_PATH="onnx_model_path/bce-embedding-base_v1.onnx"
class EmbeddingOnnxBackend(EmbeddingBackend):
    def __init__(self, use_cpu: bool = False):
        super().__init__(use_cpu)
        self.return_tensors = "np"
        sess_options = SessionOptions()
        sess_options.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL
        if use_cpu:
            providers = ['CPUExecutionProvider']
        else:
            providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
        self._session = InferenceSession(LOCAL_EMBED_MODEL_PATH, sess_options=sess_options, providers=providers)

    def get_embedding(self, sentences, max_length):
        inputs_onnx = self._tokenizer(sentences, padding=True, truncation=True, max_length=max_length, return_tensors=self.return_tensors)
        inputs_onnx = {k: v for k, v in inputs_onnx.items()}
        start_time = time.time()
#output_names的值和模型转换时保存的bce-embedding-base_v1_config.json中的output_names的值一致
        outputs_onnx = self._session.run(output_names=['last_hidden_state'], input_feed=inputs_onnx)
        debug_logger.info(f"onnx infer time: {time.time() - start_time}")
        embedding = outputs_onnx[0][:,0]
        norm_arr = np.linalg.norm(embedding, axis=1, keepdims=True)
        embeddings_normalized = embedding / norm_arr

        return embeddings_normalized.tolist()

待验证部分:onnx模型压缩:GitHub - daquexian/onnx-simplifier: Simplify your onnx model

RAG向量模型bce-embedding-base_v1、bce-reranker-base_v1 这模型需要授权,所以需要–token https://huggingface.co/settings/tokens。一个向量模型,一个重排模型。 阅读详情

相关推荐

5分钟搞定DataDome滑块验证码:最新Capsolver API实战教程(含代理配置)

本文提供了一份利用Capsolver API快速自动化破解DataDome滑块验证码的实战教程。文章深入剖析了DataDome验证码的环境指纹与行为分析机制,并重点详解了确保成功率的住宅代理配置、API集成步骤及令牌使用等核心环节,帮助开发者高效集成稳定可靠的自动化解决方案。

milk8的博客 493

使用有道bce-embedding-vase-v1模型构建知识向量库并进行相似度搜索

最开始使用LangChain结合通义千问API实现了基础的RAG(Retrieval-Augmented Generation)过程,当时认为embedding模型似乎是LangChain的一部分,然后又通过学习OpenAI的API发现,其实使用embedding模型不需要一定捆绑在LangChain上,可以作为一个独立的API来使用,因此在尝试实现了OpenAI的embedding模型之后,将当初结合LangChain使用的国产的有道的embedding模型来进行一下向单独的知识向量库的生成。

一个学长的博客 9294

XTDrone——无人机基于2D激光Lidar进行二维运动规划(细节提醒以及相关报错解决)

本文介绍了在Ubuntu 20.04系统无人机基于ROS Noetic实现HectorSLAM二维激光建图与运动规划的完整流程。主要内容包括:安装必要ROS依赖库;修改HectorSLAM的launch文件,解决坐标系转换问题;配置地图发布参数以避免覆盖已建地图;启动PX4仿真环境与XTDrone通信模块;最后通过2D导航目标点实现无人机运动规划。文中详细说明了各步骤的关键配置修改,并提供了处理常见错误(如TF转换超时)的解决方案。实现了从激光SLAM建图到路径规划的过程。

weixin_45390670的博客 994

【亲测免费】 BCEmbedding模型更新:新版本发布与特性详解

在当今信息爆炸的时代,及时跟进软件和模型的版本更新显得尤为重要。今天,我们将详细介绍BCEmbedding模型的最新版本——bce-embedding-base_v1,以及它带来的新特性和改进。 ## 新版本概览 bce-embedding-base_v1于2024年1月3日发布,这是继上一个版本后的重要更新。以下是一些关键的更新日志摘要: - 模型发布:bce-embedding-base

gitblog_02997的博客 1599

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法:①检查PyCharm导入的环境是否错误②添加Torch包

qq_59942266的博客 4970

Acgis中实现栅格经纬度和行政区关联

目前已有意大利的shp文件,希望将意大利划分成0.1*0.1经纬度的栅格,并且关联每个栅格中心点所属的省份信息。最终希望得到的输出是一个表格,里面包含栅格的经纬度、所属省份信息。

qq_42183184的博客 3369

【性能倍增】零基础掌握bce-embedding-base_v1微调全攻略:从数据预处理到生产部署

你是否还在为通用嵌入模型在特定领域表现不佳而烦恼?是否遇到过中英跨语言检索时精度不足的问题?本文将带你全面掌握bce-embedding-base_v1模型的微调技术,通过8个实战步骤+5个优化技巧,让你的嵌入模型在专业领域性能提升30%以上。 读完本文你将获得: - 一套完整的bce-embedding-base_v1微调流程(数据准备→训练配置→模型部署) - 3种领域适配策略(医学/法律/...

gitblog_02432的博客 615

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3469

备忘,LangChain建立本地知识库的几个要点

longchain结合千问模型和ES建本地知识库

zhyuli的博客 1869

opencv案例实战——银行卡模式匹配识别

在之前的几篇文章中我们已经介绍了opencv的一些基础知识,本篇文章我们将结合一个案例运用之前的知识并且学习opencv中模式匹配的应用,用到的知识点如果有不清楚的可以查看上面列出来的系列文章。具体代码会放在最后。

艾醒的博客 1338

1、开启 Microsoft Power Automate 自动化之旅

本文介绍了 Microsoft Power Automate 的基本概念和其在信息时代自动化需求中的重要作用。Power Automate 是 Power Platform 的一部分,能够通过无代码/低代码的方式自动化处理重复性任务,例如邮件处理、文件复制等,从而提升工作效率。文章还详细讲解了 Power Automate 的核心术语、登录方式、创建第一个流程的操作步骤,并通过示例帮助用户快速上手。无论是终端用户还是管理员,都可以通过本文了解如何利用 Power Automate 实现业务流程自动化。

corn8的博客 169

NCF实战:从神经协同过滤原理到高可用推荐系统落地

神经协同过滤(NCF)是现代推荐系统中连接隐式反馈与深度学习的关键范式,其核心在于用可学习的非线性交互替代传统矩阵分解的线性点积,从而建模用户与物品之间细粒度、非对称、语义模糊但业务真实的偏好关系。它不依赖显式特征工程,仅需用户-物品交互日志即可训练,具备冷启动友好、推理延迟低(O(1))、部署轻量等工程优势,在点击率预估、商品推荐、内容分发等场景中广泛验证有效。本文聚焦NCF在真实业务中的结构选型、数据信号增强、PyTorch轻量实现及线上服务优化,特别解析Embedding独立编码、MLP分支设计、点积

weixin_34405354的博客 360

WinCC7.5 SP2 安装与授权(文末附授权软件)

安装部分参考了wincc7.5官网下载及安装配置(适配window10超详细教程) 主要介绍授权部分(仅供学习,商用请下载正版授权): 通过官网下载安装了WinCC7.5(需要在西门子官网注册账户,10积分下载)。 安装成功以后,还没授权,先别立即打开。 下载Sim_EBK_Install 复制链接到百度网盘中离线下载: 都是一样的软件,版本不同。有部分解压时需要输入密码,可选择方框里的不需要解压密码: 解压以后,打开: 最后检查秘钥授权是否成功 打开桌面(这是安装WinCC以后就有的): 左

skr? 7万+

【机器学习】CNN-ViT混合架构胸部影像分析:从算法到临床部署

算法层面:并行式CNN-ViT架构结合门控融合,在NIH ChestX-ray14上达到SOTA性能工程层面:OpenVINO优化实现亚秒级边缘推理,DICOM集成确保无缝workflow临床层面:符合FDA/CE监管要求,77%报告时间缩短的临床价值验证代码实现涵盖模型训练、优化、部署和监控的全生命周期,可直接用于研究和生产环境。

u012133341的博客 540

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

网易有道BCEmbedding:双语检索与RAG的完美融合

随着人工智能技术的飞速发展,语义表征和检索增强生成(Retrieval Augmented Generation, RAG)在各个领域的应用日益广泛。在这样的背景下,网易有道推出了划时代的BCEmbedding模型,这不仅是一次技术的革新,更是跨语种检索和RAG领域的一次重大突破。Huggingface模型下载:AI快站模型免费加速下载:主要特点双语和跨语种能力:基于有道翻译引擎的强大能力,实现强大的中英双语和跨语种语义表征能力。RAG适配:面向RAG做针对性优化,可适配大多数相关任务,比如。

nulifancuoAI的博客 3310

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【亲测免费】 深入了解BCEmbedding-base_v1的工作原理

在自然语言处理(NLP)领域,理解模型的内部工作原理对于优化性能、提升应用效果至关重要。BCEmbedding-base_v1作为一款中英双语和跨语种的语义表征模型,凭借其独特的架构和算法,在多个领域展现了卓越的性能。本文将深入探讨BCEmbedding-base_v1的模型架构、核心算法、数据处理流程以及训练与推理机制,帮助读者全面理解其工作原理。 ## 主体 ### 模型架构解析 ###

gitblog_02060的博客 1309

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

知识库问答系统MaxKB部署本地向量模型bce-embedding-base_v1

基于大语言模型和 RAG 的知识库问答系统MaxKB,已经部署用了一段时间,体验非常好。最新的MaxKB 1.5.1可以部署自己的向量模型,刚刚部署测试了一下,配置成功。现在记录下来,分享给大家。

qq_26224539的博客 4296

告别混乱的内部文档!用bce-embedding-base_v1构建下一代企业知识管理

你是否正面临这些知识管理痛点?研发团队的技术文档散落在Confluence与Git仓库之间难以检索,客服部门的FAQ更新后无法被智能系统及时收录,跨国团队的中英双语资料检索结果总是"牛头不对马嘴"。根据Gartner 2024年报告,企业员工平均每天花费90分钟寻找工作所需信息,其中40%的时间因检索效率低下而浪费。本文将系统介绍如何基于网易有道开源的bce-embedding-base_v1模型...

gitblog_02388的博客 602

【限时免费】 从BCEmbedding V1到bce-embedding-base_v1:进化之路与雄心

在自然语言处理(NLP)领域,语义嵌入模型(Embedding Model)的发展一直是推动技术进步的核心动力之一。BCEmbedding系列作为网易有道推出的双语和跨语种语义表征模型库,自诞生以来便以其强大的中英双语能力和跨语种检索性能受到广泛关注。早期的BCEmbedding V1版本已经展现了其在语义搜索和问答任务中的潜力,尤其是在RAG(检索增强生成)场景中表现突出。然而,随着应用场景的多

gitblog_02169的博客 399

4090显存极限压榨:bce-embedding-base_v1量化部署与RAG性能优化指南

你是否曾遇到过这样的困境:部署bce-embedding-base_v1时,279M参数模型竟占用3GB+显存?在RAG应用中,4090显卡同时运行Embedding+LLM时频繁OOM?本文将系统解决显存占用与性能平衡难题,通过8项量化技术+12个工程优化,实现单卡部署"Embedding模型+Reranker+7B LLM"全链路,显存占用降低67%,吞吐量提升230%。 ### 1.1 模...

gitblog_02622的博客 483

BCE embedding模型部署和推理

是由网易有道开发的中英双语和跨语种语义表征算法模型库,其中包含和两类基础模型。专门用于生成语义向量,在语义搜索和问答中起着关键作用,而擅长优化语义搜索结果和语义相关顺序精排。

qq_41913559的博客 2618

2025生产力革命:将bce-embedding-base_v1封装为企业级API服务的完整指南

你是否正面临这些痛点?开源嵌入模型部署流程繁琐、服务稳定性差、并发处理能力弱?本文将提供一套完整解决方案,通过9个实战步骤将bce-embedding-base_v1模型转化为可随时调用的高性能API服务,无需复杂配置即可实现日均100万次调用的工业级部署。 读完本文你将获得: - 从零开始的模型服务化全流程(环境配置→代码实现→性能优化) - 支持并发请求的异步API架构设计 - 包含健康检查...

gitblog_02161的博客 513

网易有道QAnything 安装部署实践(RAG)

网易有道QAnything 安装部署实践,理解一个完整RAG的高级构造。

lianghao118的博客 2万+

langchain(五)调用本地大模型实现embedding-BCE 嵌入模型本地部署与调用指南

本文介绍了如何下载和使用maidalun/bce-embedding-base_v1双语嵌入模型的完整流程。首先需要注册魔塔社区并搜索该模型,然后安装modelscope、sentence_transformers等必要依赖。文章提供了两种运行模型的方法:通过LangChain框架调用HuggingFaceEmbeddings,以及直接使用SentenceTransformer进行本地推理。两种方法都支持嵌入向量归一化处理,并展示了文本嵌入的基本使用示例。文末还给出了向量结果打印的示例代码,方便开发者快速验

技术博客 827

2025最具颠覆性开源模型:bce-embedding-base_v1如何重构RAG成本结构?

# 2025最具颠覆性开源模型:bce-embedding-base_v1如何重构RAG成本结构? 你是否正面临这些RAG实施痛点?企业级文档检索准确率不足60%、跨语言场景下召回率骤降40%、GPU资源消耗占AI基础设施成本75%?本文将系统解析网易有道开源的bce-embedding-base_v1如何通过"双引擎架构"实现性能与成本的颠覆式平衡,让中小团队也能部署生产级RAG系统。 读完

gitblog_02207的博客 530

Embedding和Rerank模型介绍

在信息检索和NLP处理中,embedding和rerank模型是两种常见的技术,它们通常用于提高搜索引擎、推荐系统和其他相关应用的性能和准确性。

h1773655323的博客 9319
上一篇: 大模型prompt相关
下一篇: milvus和attu客户端的安装
会发paper的学渣
博客等级 码龄15年 171粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会发paper的学渣

您的鼓励和将是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值