前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何在隔离环境中使用GPU加速的LocalAI进行文本嵌入

如何在隔离环境中使用GPU加速的LocalAI进行文本嵌入

原创
作者头像
点火三周
发布2025-02-07 20:43:50
发布2025-02-07 20:43:50
941
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

简介

你是否希望在Elasticsearch向量数据库之上构建一个RAG应用程序?是否需要对大量数据进行语义搜索?或者你需要在隔离环境中本地运行?这篇文章将告诉你如何实现这些需求。

Elasticsearch提供了多种方式为你的数据创建嵌入进行对称搜索。其中一种流行的方法是使用Elasticsearch开放推理API与OpenAI、Cohere或Hugging Face模型。这些平台支持许多大型、强大的模型,可以在GPU上运行嵌入。然而,第三方嵌入服务并不适用于隔离系统,或者对于有隐私顾虑和法规要求的客户来说是禁用的。

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

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

这篇文章将向你展示如何使用LocalAI计算数据的嵌入。我们将一步步地指导你如何设置LocalAI,配置它来计算数据的嵌入,并运行它以生成嵌入。你可以在你的笔记本电脑上,在隔离系统中,或者在任何需要计算嵌入的地方运行它。

你感兴趣了吗?让我们开始吧!

如何设置LocalAI来计算数据的嵌入

第一步:使用docker-compose设置LocalAI

要开始使用LocalAI,你需要在你的机器上安装Dockerdocker-compose。根据你的操作系统,你可能还需要安装NVIDIA容器工具包来支持Docker容器中的GPU。

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

代码语言:shell
复制
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的版本:

代码语言:shell
复制
docker-compose --version

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

代码语言:yaml
复制
# file: docker-compose.yaml
services:
  localai:
    image: localai/localai:latest-aio-gpu-nvidia-cuda-12
    container_name: localai
    environment:
      - MODELS_PATH=/models
      - THREADS=8
    ports:
      - "8080:8080"
    volumes:
      - $HOME/models:/models
    tty: true
    stdin_open: true
    restart: always
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

注意:

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

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

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

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

代码语言:yaml
复制
# file: mxbai-embed-large-v1.yaml
name: mxbai-embed-large-v1
backend: sentencetransformers
embeddings: true
parameters:
  model: mixedbread-ai/mxbai-embed-large-v1

第三步:启动LocalAI服务器

在分离模式下启动Docker容器,运行以下命令:

代码语言:shell
复制
docker-compose up -d

从你的$HOME目录运行。

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

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

代码语言:shell
复制
~$ 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。运行以下命令:

代码语言:shell
复制
docker logs localai

应该能看到类似以下的信息:

代码语言:shell
复制
$ 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

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

代码语言:shell
复制
curl -k http://localhost:8080/v1/models

应产生如下输出:

代码语言:json
复制
{"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"}]}

第四步:创建Elasticsearch _inference 服务

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

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

代码语言:json
复制
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请求。

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

代码语言:json
复制
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!"
}

应产生如下输出:

代码语言:json
复制
{
  "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模型的能力。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 如何设置LocalAI来计算数据的嵌入
    • 第一步:使用docker-compose设置LocalAI
    • 第二步:配置LocalAI使用Sentence Transformers模型
    • 第三步:启动LocalAI服务器
    • 第四步:创建Elasticsearch _inference 服务
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档