Xorbits inference操作实战

news2025/1/10 20:52:29

1.操作环境

序号软件版本备注
1Windows1.版本:Windows 10 专业版2.版本号:21H23.操作系统内部版本:19044.1889
2Docker Desktop4.24.2 (124339)
3WSLUbuntu 22.04 LTS
4Python3.10
5CUDA12.1
6Dify0.6.6

Xorbits inference 是一个强大且通用的分布式推理框架,旨在为大型语言模型、语音识别模型和多模态模型提供服务,甚至可以在笔记本电脑上使用。它支持多种与 GGML 兼容的模型,如 ChatGLM、Baichuan、Whisper、Vicuna、Orca 等。Dify 支持以本地部署的方式接入 Xinference 部署的大型语言模型推理和 Embedding 能力。

2.本地安装 Xinfernece

安装 Xinference 用于推理的基础依赖,以及支持用 ggml推理PyTorch推理的依赖。

pip install "xinference"
pip install "xinference[ggml]"
pip install "xinference[pytorch]"
pip install "xinference[all]"

执行脚本报错:

注解:暂时没有解决,可能是版本问题。

3.Docker安装Xinfernece

(1)启动容器

Nvidia GPU 用户可以使用Xinference Docker 镜像 启动 Xinference 服务器。在执行安装命令之前,确保系统中已经安装了 Docker 和 CUDA。你可以使用如下方式在容器内启动 Xinference,同时将 9997 端口映射到宿主机的 9998 端口,并且指定日志级别为 DEBUG,也可以指定需要的环境变量。

docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0 --log-level debug

需要修改<your_version>为实际使用版本,也可以为latest

docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0 --log-level debug

执行成功容器显示:

(2)打开Xinference界面

通过链接http://localhost:9998/ui/#/login打开界面,如下所示:

登录账号和密码,如下所示:

(3)Web端启动部署

xinference提供了两种部署模型的方式:Web端启动,命令端启动。接下来使用Web端启动:

部署模型过程中输出日志,如下所示:

ChatGLM3服务启动后,可以在Dify中进行模型供应商注册。需要说明的是服务器URL中的IP地址,可通过ifconfig命令,在Ubuntu中查看。因为无论配置127.0.0.1,还是0.0.0.0均不通。

(4)命令端启动

下面是分别启动chat / embedding / rerank 三种模型的cmd命令。启动完了,会返回对应模型的UID:

# 部署chatglm3
xinference launch --model-name chatglm3 --size-in-billions 6 --model-format pytorch --quantization 8-bit
# 部署 bge-large-zh embedding
xinference launch --model-name bge-large-zh --model-type embedding
# 部署 bge-reranker-large rerank
xinference launch --model-name bge-reranker-large --model-type rerank

测试模型是否已经部署到本地,以rerank模型为例可以执行下面这个脚本:

from xinference.client import Client

# url 可以是local的端口 也可以是外接的端口
url = "http://172.19.0.1:6006"
print(url)

client = Client(url)
model_uid = client.launch_model(model_name="bge-reranker-base", model_type="rerank")
model = client.get_model(model_uid)

query = "A man is eating pasta."
corpus = [
    "A man is eating food.",
    "A man is eating a piece of bread.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
    "A woman is playing violin."
]
print(model.rerank(corpus, query))

4.分布式部署

分布式场景下,需要在一台服务器上部署一个 Xinference supervisor,并在其余服务器上分别部署一个 Xinference worker。 具体步骤如下:

(1)启动 supervisor执行命令

xinference-supervisor -H "${supervisor_host}",替换 ${supervisor_host} 为 supervisor 所在服务器的实际主机名或 IP 地址。

(2)启动 workers其余服务器执行命令

xinference-worker -e "http://${supervisor_host}:9997"

Xinference 启动后,将会打印服务的 endpoint。这个 endpoint 用于通过命令行工具或编程接口进行模型的管理:

  • 本地部署下,endpoint 默认为 http://localhost:9997

  • 集群部署下,endpoint 默认为 http://${supervisor_host}:9997。其中 ${supervisor_host} 为 supervisor 所在服务器的主机名或 IP 地址。

5.常用命令

(1)启动指定模型
xinference launch --model-name "llama-2-chat" --model-format ggmlv3 --size-in-billions 7 --quantization q4_0 --endpoint "http://127.0.0.1:9091"

启动 Falcon-40B-Instruct 模型:

xinference launch --model-name "falcon-instruct" \
   --model-format pytorch \
   -size-in-billions 40 \ 
   --endpoint "http://127.0.0.1:9997"

