如何在隔离环境中设置 LocalAI 以实现 GPU 驱动的文本嵌入

作者:来自 Elastic Valeriy Khakhutskyy

你是否想在 Elasticsearch 向量数据库之上构建 RAG 应用程序?你是否需要对大量数据使用语义搜索?你是否需要在隔离环境中本地运行?本文将向你展示如何操作。

Elasticsearch 提供了多种方法来为你的数据创建嵌入以进行对称搜索。最流行的方法之一是将 Elasticsearch open inference API 与 OpenAI、Cohere 或 Hugging Face 模型结合使用。这些平台支持许多可以在 GPU 上运行的大型、强大的嵌入模型。但是,第三方嵌入服务不适用于隔离系统,或者对有隐私问题和监管要求的客户不开放。

或者,你可以使用 ELSER 和 E5 在本地计算嵌入。这些嵌入模型在 CPU 上运行,并针对速度和内存使用进行了优化。它们也适用于隔离系统,可以在云中使用。但是,这些模型的性能不如在 GPU 上运行的模型。

如果你可以在本地计算数据的嵌入,那不是很棒吗?使用 LocalAI,你就可以做到这一点。LocalAI 是一个与 OpenAI API 兼容的免费开源推理服务器。它支持使用多个后端进行模型推理,包括用于嵌入的 Sentence Transformers 和用于文本生成的 llama.cpp。LocalAI 还支持 GPU 加速,因此你可以更快地计算嵌入。

本文将向你展示如何使用 LocalAI 计算数据的嵌入。我们将引导你完成设置 LocalAI、配置它以计算数据的嵌入以及运行它以生成嵌入的过程。你可以在笔记本电脑、隔离系统或任何需要计算嵌入的地方运行它。

我引起了你的兴趣吗?让我们开始吧!

步骤 1:使用 docker-compose 设置 LocalAI

要开始使用 LocalAI,你需要在计算机上安装 Docker 和 docker-compose。根据你的操作系统,你可能还需要安装 NVIDIA Container Toolkit 以在 Docker 容器内提供 GPU 支持。

旧版本不支持 NVIDIA 运行时指令,因此请确保安装了最新版本的 docker-compose:

sudo curl -L https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

检查 docker-compose 的版本:

docker-compose --version

你需要使用以下 docker-compose.yaml 配置文件

# file: docker-compose.yaml
services:localai:image: localai/localai:latest-aio-gpu-nvidia-cuda-12container_name: localaienvironment:- MODELS_PATH=/models- THREADS=8ports:- "8080:8080"volumes:- $HOME/models:/modelstty: truestdin_open: truerestart: alwaysdeploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [gpu]

注意

  1. 我们将 $HOME/models 目录挂载到容器内的 /models 目录。这是模型的存储位置。你需要调整要存储模型的目录的路径。
  2. 我们指定了用于推理的线程数和要使用的 GPU 数量。你可以根据硬件配置调整这些值。

第 2 步:配置 LocalAI 以使用 Sentence Transformers 模型

在本教程中,我们将使用 mixedbread-ai/mxbai-embed-large-v1,它目前在 MTEB 排行榜上排名第 4。但是,任何可以由 sentence-transformers 库加载的嵌入模型都可以以相同的方式工作。

创建目录 $HOME/models 和配置文件 $HOME/models/mxbai-embed-large-v1.yaml,内容如下:

# file: mxbai-embed-large-v1.yaml
name: mxbai-embed-large-v1 
backend: sentencetransformers
embeddings: true
parameters:model: mixedbread-ai/mxbai-embed-large-v1

步骤 3:启动 LocalAI 服务器

通过运行以下命令以分离模式启动 Docker 容器

docker-compose up -d

从你的 $HOME 目录。

通过运行 docker-compose ps 验证容器是否已正确启动。检查 localai 容器是否处于启动状态。

你应该看到类似于以下内容的输出:

~$ docker-compose ps
WARN[0000] /home/valeriy/docker-compose.yaml: `version` is obsolete 
NAME      IMAGE                                           COMMAND                  SERVICE   CREATED              STATUS                                 PORTS
localai   localai/localai:latest-aio-gpu-nvidia-cuda-12   "/aio/entrypoint.sh"     localai   About a minute ago   Up About a minute (health: starting)   0.0.0.0:8080->8080/tcp

如果出现问题,请检查日志。你还可以使用日志来验证 localai 是否可以看到 GPU。运行

docker logs localai

应该可以看到这样的信息:

