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

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

一、准备

系统:MacOS 14.3.1

ElasticSearch:8.13.2

Kibana:8.13.2

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

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

HuggingFace:https://huggingface.co/BAAI/bge-large-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-large-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,发现【模型管理】->【已训练模型】下啥都没变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库—维度建模—维度表设计

维度表 维度表(Dimension Table)是数据仓库中描述业务过程中各种维度信息的表,用于提供上下文和描述性信息,以丰富事实数据的分析 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化、维度层次、维度一致性、维度整合和拆分等)都会直接关系到维度建模…

docker和kubernetes(k8s)

docker是什么 运行程序需要环境,不同的环境,程序运行的结果就不一样。将程序打包给其它客户端使用时,客户端需要自己配置相应的环境。我们将程序和环境一起打包给其它客户端,客户端可直接运行程序。docker容器作为程序和操作系统…

防汛物资仓库管理系统|实现应急物资仓库三维可视化

系统概述 智慧应急物资仓库可视化系统(智物资DW-S300)采用了 B/S 架构的设计,通过浏览器即可快速登录操作。实现对库房内的应急物资从申购入库、出库、调拨、库内环境监测、维修保养、检测试验、处置报废等全周期、科学、规范的管理。系统以…

SpringBoot实用开发(十六)-- SpringBoot整合ActiveMQ

目录 1.导入springboot整合ActiveMQ的starter 2.进行yml文件的基础配置 3.使用JmsMessagingTemplate操作ActiveMQ

ssh爆破服务器的ip-疑似肉鸡

最近发现自己的ssh一直有一些人企图使用ssh暴力破解的方式进行密码破解.就查看了一下,真是网络安全太可怕了. 大家自己的服务器密码还是要设置好,管好,做好最基本的安全措施,不然最后只能沦为肉鸡. ssh登陆日志可以在/var/log下看到,ubuntu的话为auth.log,centos为secure文件 查…

45.HarmonyOS鸿蒙系统 App(ArkUI)创建列表(List)

列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列…

Android Activity 启动涉及几个进程

Zygote进程: Zygote进程在Android系统启动时被初始创建,并且初始化了虚拟机(Dalvik或ART),预加载了Android系统的核心类库。所有的Android应用进程都是通过fork()从Zygote进程派生出来的,这允许应用快速启动&#xff0…

ChatGPT 和 Elasticsearch:使用 Elastic 数据创建自定义 GPT

作者:Sandra Gonzales ChatGPT Plus 订阅者现在有机会创建他们自己的定制版 ChatGPT,称为 GPT,这替代了之前博客文章中讨论的插件。基于本系列的第一部分的基础 —— 我们深入探讨了在 Elastic Cloud 中设置 Elasticsearch 数据和创建向量嵌…

软件无线电安全之HackRF One初探

HackRF介绍 HackRF是一款开源软件无线电(SDR)平台,由Great Scott Gadgets公司推出。它具有广泛的频率覆盖范围,从1 MHz到6 GHz,支持大部分常见的无线通信频段。采用软件定义无线电技术,HackRF提供了自定义…

C语言 函数——断言与防御式编程

目录 如何确定假设的真假? 断言 防御式编程(Defensive programming) 如何确定假设的真假? 程序中的假设 *某个特定点的某个表达式的值一定为真 *某个特定点的某个表达式的值一定位于某个区间等 问题:如何确定这些…

嵌入式单片机 TTL电平、232电平、485电平的区别和联系

一、简介 TTL、232和485是常见的串口通信标准,它们在电平和通信方式上有所不同, ①一般情况下TTL电平应用于单片机外设,属于MCU/CPU等片外外设; ②232/485电平应用于产品整体对外的接口,一般是片外TTL串口转232/485…

五、Jenkins、Docker、SpringClound持续集成

Jenkins、Docker、SpringClound持续集成 一、部署介绍1.部署图2.微服务项目结构3.项目启动顺序 二、微服务项目在Windows运行1.配置java、maven环境2.初始化数据库表/数据2.1 tensquare_gathering服务表2.2 tensquare_gathering服务表 3.启动微服务4.微服务接口测试4.1 获取用户…

黑马苍穹外卖--再来一单(stream流转换、赋值与收集映射)

1.首先明确一下业务规则: 业务规则: 再来一单就是将原订单中的商品重新加入到购物车中 2.产品页面原型和开发接口文档 3.业务层逻辑代码开发 3.1 查询方向 我们要明确的是: 再来一单就是将原订单中的商品重新加入到购物车中------直接把商品加入到购物车&#…

JMeter 连接数据库报错信息整理

目录 1.SSL连接问题 2.驱动版本报错 3.缺少 mysql-connector 驱动问题 4.时区问题 5.‘com.mysql.jdbc.Driver’被弃用问题 1.SSL连接问题 这是以前遇到的问题,mysql 版本是 5.7.42,jmeter 下载的mysql-connector 驱动是 8.0.11,连接数据…

深入理解SOAP协议:基于XML的分布式通信协议

文章目录 目录 文章目录 前言 一、SOAP协议的基本概念 1. 基本概念 2. SOAP消息结构 3. SOAP的通信模式 4. SOAP协议的扩展性 5. SOAP的传输协议独立性 6. SOAP的安全性 7. SOAP协议的应用场景 二、具体格式和应用 1. SOAP消息结构示例 2. SOAP的通信模式示例 请求…

容斥原理系列

容斥原理 假设班里有 10 个学生喜欢数学,15 个学生喜欢语文,21 个学生喜欢编程,班里至少喜欢一门学科的有多少个学生呢? 容斥原理:指把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法…

prompt 工程整理(未完、持续更新)

工作期间会将阅读的论文、一些个人的理解整理到个人的文档中,久而久之就积累了不少“个人”能够看懂的脉络和提纲,于是近几日准备将这部分略显杂乱的内容重新进行梳理。论文部分以我个人的理解对其做了一些分类,并附上一些简短的理解&#xf…

分布式幂等性

1. 什么是幂等性? 幂等性是指在分布式系统中,一个操作多次执行的结果与其执行一次的结果相同。设计具有幂等性的分布式系统可以有效避免数据不一致和重复处理的问题。 幂等系统的应用场景 在微服务架构下,由于分布式天然特性的时序问题, 以…

【大语言模型】基础:TF-IDF

TF-IDF (Term Frequency-Inverse Document Frequency) 是一种用于信息检索与文本挖掘的统计方法,用来评估一个词对于一个文件集或一个语料库中的其中一份文件的重要性。它是一种常用于文本处理和自然语言处理的权重计算技术。 原理 TF-IDF 由两部分组成&#xff1…

二叉树例题分享

文章目录 二叉树例题分享[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)[701. 二叉搜索树中的插入操作](https://leetcode.cn/problems/insert-into-a-binary-search-tree/)[108. 将有序数组转换为二叉搜索树…