启动 Llama 2-Chat-70B 模型:

xinference launch --model-name "llama-2-chat" \ 
  --model-format ggmlv3 \
  --size-in-billions 70 \
  --endpoint "http://127.0.0.1:9997"
(2)列举指定机器上运行的模型
xinference list --endpoint "http://127.0.0.1:9091"
(3)结束模型
xinference terminate --model-uid ${model_uid}

6.模型注册

(1)注册模型

编写模型的配置文件。PyTorch 类型可以加载本地模型,ggmlv3 类型只能加载 HuggingFace 上的模型。

{
  "version": 1,
  "context_length": 2048,
  "model_name": "custom-llama-2",
  "model_lang": [
    "en"
  ],
  "model_ability": [
    "generate"
  ],
  "model_family": "llama-2",
  "model_specs": [
    {
      "model_format": "pytorch",
      "model_size_in_billions": 7,
      "quantizations": [
        "4-bit",
        "8-bit",
        "none"
      ],
      "model_id": "meta-llama/Llama-2-7b",
      "model_uri": "file:///path/to/llama-2-7b"
    },
    {
      "model_format": "ggmlv3",
      "model_size_in_billions": 7,
      "quantizations": [
        "q4_0",
        "q8_0"
      ],
      "model_id": "TheBloke/Llama-2-7B-GGML",
      "model_file_name_template": "llama-2-7b.ggmlv3.{quantization}.bin"
      "model_uri": "file:///path/to/ggml-file"
    }
  ],
}
  • model_id:HuggingFace 上模型的 ID

  • model_uri:表示可从中加载模型的 URI 的字符串,例如"file:///path/to/llama-2-7b"。如果模型 URI 不存在,推理将尝试使用模型 ID 从 HuggingFace 下载模型。

  • model_file_name_template:ggml 模型需要。用于基于量化定义模型文件名的字符串模板。

(2)注册模型到服务中
xinference register --model-type LLM --file model.json --persist

也可通过Python代码方式进行注册:

import json
from xinference.client import Client

with open('model.json') as fd:
    model = fd.read()

# replace with real xinference endpoint
endpoint = 'http://localhost:9997'
client = Client(endpoint)
client.register_model(model_type="<model_type>", model=model, persist=False)
(3)列举内置和自定义模型
xinference registrations --model-type LLM --endpoint "http://127.0.0.1:9091"
Type    Name              Language      Ability                Is-built-in
------  ----------------  ------------  ---------------------  -------------
LLM     baichuan          ['en', 'zh']  ['embed', 'generate']  True
LLM     baichuan-chat     ['en', 'zh']  ['embed', 'chat']      True
LLM     wizardlm-v1.0     ['en']        ['embed', 'chat']      True
LLM     vicuna-v1.3       ['en']        ['embed', 'chat']      True
LLM     orca              ['en']        ['embed', 'chat']      True
LLM     chatglm           ['en', 'zh']  ['embed', 'chat']      True
LLM     chatglm2          ['en', 'zh']  ['embed', 'chat']      True
LLM     chatglm2-32k      ['en', 'zh']  ['embed', 'chat']      True
LLM     llama-2-chat      ['en']        ['embed', 'chat']      True
LLM     llama-2           ['en']        ['embed', 'generate']  True
LLM     opt               ['en']        ['embed', 'generate']  True
LLM     falcon            ['en']        ['embed', 'generate']  True
LLM     falcon-instruct   ['en']        ['embed', 'chat']      True
LLM     starcoderplus     ['en']        ['embed', 'generate']  True
LLM     starchat-beta     ['en']        ['embed', 'chat']      True
LLM     qwen-chat         ['en', 'zh']  ['embed', 'chat']      True
LLM     starcoder         ['en']        ['generate']           True
LLM     gpt-2             ['en']        ['generate']           True
LLM     internlm          ['en', 'zh']  ['embed', 'generate']  True
LLM     internlm-chat     ['en', 'zh']  ['embed', 'chat']      True
LLM     internlm-chat-8k  ['en', 'zh']  ['embed', 'chat']      True
LLM     vicuna-v1.5       ['en']        ['embed', 'chat']      True
LLM     vicuna-v1.5-16k   ['en']        ['embed', 'chat']      True
LLM     wizardmath-v1.0   ['en']        ['embed', 'chat']      True

也可以通过Python代码方式进行列举:

registrations = client.list_model_registrations(model_type="<model_type>")
(4)启动自定义模型
xinference launch --model-name custom-llama-2 --model-format pytorch