$ docker logs localai
===> LocalAI All-in-One (AIO) container starting...
NVIDIA GPU detected
Thu Mar 28 11:15:41 2024       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10              Driver Version: 535.86.10    CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla T4                       Off | 00000000:00:04.0 Off |                    0 |
| N/A   59C    P0              29W /  70W |      2MiB / 15360MiB |      6%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------++---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+
NVIDIA GPU detected. Attempting to find memory size...
Total GPU Memory: 15360 MiB

最后,你可以通过查询已安装模型的列表来验证推理服务器是否正常工作:

curl -k http://localhost:8080/v1/models

应该产生如下输出:

{"object":"list","data":[{"id":"tts-1","object":"model"},{"id":"text-embedding-ada-002","object":"model"},{"id":"gpt-4","object":"model"},{"id":"whisper-1","object":"model"},{"id":"stablediffusion","object":"model"},{"id":"gpt-4-vision-preview","object":"model"},{"id":"MODEL_CARD","object":"model"},{"id":"llava-v1.6-7b-mmproj-f16.gguf","object":"model"},{"id":"voice-en-us-amy-low.tar.gz","object":"model"}]}

步骤 4:创建 Elasticsearch _inference 服务

我们已经创建并配置了 LocalAI 推理服务器。由于它是 OpenAI 推理服务器的直接替代品,我们可以在 Elasticsearch 中创建一个新的 openai 推理服务。Elasticsearch 8.14 中实现了对此功能的支持。

要创建新的推理服务,请在 Kibana 中打开 Dev Tools 并运行以下命令:

PUT _inference/text_embedding/mxbai-embed-large-v1
{"service": "openai","service_settings": {"model_id": "mxbai-embed-large-v1","url": "http://localhost:8080/embeddings","api_key": "ignored"}
}

注意

  1. api_key 参数是 openai 服务所必需的,必须设置,但具体值对我们的 LocalAI 服务并不重要。
  2. 对于大型模型,如果模型首次下载到 LocalAI 服务器需要很长时间,则 PUT 请求最初可能会超时。只需在短时间内重试 PUT 请求即可。

最后,你可以验证推理服务是否正常工作:

POST _inference/text_embedding/mxbai-embed-large-v1
{"input": "It takes all the running you can do, to keep in the same place. If you want to get somewhere else, you must run at least twice as fast as that!"
}

应该产生如下输出:

{"text_embedding": [{"embedding": [-0.028375082,0.6544269,0.1583663,0.88167363,0.5215657,0.05415681,0.62085253,0.069351405,0.29407632,0.51018727,0.8183201,...]}]
}

结论

按照本文中的步骤,你可以设置 LocalAI,使用 GPU 加速计算数据的嵌入,而无需依赖第三方推理服务。借助 LocalAI,在隔离环境中或有隐私问题的 Elasticsearch 用户可以利用世界一流的向量数据库来开发他们的 RAG 应用程序,而无需牺牲计算性能或选择最适合其需求的 AI 模型的能力。

立即尝试使用 Elastic Stack 构建你自己的 RAG 应用程序:在云端、隔离环境中或在你的笔记本电脑上!

准备好自己尝试了吗?开始免费试用。
希望将 RAG 构建到你的应用程序中?想尝试使用矢量数据库的不同 LLM 吗?
查看我们在 Github 上为 LangChain、Cohere 等提供的示例笔记本,并立即加入 Elasticsearch Relevance Engine 培训。

原文:LocalAI for GPU-Powered Text Embeddings in Air-Gapped Environments — Elastic Search Labs

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

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

相关文章

多曝光融合算法(三)cv2.createAlignMTB()多曝光图像融合的像素匹配问题

文章目录 1.cv2.createAlignMTB() 主要是计算2张图像的位移,假设位移移动不大2.多曝光图像的aline算法:median thresold bitmap原理讲解3.图像拼接算法stitch4.多曝光融合工具箱 1.cv2.createAlignMTB() 主要是计算2张图像的位移,假设位移移动…

Python中猴子补丁是什么,如何使用

1、猴子补丁奇遇记 🐒 在Python的世界深处,隐藏着一种神秘而又强大的技巧——猴子补丁(Monkey Patching)。这是一项允许你在程序运行时动态修改对象(如模块、类或函数)的行为的技术。它得名于其“快速修补…

问题排查: Goalng Defer 带来的性能损耗

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言问题背景结论 引言 性能优化之路道阻且长,因为脱敏规定,…

vite常识性报错解决方案

1.导入路径不能以“.ts”扩展名结束。考虑改为导入“xxx.js” 原因:当你尝试从一个以 .ts 结尾的路径导入文件时,ESLint 可能会报告这个错误,因为它期望导入的是 JavaScript 文件(.js 或 .jsx)而不是 TypeScript 文件&…

coap-emqx:使用libcoap与emqx通信

