• 开源文本嵌入模型M3E


    在这里插入图片描述

    进入正文前,先扯点题外话

    这两天遇到一个棘手的问题,在用 docker pull 拉取镜像时,会报错: x509: certificate has expired or is not yet valid

    具体是下面👇这样的

    root@DS918:/volume2/docker/xiaoya# docker pull alpine:3.18.2
    3.18.2: Pulling from library/alpine
    31e352740f53: Already exists 
    error pulling image configuration: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/c1/c1aabb73d2339c5ebaa3681de2e9d9c18d57485045a4e311d9f8004bec208d67/data?verify=1713883560-%2F3RhBOCWXsSAz9IO7i8g2LuGRCE%3D": x509: certificate has expired or is not yet valid: current time 2024-04-23T21:56:03+08:00 is after 2021-09-30T14:01:15Z
    
    • 1
    • 2
    • 3
    • 4

    通过 dockerproxy 下载则是正常的

    下载 ghcr.io 的镜像也正常

    ①、网络没问题,另一台机器上下载镜像是正常的

    ②、检查了证书也没到期,下图是重新生成的证书

    ③、系统时间也没问题

    ④、重装过 docker 套件(卸载–>重启–>安装),但问题一直没得到解决

    网上找了两天,也没有找到可行的解决方案,有点抓瞎 😂

    有遇到过这种情况并解决的朋友,请不吝赐教,感谢!


    本文会用到 One APIM3E 进行管理和分发

    文章传送门: 大模型接口管理和分发系统One API


    什么是 M3E ?

    M3EMoka Massive Mixed Embedding 的缩写,是一个由 MokaAI 训练并开源的文本嵌入模型。适合使用场景主要是中文,少量英文的情况,其在文本分类和文本检索任务上表现出色,据称在某些任务上超越了 ChatGPT

    M3E 共有三种模型,各有不同的维度

    • m3e-small
    • m3e-base
    • m3e-large

    什么是嵌入( Embedding) ?

    嵌入是一种将单词、短语或整个文档转换为密集向量的技术。每个单词或短语被转换成一组数字,这组数字捕捉了该文本的某些语义特征。

    安装

    在群晖上以 Docker 方式安装。

    在注册表中搜索 m3e-large-api ,选择第一个 stawky/m3e-large-api,只有一个 latest 版本,双击直接下载。

    镜像比较大,如果下载不动,可以用命令行试试从国内阿里源下载

    端口

    本地端口不冲突就行,不确定的话可以用命令查一下

    # 查看端口占用
    netstat -tunlp | grep 端口号
    
    • 1
    • 2
    本地端口容器端口
    60086008

    命令行安装

    如果你熟悉命令行,可能用 docker cli 更快捷

    # 运行容器(国外)
    docker run -d \
       --restart unless-stopped \
       --name m3e-large-api \
       -p 6008:6008 \
       stawky/m3e-large-api:latest
    
    # 运行容器(国内)
    docker run -d \
       --restart unless-stopped \
       --name m3e-large-api \
       -p 6008:6008 \
       registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如果你的机器支持 GPU,可以增加一个选项 --gpus all,表示启用所有可用的 GPU 资源

    # 运行容器(国外)
    docker run -d \
       --restart unless-stopped \
       --name m3e-large-api \
       --gpus all \
       -p 6008:6008 \
       stawky/m3e-large-api:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

    version: '3'
    
    services:
      m3e-large-api:
        image: stawky/m3e-large-api:latest
        #image: registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest
        container_name: m3e-large-api
        restart: unless-stopped  
        ports:
          - "6008:6008"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后执行下面的命令

    # 新建文件夹 m3e-large-api 和 子目录
    mkdir -p /volume1/docker/m3e-large-api
    
    # 进入 m3e-large-api 目录
    cd /volume1/docker/m3e-large-api
    
    # 将 docker-compose.yml 放入当前目录
    
    # 一键启动
    docker-compose up -d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行

    在浏览器中输入 http://群晖IP:6008 就能看到主界面

    命令行

    要验证 API 服务是否正常,除了查看日志

    还可以用下面的示例

    # 命令行测试
    curl --location --request POST 'http://<服务地址:端口>/v1/embeddings' \
    --header 'Authorization: Bearer <秘钥>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "model": "<模型>",
      "input": ["<问题>"]
    }'
    
    # 示例
    curl --location --request POST 'http://192.168.0.197:6008/v1/embeddings' \
    --header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "model": "m3e",
      "input": ["laf是什么"]
    }'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    其中

    • <服务地址:端口>:填入 http://群晖IP:6008
    • <秘钥>:填入默认值 sk-aaabbbcccdddeeefffggghhhiiijjjkkk
    • <模型>:填入模型名称 m3e
    • <问题>:填入你想问的问题

    如果看到下图这样的返回,就 OK

    One API

    也可以用 One API进行管理和分发。老苏建议用这种方式

    One API 中添加新的渠道

    • 类型:选择 自定义渠道
    • Base URL:填入 M3E 的访问地址 http://群晖IP:6008
    • 名称:例如:M3E
    • 分组:default就行
    • 模型:输入自定义模型名称,填入 即可,例如:m3e,其他服务调用时,需匹配这个模型的名称
    • 秘钥:sk-aaabbbcccdddeeefffggghhhiiijjjkkk

    保存之后,一般会测试一下

    返回 404 是正常的,M3E不是聊天模型,但测试调用的是 chat 接口,所以会失败

    到这里,准备工作基本上就完成了,下一篇将正式进入知识库问答系统的搭建

    参考文档

    moka-ai/m3e-large · Hugging Face
    地址:https://huggingface.co/moka-ai/m3e-large

    接入 M3E 向量模型 | FastGPT
    地址:https://doc.fastai.site/docs/development/custom-models/m3e/

    docker部署m3e-large-api无法启动_开发工具-CSDN问答
    地址:https://ask.csdn.net/questions/8056249

    docker stawky/m3e-large-api internal error · Issue #741 · labring/FastGPT
    地址:https://github.com/labring/FastGPT/issues/741

    本地部署的m3e-large-api不可用 · Issue #931 · labring/FastGPT
    地址:https://github.com/labring/FastGPT/issues/931

  • 相关阅读:
    【图像检测】基于计算机视觉实现手位置检测附matlab代码
    搭建强化学习的机械臂MuJoCo环境以及urdf转xml文件方法
    C# 中感叹号 (!) 的一些常见用法
    springboot3:web开发
    怎么优化Web网站性能
    Activiti审批流
    Python Pandas PK esProc SPL,谁才是数据预处理王者?
    韩国程序员面试考什么?
    python使用钉钉机器人给钉钉发送消息
    【Go语言刷题篇】Go完结篇|函数、结构体、接口、错误入门学习
  • 原文地址:https://blog.csdn.net/wbsu2004/article/details/138148089