会根据参数生成本地模型目录名。如模型名 custom-chinese-alpaca-2 生成目录:custom-chinese-alpaca-2-ggmlv3-7b。

也可通过Python代码方式启动模型:

uid = client.launch_model(model_name='custom-llama-2', model_format='pytorch')
(5)同自定义模型交互
xinference generate --model-uid ${UID}

也可通过Python代码实现:

model = client.get_model(model_uid=uid)
model.generate('What is the largest animal in the world?')

结果输出如下所示:

{
   "id":"cmpl-a4a9d9fc-7703-4a44-82af-fce9e3c0e52a",
   "object":"text_completion",
   "created":1692024624,
   "model":"43e1f69a-3ab0-11ee-8f69-fa163e74fa2d",
   "choices":[
      {
         "text":"\nWhat does an octopus look like?\nHow many human hours has an octopus been watching you for?",
         "index":0,
         "logprobs":"None",
         "finish_reason":"stop"
      }
   ],
   "usage":{
      "prompt_tokens":10,
      "completion_tokens":23,
      "total_tokens":33
   }
}
(6)取消注册模型
xinference unregister --model-type LLM --model-name custom-llama-2

会删除/root/.xinference/model/llm/目录下的自定义模型配置 json 文件。

(7)通过Web注册模型

参考文献

[1] 教你快速上手Xinference分布式推理框架:https://cloud.tencent.com/developer/article/2328362

[2] 自定义模型:https://inference.readthedocs.io/en/latest/models/custom.html

[3] LangChain - Xorbits Inference:https://python.langchain.com/v0.1/docs/integrations/llms/xinference/

[4] LlamaIndex - Xorbits Inference:https://docs.llamaindex.ai/en/stable/examples/llm/xinference_local_deployment/

[5] Xinference 对于不同模型支持不同的推理引擎:https://inference.readthedocs.io/zh-cn/latest/user_guide/backends.html

[6] 接入 Xinference 部署的本地模型:https://docs.dify.ai/v/zh-hans/guides/model-configuration/xinference

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

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

相关文章

那些好用的 Vue3 的工具搭子!!【送源码】

2020 年 9 月 18 日 Vue3 的正式发布已经过去了大约 3 年 9 个月左右&#xff01;&#xff01;&#xff01; 随着 Vue3 版本的逐渐成熟&#xff0c;我们的前端世界也迎来了一系列令人振奋的更新和工具。Vue 生态圈的持续扩大&#xff0c;无疑为前端开发人员带来了前所未有的便…

C盘清理和管理

本篇是C盘一些常用的管理方法&#xff0c;以及定期清理C盘的方法&#xff0c;大部分情况下都能避免C盘爆红。 C盘清理和管理 C盘存储管理查看存储情况清理存储存储感知清理临时文件清理不需要的 迁移存储 磁盘清理桌面存储管理应用存储管理浏览器微信 工具清理 C盘存储管理 查…

鸿蒙开发设备管理:【@ohos.multimodalInput.touchEvent (触摸输入事件)】

触摸输入事件 设备上报的触屏事件。 说明&#xff1a; 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import {Action,ToolType,SourceType,Touch,TouchEvent} from ohos.multimodalInput.touchEvent;…

【Redis7】零基础篇

1 课程概述 2 Redis入门概述 2.1 是什么 Redis是基于内存的KV键值对内存数据库 Redis&#xff1a;Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c…

STM32F1+HAL库+FreeTOTS学习3——任务创建(动态和静态两种)

STM32F1HAL库FreeTOTS学习3——任务创建&#xff08;动态和静态两种&#xff09; 任务创建API函数任务创建流程代码实现1. 动态任务创建和删除2. 静态任务创建和删除 上期我们学习了STM32移植FreeRTOS搭建基准工程&#xff0c;现在我们来学习任务创建 任务创建API函数 前面我们…

RK3568平台(USB篇)USB HID设备

一.USB HID设备简介 USB HID设备主要用于和计算机进行交互通信&#xff0c;典型的USB HID类设备包括USB键盘、USB鼠标、USB游戏手柄等等&#xff0c;这些都是日常生活中常见的设备。以USB接口的鼠标为例&#xff0c;打开计算机的“设备管理器”&#xff0c;可以在“鼠标和其他…

mac上使用finder时候,显示隐藏的文件或者文件夹

默认在finder中是不显示隐藏的文件和文件夹的&#xff0c;但是想创建.gitignore文件&#xff0c;并向里面写入内容&#xff0c;即便是打开xcode也是不显示这几个隐藏文件的&#xff0c;那有什么办法呢&#xff1f; 使用快捷键&#xff1a; 使用finder打开包含隐藏文件的文件夹…