# emqx开启CoAP网关 请参考【https://blog.csdn.net/chenhz2284/article/details/139562749?spm1001.2014.3001.5502】 # 写一个emqx的客户端程序&#xff0c;不断地往topic【server/1】发消息 【pom.xml】 <dependency><groupId>org.springframework.boot<…

开源与新质生产力

在这个信息技术迅猛发展的时代&#xff0c;全球范围内的产业都在经历着深刻的变革。在这样的背景下&#xff0c;“新质生产力”的概念引起了广泛的讨论。无论是已经成为或正努力转型成为新质生产力的企业&#xff0c;都在寻求新的增长动力和竞争优势。作为一名长期从事开源领域…

Linux用户和用户组的管理

目录 前言一、系统环境二、Linux用户组的管理2.1 新增用户组2.2 删除用户组2.3 修改用户组2.4 查看用户组 三、Linux用户的管理3.1 新增用户3.2 删除用户3.3 修改用户3.4 查看用户3.5 用户口令&#xff08;密码&#xff09;的管理 总结 前言 本篇文章介绍如何在Linux系统上实现…

OrangePi Kunpeng Pro深度评测:性能与体验的完美融合

文章目录 一、引言二、硬件开箱与介绍1.硬件清单2.硬件介绍 三、软件介绍四、性能测试1. 功率测试2. cpu测试2.1 单线程cpu测试2.2 多线程cpu测试 五、实际开发体验1. 搭建API服务器2. ONNX推理测试3. 在线推理平台 五、测评总结1. 能与硬件配置2. 系统与软件3. 实际开发体验个…

探索智慧商场的功能架构与应用

在数字化和智能化的浪潮下&#xff0c;智慧商场已经成为零售业的重要发展方向之一。智慧商场系统的功能架构设计与应用&#xff0c;结合了现代信息技术和零售业的实际需求&#xff0c;为商场的管理和运营提供了全新的解决方案。本文将深入探讨智慧商场的功能架构与应用&#xf…

matlab---app

一 基础 标签和信号灯没有回调函数 clc,clear,close all %清理命令区、工作区&#xff0c;关闭显示图形 warning off %消除警告 feature jit off %加速代码运行 ysw{i}i %循环赋值 celldisp(ysw) %显示元胞数组ysw.y1{1}[1,2] …

《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化&#xff0c;从架构上颠覆了原有的网络管理&#xff0c;所以SDN的架构安全就是首先要解决的问题。例如&#xff0c;SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

@BeforeAll 和 @AfterAll 必须是 static 的原因

BeforeAll 和 AfterAll 必须是 static 的原因 执行时机&#xff1a; BeforeAll 方法在所有测试方法之前运行。AfterAll 方法在所有测试方法之后运行。 实例化前/后的执行&#xff1a; 因为 BeforeAll 是在所有测试方法执行之前运行的&#xff0c;所以它在任何一个测试实例创建…

基于springboot的教学管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;教师管理&#xff0c;学生管理&#xff0c;课程管理 教师账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;课程管理&#xff0c;课程表…

数据结构---树与二叉树

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

【CTF MISC】XCTF GFSJ0290 reverseMe Writeup(图像处理)

reverseMe 暂无 解法 导入 Photoshop。 水平翻转&#xff0c;得到 flag。 Flag flag{4f7548f93c7bef1dc6a0542cf04e796e}声明 本博客上发布的所有关于网络攻防技术的文章&#xff0c;仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行&#xf…

QField如何打开工程或数据文件

Field有个文件选择器&#xff0c;允许从本地设备打开工程。如果想从云端打开文件&#xff0c;请参阅 QFieldCloud 。 注意&#xff1a;请注意&#xff0c;卸载QField时&#xff0c;应用程序文件夹将被删除&#xff0c;而更新则不会。 导入并打开本地工程 QField界面 当转到 …

了解Synchronized对象头?

1、对象头的结构 Java对象存储在内存中结构为&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;实例数据&#xff08;Instance Data&#xff09;&#xff1a;定义类中的成员属性对齐填充字节&#xff08;Padding&#xff09;&#xff1a;由于HotSpot虚拟机的自…

Linux--进程间通信(system V共享内存)

目录 1.原理部分 2.系统调用接口 参数说明 返回值 1. 函数原型 2. 参数说明 3. 返回值 4. 原理 5. 注意事项 3.使用一下shmget&#xff08;一段代码&#xff09; 4.一个案例&#xff08;一段代码) 1.简单封装一下 2.使用共享内存 2.1挂接&#xff08;shmat&#x…

Java 语言概述 -- Java 语言的介绍、现在、过去与将来

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 001 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…