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.hqwc.cn/news/619896.html

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

相关文章

模型预测控制MPC(2)—— 无约束线性MPC

前文:模型预测控制MPC(1)—— 基础概念参考:模型预测控制(2022春)本文从偏控制的角度介绍无约束线性MPC方法, x , u , J x,u,J x,u,J 分别代表状态、动作和代价函数 文章目录 1. 问题定义1.1 多…

低代码集成Java系列:高效构建自定义插件

前言 随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战。传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效、快速的开发方式。今天小编就以构建命令插件为例,展示如何使…

kylin java.io.IOException: error=13, Permission denied

linux centos7.8 error13, Permission denied_linux open error13-CSDN博客 chmod -R 777 /home/zengwenfeng/kkFileView-4.2.1 2024-04-15 13:15:17.416 WARN 3400 --- [er-offprocmng-1] o.j.l.office.LocalOfficeProcessManager : An I/O error prevents us to determine…

ThreadX在STM32上的移植:通用启动文件tx_initialize_low_level.s

在嵌入式系统开发中,实时操作系统(RTOS)的选择对于系统性能和稳定性至关重要。ThreadX是一种广泛使用的RTOS,它以其小巧、快速和可靠而闻名。在本文中,我们将探讨如何将ThreadX移植到STM32微控制器上,特别是…

ubuntu22安装snipaste

Ubuntu 22.04 一、Snipaste 介绍和下载 Snipaste 官网下载链接: Snipaste Downloads 二、安装并使用 Snipaste # 1、进入Snipaste-2.8.9-Beta-x86_64.AppImage 目录(根据自己下载目录) cd /home/jack/Downloads/softwares/AppImage# 2、Snipaste-2.8.9-…

【菜狗学前端】npm i -g nodemon 遇到的下载卡住及运行权限问题解决记录

一、下载nodemon原因 nodemon作用:用node环境运行js文件时可以实时刷新运行出结果 (即修改js代码后不需再手动重新运行js文件) 二、下载卡住 reify:semver:timing reifyNode:node_modules/nodemon Completed 卡住位置:reify:semver: timing reifyNode…

易基因:ENCODE和modENCODE联盟的ChIP-seq实验设计指南和注意事项|干货

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 ChIP-seq(染色质免疫沉淀测序)实验指南和实践(ChIP-seq guidelines and practices of the ENCODE and modENCODE consortia),由…

面试官:MySQL的自增 ID 用完了,怎么办?

如果你用过或了解过MySQL,那你一定知道自增主键了。每个自增id都是定义了初始值,然后按照指定步长增长(默认步长是1)。虽然,自然数是没有上限的,但是我们在设计表结构的时候,通常都会指定字段长…

c++中常用库函数

大小写转换 islower/isupper函数 char ch1 A; char ch2 b;//使用islower函数判断字符是否为小写字母 if(islower(ch1)){cout << ch1 << "is a lowercase letter." << end1; } else{cout << ch1 << "is not a lowercase lette…

【新特性】专为开发者设计的 Jira 个性化工作建议

开发者体验&#xff08;Developer Experience&#xff0c;简称 DX&#xff09;是指开发人员在使用工具、框架或平台时所体验到的整体感受和印象。类似于用户体验&#xff08;User Experience&#xff0c;简称UX&#xff09;&#xff0c;开发者体验关注的是开发者在他们的工作中…

安装Minitools报错_让我们手动安装 fastboot 驱动

安装Minitools报错_让我们手动安装 fastboot 驱动 求赞完整的报错信息解决办法步骤一&#xff1a;使用设备管理器手动添加硬件步骤二&#xff1a;确认驱动安装成功步骤三&#xff1a;测试驱动功能 让硬件的操作系统连接xshell 求赞 如果你是专门来找的这个报错,不是刷到的,我非…

使用 code-server 搭建在线的 VS Code 编辑器

文章目录 前言安装体验后记 前言 VS Code 是一个非常流行的代码编辑器&#xff0c;安装各种拓展下也可以当作全功能的IDE使用。VS Code本身是基于Web方案构建的&#xff0c;完全可以搭建服务器&#xff0c;然后通过浏览器访问。事实上官方就是这么设计的。现在打开任何一个Git…