Web缓存代理和CDN 内容分发网络

目录 1.WEB缓存代理 1.1 WEB缓存代理作用 1.2 常见WEB缓存代理 1.3 Nginx 配置 缓存代理 2. CDN内容分发网络 1.WEB缓存代理 1.1 WEB缓存代理作用 存储一些之前给访问过的&#xff0c;且可能要被再次访问的静态网页资源对象&#xff0c;使客户端可以直接从缓存代理服务器…

NSSCTF-Web题目19(数据库注入、文件上传、php非法传参)

目录 [LitCTF 2023]这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 1、题目 2、知识点 3、思路 [SWPUCTF 2023 秋季新生赛]Pingpingping 4、题目 5、知识点 6、思路 [LitCTF 2023]这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 1、题目 2、知识…

【数值计算库-超长笔记】Python-Mpmath库:高精度数值计算

原文链接&#xff1a;https://www.cnblogs.com/aksoam/p/18279394 更多精彩&#xff0c;关注博客园主页&#xff0c;不断学习&#xff01;不断进步&#xff01; 我的主页 csdn很少看私信&#xff0c;有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xf…

RTSP协议在视频监控系统中的典型应用、以及视频监控设备的rtsp地址格式介绍

目录 一、协议概述 1、定义 2、提交者 3、位置 二、主要特点 1、实时性 2、可扩展性 3、控制功能 4、回放支持 5、网络适应性 三、RTSP的工作原理 1、会话准备 2、会话建立 3、媒体流控制 4、会话终止 5、媒体数据传输 四、协议功能 1、双向性 2、带外协议 …

已解决java.awt.geom.NoninvertibleTransformException:在Java2D中无法逆转的转换的正确解决方法,亲测有效!!!

已解决java.awt.geom.NoninvertibleTransformException&#xff1a;在Java2D中无法逆转的转换的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查缩放因子 修改后的缩放变换 …

《昇思25天学习打卡营第9天|onereal》

继续学习昨天的 基于MindNLPMusicGen生成自己的个性化音乐 生成音乐 MusicGen支持两种生成模式&#xff1a;贪心&#xff08;greedy&#xff09;和采样&#xff08;sampling&#xff09;。在实际执行过程中&#xff0c;采样模式得到的结果要显著优于贪心模式。因此我们默认启…

实用软件分享-----一款免费的投屏软件(支持手机投屏到电脑)Aiseesoft Phone Mirror 2.2.36 x64

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

JDeveloper 12C 官网下载教程

首先、我们要登录Oracle官网 Oracle 甲骨文中国 | 云应用和云平台 登录进去如果不是中文可以点击右上角带有国旗的图标就行更改&#xff0c;选择一个你能看懂的文字。 然后&#xff0c;点击“资源”—点击“开发人员下载” 然后&#xff0c;点击“开发工具” 这里有很多工具可…

Codeforces Round 954 (Div. 3)(A~E)

目录 A. X Axis B. Matrix Stabilization C. Update Queries D. Mathematical Problem A. X Axis Problem - A - Codeforces 直接找到第二大的数&#xff0c;答案就是这个数与其他两个数的差值的和。 void solve() {vector<ll>a;for (int i 1; i < 3; i){int x;…

美团实习—后端开发凉经

面试经历分享 日期&#xff1a; 4月22日时长&#xff1a; 50分钟 意外之喜 没想到在面试过程中&#xff0c;我再次被选中进行下一轮&#xff0c;这确实让我感到有些意外和欣喜。这次面试经历对我而言&#xff0c;不仅是一次技能的检验&#xff0c;更是一次知…

【LeetCode】九、双指针算法:环形链表检测 + 救生艇

文章目录 1、双指针算法1.1 对撞双指针1.2 快慢双指针 2、leetcode141&#xff1a;环形链表3、leetcode881&#xff1a;救生艇 1、双指针算法 用两个指针来共同解决一个问题&#xff1a; 1.1 对撞双指针 比如先有一个有序的数组array int[] array {1, 4, 5, 7, 9}先要找两个…

MM-LLM:使用Llava类构建图文多模态大模型实践

多模态大模型的结构如上&#xff0c;llava是用两层MLP作为连接器。该模式也是后续很多工作的基础。 本文主要参考了https://github.com/yuanzhoulvpi2017/zero_nlp/tree/main/train_llava的工作&#xff0c;最初是在b站看到的&#xff0c;讲解的很细致。 基础模型 大语言模型…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 消息队列和邮箱处理 --(四)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…