Xorbits inference操作实战

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础001

Python输出语句 print输出字符串 print("中国四大名著&#xff1a;","西游记|","三国演义|","红楼梦|","水浒传") print(6) print(1 1)Python输入语句 input函数 input() input("我的名字是&#xff1a;") p…

在非 antd pro 项目中使用 umi OpenAPI

大家好&#xff0c;我是松柏。自从跟着鱼皮哥使用了ant design pro中的OpenAPI插件之后&#xff0c;我已经无法忍受自己写请求后端接口的方法了&#xff0c;所以这篇文章记录一下如何在非ant design pro项目中使用OpenAPI。 安装依赖 首先我们需要安装包umijs/openapi&#x…

java面试课程-SpringIOC部分源码解析

1.SpringIOC的refresh源码解析 核心&#xff1a; 核心使用的是&#xff1a; 需要完成配置类的解析&#xff0c;各种BeanFactoryProcessor的注册。还有写国际化配置的初始化。Web容器的内部构造。 上面几个方法是refresh方法的内容。注意可以与applicationContext里的内容一起…

Profibus DP主站转Modbus网关连接智能化电表通讯

Profibus DP主站转Modbus网关&#xff08;XD-MDPBM20&#xff09;&#xff0c;是实现不同工业通信协议之间互联互通的设备&#xff0c;主要将Profibus DP协议转换为Modbus协议&#xff0c;实现数据的双向传输。通过Profibus DP主站转Modbus网关&#xff08;XD-MDPBM20&#xff…

大Excel表格76M,电脑16G内存打不开,内存利用率100%虚拟内存占用16G还是卡死提示内存不足,如何才能查看里面内容?

环境: Excel2016 问题描述: 大Excel表格76M,电脑16G内存打不开,内存利用率100%虚拟内存占用16G还是卡死提示内存不足,如何才能查看里面内容? 解决方案: 遇到这种情况,说明Excel文件非常大,超出了你当前计算机配置的处理能力。以下是一些解决方法,帮助你尝试打开或…

代码随想录-Day45

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

编译原理2

推导和短语 推导 推导过程中&#xff0c;每一步推导都是对句型的 最右非终结符 进行替换&#xff0c;最右推导(规范推导)&#xff1b; 短语 用 β 替换 A&#xff0c;则 β 就是 关于A 的一个短语&#xff1b; 直接短语是短语范围内的一步推导&#xff1b; 直接短语可能不…

基于python的随机森林回归预测+贝叶斯优化超参数前后训练效果对比

目录 1.导入必要的库 2.导入数据与数据预处理 3.查看数据分布 4.特征选择 5.模型建立与训练 6.训练集预测结果 7.模型评估 8.预测新数据 9.贝叶斯优化超参数 1.导入必要的库 # 导入所需的库 from sklearn.model_selection import cross_val_score import pandas as …

Sentinel实现区分来源

要区分来源就要写代码实现RequestOriginParser接口 &#xff0c;注意是要实现com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser 接口&#xff0c;别搞错接口了。 MyRequestOriginParser.java package com.codex.terry.sentinel.origin;import com.ali…

STM32mp157aaa按键中断实验

效果图&#xff1a; 源码&#xff1a; #include "key.h" void hal_key1_rcc_gpio_init() {// 使能GPIOF组RCC->MP_AHB4ENSETR | (0x1 << 5);// 设置引脚位输入模式GPIOF->MODER & (~(0X3 << 18));GPIOF->MODER & (~(0X3 << 16))…

当Matplotlib遇见SciencePlots

分享一个Matplotlib扩展工具SciencePlots&#xff0c;一行代码绘制science、nature、ieee等要求的图形。 安装 安装SciencePlots # 直接从PyPI安装 pip install SciencePlots 安装latex 如果latex未安装&#xff0c;会报错&#xff1a;RuntimeError: Failed to process st…

【QT开发】乒乓球碰撞反弹demo

在编写代码时&#xff0c;无意弄出来了一个这个东西&#xff0c;觉得挺有意思的记录一下&#xff0c;类似乒乓球在矩形内一直运动碰撞反弹demo 头文件 #ifndef MYPROJECT_H #define MYPROJECT_H#include <QMainWindow> #include <QPainter> #include "form.…

【区块链+基础设施】国家健康医疗大数据科创平台 | FISCO BCOS应用案例

在医疗领域&#xff0c;疾病数据合法合规共享是亟待解决的难题。一方面&#xff0c;当一家医院对患者实施治疗后&#xff0c;若患者转到其 他医院就医&#xff0c;该医院就无法判断诊疗手段是否有效。另一方面&#xff0c;医疗数据属于个人敏感数据&#xff0c;一旦被泄露或被恶…

前端开发中的常见问题及解决方法

前端开发是一个充满挑战和乐趣的领域。然而&#xff0c;在开发过程中&#xff0c;开发者常常会遇到各种各样的问题。本文将介绍一些前端开发中常用或者经常遇到的问题&#xff0c;并提供相应的解决方法&#xff0c;帮助你提高开发效率和解决问题的能力。 一. 页面布局问题 问题…

ArcTs布局入门03——层叠布局(Stack)

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01; 扫描下面的二维码关注公众号。 1、概述 叠布局&#xff08;StackLayout&#xff09;用于在屏幕上预留一块区域来显示组件中的元素&#xff0c;提供元素可以重叠的布局。层叠布局通过Stack容器组件实…

机械拆装-基于Unity-装配功能的实现

目录 1. 装配场景的相机控制 2. 鼠标拖拽和旋转功能的实现 2.1 鼠标拖拽 2.2 物体旋转 3. 零件与装配位置的对应关系 4. 轴向装配的准备位置 5. 装配顺序的实现 5.1 标签提示 5.2 定义一个变量记录步骤数值 1. 装配场景的相机控制 开始装配功能时&#xff0c;需要将相机调…

k8s公网集群安装(1.23.0)

网上搜到的公网搭建k8s都不太一致, 要么说的太复杂, 要么镜像无法下载, 所以写了一个简洁版,小白也能一次搭建成功 使用的都是centos7,k8s版本为1.23.0 使用二台机器搭建的, 三台也是一样的思路1.所有节点分别设置对应主机名 hostnamectl set-hostname master hostnamectl set…

QT4-QT5(6)-const char* QString 乱码转换

我简单粗暴的给出个结论&#xff1a; QString GBK编码正常&#xff0c;可以转UTF-8编码&#xff0c;但会有少量乱码。 const char* 编码就不要转编码&#xff0c;转哪个都是乱码。 UTF-8.cpp 下 1.QString GBK->UTF-8 2.const char * GBK->UTF-8 const char *…

ViewBinding的使用(因为kotlin-android-extensions插件的淘汰)

书籍&#xff1a; 《第一行代码 Android》第三版 开发环境&#xff1a; Android Studio Jellyfish | 2023.3.1 问题&#xff1a; 3.2.4在Activity中使用Toast章节中使用到了kotlin-android-extensions插件,但是该插件已经淘汰,根据网上了解,目前使用了新的技术VewBinding替…

Shiro框架

入门概述 1 shiro是什么? Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程…