Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中

2024-04-12 03:36

本文主要是介绍Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近需要做一些向量检索,试试ES

一、准备

系统:MacOS 14.3.1

ElasticSearch:8.13.2

Kibana:8.13.2

本地单机环境,无集群,也不基于Docker

BGE是一个常见的文本转向量的模型,在很多大模型RAG应用中常常能见到,但是ElasticSearch中默认没有。BGE模型有很多版本,本次采用的是bge-base-zh-v1.5。下载地址:

HuggingFace:https://huggingface.co/BAAI/bge-base-zh-v1.5

Modelscope:魔搭社区

在国内的话还是从modelscope上下载会更快一些:

git lfs install
git clone https://www.modelscope.cn/AI-ModelScope/bge-large-zh-v1.5.git

下载完后有如下文件(注:可以把其中的.git文件夹删掉以减少体积):

将下载好的文件放到用户当前目录下。

二、Kibana申请试用【机器学习】

导入其他模型必须要使用ES的Machine Learning(机器学习)功能,该功能是收费的,白金版才能使用,因此需要先点击【试用】,试用没有任何复杂的操作和套路,直接点击就行(试用期限为一个月)。

点【模型管理】->【已训练模型】,初始状态下内置以下几个模型:

三、安装Eland工具上传模型

新建终端,安装Eland

pip install eland

安装完后直接运行以下命令:

eland_import_hub_model --url https://XX.XXX.XXX.XXX:9200 -u elastic -p XXXXXXXXX --ca-cert /Users/XXXXXXX/elasticsearch-8.13.2/config/certs/http_ca.crt --hub-model-id 'bge-large-zh-v1.5' --task-type text_embedding --start

换行模式: 

eland_import_hub_model --url https://XX.XXX.XXX.XXX:9200 \
-u elastic -p XXXXXXXXX \
--ca-cert /Users/XXXXXXX/elasticsearch-8.13.2/config/certs/http_ca.crt \
--hub-model-id 'bge-large-zh-v1.5' \
--task-type text_embedding \
--start

逐行解释: 

eland_import_hub_model                        -- 上传本地或HuggingFace模型到ES中

--url https://XX.XXX.XXX.XXX:9200        --指定ES地址,注意:用https,且尽量用真实的IP地址,不要用localhost

-u elastic -p XXXXXXXXX                       --指定用户名和密码

--ca-cert /Users/XXXXXXX/elasticsearch-8.13.2/config/certs/http_ca.crt     --指定证书路径

--hub-model-id 'bge-large-zh-v1.5'          --指定上传的模型的本地路径,注意:前面不要带/

--task-type text_embedding                     --指定上传的模型的类型,BGE是一个embedding模型

--start                                                       --开始

--hub-model-id 'bge-large-zh-v1.5',这是上传本地模型的写法,如果本地有的话,就不会再去HuggingFace上下载了,免得需要科学上网不好办。

运行完毕后可看到上传成功的信息:

----------------------------------------------------------

注意事项

实际不会像上面一样一帆风顺,运行eland_import_hub_model这一步可能会出现若干问题,往往会令人抓狂,网上相关的资料也比较少。笔者遇到了如下几个问题:

问题1. zsh: no matches found: XXXXX

解决方案:

打开.zshrc

vi ~/.zshrc

添加以下内容:

setopt no_nomatch

:wq保存后,再运行以下命令生效:

source ~/.zshrc

问题2:出现elastic_transport.ConnectionError

具体报错信息:

elastic_transport.ConnectionError: Connection error caused by: ProtocolError(('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))

这个问题是最复杂的,网上找了很久都没有解决方案。

原因:因为要使用机器学习的功能,开了试用,必须配置x-pack,因此也必须要在用Eland传输数据时指定安全证书。因为官网的Eland示例里是不包含证书的,因此一直都没注意到,直到看到这篇文章后才意识到是证书的问题:使用 Elasticsearch 检测抄袭 (二)。

解决方案:

x-pack的配置在elasticsearch.yml中,这两行默认都是true,不用更改。

指定证书:

--ca-cert /Users/XXXXXXX/elasticsearch-8.13.2/config/certs/http_ca.crt

注意注意:此时千万不要随便瞎改elasticsearch.yml和kibana.yml中的其他配置。

问题3:ValueError: TLS options require scheme to be 'https'

raise ValueError("TLS options require scheme to be 'https'")

ValueError: TLS options require scheme to be 'https'

原因:--url http://XX.XXX.XXX.XXX:9200的URL中没有用https。

解决方案:URL改为用https即可。

参考:Import the trained model and vocabulary | Machine Learning in the Elastic Stack [8.13] | Elastic

四、Kibana中查看

至此模型已经上传成功,启动或刷新Kibana,在其中查看。

点到【模型管理】->【已训练模型】,发现有如下信息(提示:需要同步 ML 作业和已训练模型):

点击【同步作业和已训练模型】->【同步】

同步完后即可看到多了一行,显示状态为“已部署”:

~~至此,bge-base-zh-v1.5模型已成功导入ES,待后续使用啦~~

-----------------------------------------------------------------------------------------------------------

五、其他错误的尝试

本来想看能不能不用Eland,直接把模型放到一个固定的路径下,让ES启动时去加载,也就是采用file-based上传的方式,实际不太行

参考:ELSER – Elastic Learned Sparse EncodeR | Machine Learning in the Elastic Stack [8.13] | Elastic

切换到elasticsearch-8.13.2/config目录下,新建models文件夹

把下载好的bge模型整个放到models下

编辑elasticsearch-8.13.2/config下的elasticsearch.yml文件,增加一行并保存:

xpack.ml.model_repository: file://${path.home}/config/models/

重启ES和Kibana,发现【模型管理】->【已训练模型】下啥都没变化。

这篇关于Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895995

相关文章

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言