部署快捷、使用简单、推理高效!大模型部署和推理框架 Xinference 来了!

今天为大家介绍一款大语言模型(LLM)部署和推理工具——Xinference[1],其特点是部署快捷、使用简单、推理高效,并且支持多种形式的开源模型,还提供了 WebGUI 界面和 API 接口,方便用户进行模型部署和推理。

现在就让我们一起来了解和使用 Xinference 吧!

Xinference 介绍

Xorbits Inference(Xinference)是一个性能强大且功能全面的分布式推理框架。可用于各种模型的推理。通过 Xinference,你可以轻松地一键部署你自己的模型或内置的前沿开源模型。无论你是研究者,开发者,或是数据科学家,都可以通过 Xinference 与最前沿的 AI 模型,发掘更多可能。下面是 Xinference 与其他模型部署推理工具的对比:

图片

技术交流群

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

我们建了算法岗技术与面试交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:技术交流

Xinference 安装

Xinference 支持两种方式的安装,一种是使用 Docker 镜像安装,另外一种是直接在本地进行安装。想了解 Docker 安装方式的朋友可以参考官方的Docker 安装文档[2],我们这里主要介绍本地安装的方式。

首先安装 Xinference 的 Python 依赖:

pip install "xinference[all]"

Xinference 依赖的第三方库比较多,所以安装需要花费一些时间,等安装完成后,我们就可以启动 Xinference 服务了,启动命令如下:

xinference-local

启动成功后,我们可以通过地址 http://localhost:9777来访问 Xinference 的 WebGUI 界面了。

图片

**注意:**在 Xinference 安装过程中,有可能会安装 PyTorch 的其他版本(其依赖的vllm[3]组件需要安装),从而导致 GPU 服务器无法正常使用,因此在安装完 Xinference 之后,可以执行以下命令看 PyTorch 是否正常:

python -c "import torch; print(torch.cuda.is_available())"

如果输出结果为True,则表示 PyTorch 正常,否则需要重新安装 PyTorch,PyTorch 的安装方式可以参考PyTorch 的页面[4]。

模型部署与使用

在 Xinference 的 WebGUI 界面中,我们部署模型非常简单,下面我们来介绍如何部署 LLM 模型。

首先我们在Launch Model菜单中选择LANGUAGE MODELS标签,输入模型关键字chatglm3来搜索我们要部署的 ChatGLM3 模型。

图片

然后点击chatglm3卡片,会出现如下界面:

图片

在部署 LLM 模型时,我们有以下参数可以进行选择:

  • Model Format: 模型格式,可以选择量化和非量化的格式,非量化的格式是pytorch,量化格式有ggmlgptq

  • Model Size:模型的参数量大小,如果是 ChatGLM3 的话就只有 6B 这个选项,而如果是 Llama2 的话,则有 7B、13B、70B 等选项

  • Quantization:量化精度,有 4bit、8bit 等量化精度选择

  • N-GPU:选择使用第几个 GPU

  • Model UID(可选): 模型自定义名称,不填的话就默认用原始模型名称

参数填写完成后,点击左边的火箭图标按钮即开始部署模型,后台会根据参数选择下载量化或非量化的 LLM 模型。部署完成后,界面会自动跳转到Running Models菜单,在LANGUAGE MODELS标签中,我们可以看到部署好的 ChatGLM3-6B 模型。

图片

我们如果点击上图的红色方框图标Launch Web UI,浏览器会弹出 LLM 模型的 Web 界面,在这个界面中,你可以与 LLM 模型进行对话,界面如下:

图片

API 接口

如果你不满足于使用 LLM 模型的 Web 界面,你也可以调用 API 接口来使用 LLM 模型,其实在 Xinference 服务部署好的时候,WebGUI 界面和 API 接口已经同时准备好了,在浏览器中访问http://localhost:9997/docs/就可以看到 API 接口列表。

图片

接口列表中包含了大量的接口,不仅有 LLM 模型的接口,还有其他模型(比如 Embedding 或 Rerank )的接口,而且这些都是兼容 OpenAI API 的接口。以 LLM 的聊天功能为例,我们使用 Curl 工具来调用其接口,示例如下:

curl -X 'POST' \'http://localhost:9997/v1/chat/completions' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"model": "chatglm3","messages": [{"role": "user","content": "hello"}]}'# 返回结果
{"model": "chatglm3","object": "chat.completion","choices": [{"index": 0,"message": {"role": "assistant","content": "Hello! How can I help you today?",},"finish_reason": "stop"}],"usage": {"prompt_tokens": 8,"total_tokens": 29,"completion_tokens": 37}
}

多模态模型

我们再来部署多模态模型,多模态模型是指可以识别图片的 LLM 模型,部署方式与 LLM 模型类似。

首先选择Launch Model菜单,在LANGUAGE MODELS标签下的模型过滤器Model Ability中选择vl-chat,可以看到目前支持的 2 个多模态模型:

图片

我们选择qwen-vl-chat这个模型进行部署,部署参数的选择和之前的 LLM 模型类似,选择好参数后,同样点击左边的火箭图标按钮进行部署,部署完成后会自动进入Running Models菜单,显示如下:

图片

点击图中Launch Web UI的按钮,浏览器会弹出多模态模型的 Web 界面,在这个界面中,你可以使用图片和文字与多模态模型进行对话,界面如下:

图片

Embedding 模型

Embedding 模型是用来将文本转换为向量的模型,使用 Xinference 部署的话更加简单,只需要在Launch Model菜单中选择Embedding标签,然后选择相应模型,不像 LLM 模型一样需要选择参数,只需直接部署模型即可,这里我们选择部署bge-base-en-v1.5这个 Embedding 模型。

图片

图片

我们通过 Curl 命令调用 API 接口来验证部署好的 Embedding 模型:

curl -X 'POST' \'http://localhost:9997/v1/embeddings' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"model": "bge-base-en-v1.5","input": "hello"
}'# 显示结果
{"object": "list","model": "bge-base-en-v1.5-1-0","data": [{"index": 0,"object": "embedding","embedding": [0.0007792398682795465, …]}],"usage": {"prompt_tokens": 37,"total_tokens": 37}
}

Rerank 模型

Rerank 模型是用来对文本进行排序的模型,使用 Xinference 部署的话也很简单,方法和 Embedding 模型类似,部署步骤如下图所示,这里我们选择部署bge-reranker-base这个 Rerank 模型:

图片

图片

我们通过 Curl 命令调用 API 接口来验证部署好的 Rerank 模型:

curl -X 'POST' \'http://localhost:9997/v1/rerank' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"model": "bge-reranker-base","query": "What is Deep Learning?","documents": ["Deep Learning is ...","hello"]
}'# 显示结果
{"id": "88177e80-cbeb-11ee-bfe5-0242ac110007","results": [{"index": 0,"relevance_score": 0.9165927171707153,"document": null},{"index": 1,"relevance_score": 0.00003880404983647168,"document": null}]
}

图像模型

Xinference 还支持图像模型,使用图像模型可以实现文生图、图生图等功能。Xinference 内置了几种图像模型,分别是 Stable Diffusion(SD)的各个版本。部署方式和文本模型类似,都是在 WebGUI 界面上启动模型即可,无需进行参数选择,但因为 SD 模型比较大,在部署图像模型前请确保服务器上有 50GB 以上的空间。这里我们选择部署sdxl-turbo图像模型,部署步骤截图如下:

图片

图片

我们可以使用 Python 代码调用的方式来使用图像模型生成图片,示例代码如下:

from xinference.client import Clientclient = Client("http://localhost:9997")
model = client.get_model("sdxl-turbo")model.text_to_image("An astronaut walking on the mars")

这里我们使用了 Xinference 的客户端工具来实现文生图功能,生成的图片会自动保存在 Xinfercnce 的 Home 目录下的image文件夹中,Home 目录的默认地址是~/.xinference,我们也可以在启动 Xinference 服务时指定 Home 目录,启动命令如下:

XINFERENCE_HOME=/tmp/xinference xinference-local

语音模型

语音模型是 Xinference 最近新增的功能,使用语音模型可以实现语音转文字、语音翻译等功能。在部署语音模型之前,需要先安装ffmpeg组件,以 Ubuntu 操作系统为例,安装命令如下:

sudo apt update && sudo apt install ffmpeg

目前 Xinference 还不支持在 WebGUI 界面上部署语音模型,需要通过命令行的方式来部署语音模型,在执行部署命令之前需要确保 Xinference 服务已经启动(xinference-local),部署命令如下:

xinference launch -u whisper-1 -n whisper-large-v3 -t audio
  • -u:表示模型 ID

  • -n:表示模型名称

  • -t:表示模型类型

命令行部署的方式不仅适用语音模型,也同样适用于其他类型的模型。我们通过调用 API 接口来使用部署好的语音模型,接口兼容 OpenAI 的 Audio API 接口,因此我们也可以用 OpenAI 的 Python 包来使用语音模型,示例代码如下:

import openai# api key 可以随便写一个
client = openai.Client(api_key="not empty", base_url="http://127.0.0.1:9997/v1")
audio_file = open("/your/audio/file.mp3", "rb")# 使用 openai 的方法来调用语音模型
completion = client.audio.transcriptions.create(model="whisper-1", file=audio_file)
print(f"completion: {completion}")audio_file.close()

其他

模型来源

Xinference 默认是从 HuggingFace 上下载模型,如果需要使用其他网站下载模型,可以通过设置环境变量XINFERENCE_MODEL_SRC来实现,使用以下代码启动 Xinference 服务后,部署模型时会从Modelscope[5]上下载模型:

XINFERENCE_MODEL_SRC=modelscope xinference-local

模型独占 GPU

在 Xinference 部署模型的过程中,如果你的服务器只有一个 GPU,那么你只能部署一个 LLM 模型多模态模型图像模型语音模型,因为目前 Xinference 在部署这几种模型时只实现了一个模型独占一个 GPU 的方式,如果你想在一个 GPU 上同时部署多个以上模型,就会遇到这个错误:No available slot found for the model

但如果是 Embedding 或者 Rerank 模型的话则没有这个限制,可以在同一个 GPU 上部署多个模型。

总结

今天给大家介绍了 Xinference 这个开源的部署推理工具,因为其部署方便,支持模型多等特点让我印象非常深刻,希望这篇文章可以让更多人了解这个工具,如果在使用的过程中遇到问题,也欢迎在评论区留言讨论。

关注我,一起学习各种人工智能和 AIGC 新技术,欢迎交流,如果你有什么想问想说的,欢迎在评论区留言。

参考:

[1]Xinference: https://github.com/xorbitsai/inference

[2]Docker 安装文档: https://inference.readthedocs.io/en/latest/getting_started/using_docker_image.html

[3] vllm: https://github.com/vllm-project/vllm

[4]PyTorch 的页面: https://pytorch.org/

[5] Modelscope: https://modelscope.cn/

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

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

相关文章

【iOS】ARC学习

文章目录 前言一、autorelease实现二、苹果的实现三、内存管理的思考方式__strong修饰符取得非自己生成并持有的对象__strong 修饰符的变量之间可以相互赋值类的成员变量也可以使用strong修饰 __weak修饰符循环引用 __unsafe_unretained修饰符什么时候使用__unsafe_unretained …

蓝桥杯--冶炼金属

目录 一、题目 二、解决代码 (1)版本一(报错:超时) 代码分析 (2)版本二(不会超时) 代码分析 (3)版本三(最终精简版)…

Python自学☞序列和索引的相关操作

一、基本概念 1、概念 序列是一个用于存储多个值的连续空间,每个值都对应一个整数的编号,称为索引 2、切片的语法结构 注:切片可以访问序列一定范围内的元素 序列[start:end:step] start-->切片的开始索…

Python数据分析-5

1.时间序列 2.pandas重采样 重采样:指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转 化为高频率为升采样。 统计出911数据中不同月份电话次数的变化情况&#xff1a…

vue3中的文字滚动播报

vue3中的文字滚动播报 之前UI框架一直使用的elementPlus,有个需求,需要在页面上写个滚动播放新闻的功能,发现UI框架居然没有这个组件。花了一下午,在ChatGPT的帮助下,总算写成功了,先看最终展示效果 web页…

GPT-5:人工智能的下一个前沿即将到来

当我们站在人工智能新时代的门槛上时,GPT-5即将到来的呼声愈发高涨且迫切。作为革命性的GPT-3的继任者,GPT-5承诺将在人工智能领域迈出量子跃迁式的进步,其能力可能重新定义我们与技术的互动方式。 通往GPT-5之路 通往GPT-5的旅程已经标记着…

Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…

给电脑加硬件的办法 先找电脑支持的接口,再买相同接口的

需求&#xff1a;我硬盘太小&#xff0c;换或加一个大硬盘 结论&#xff1a;接口是NVMe PCIe 3.0 x4 1.找到硬盘型号 主硬盘 三星 MZALQ512HALU-000L2 (512 GB / 固态硬盘) 2.上官网查 或用bing查 非官方渠道信息&#xff0c;不确定。

CompletableFuture原理与实践-外卖商家端API的异步化

背景 随着订单量的持续上升&#xff0c;美团外卖各系统服务面临的压力也越来越大。作为外卖链路的核心环节&#xff0c;商家端提供了商家接单、配送等一系列核心功能&#xff0c;业务对系统吞吐量的要求也越来越高。而商家端API服务是流量入口&#xff0c;所有商家端流量都会由…

【深度学习笔记】9_5 多尺度目标检测

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 9.5 多尺度目标检测 在9.4节&#xff08;锚框&#xff09;中&#xff0c;我们在实验中以输入图像的每个像素为中心生成多个锚框。这些…

springboot+vue学生选课系统 java+ssm+idea+_mysql

系统包含三种角色&#xff1a;管理员、老师、学生&#xff0c;系统分为前台和后台两大模块&#xff0c;主要功能如下。 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 学生网上选课系统可以实现教室管理&#xff0c;老师管理&#xff0c;课程管理&#xff0c;教学计划管…

微服务分布式springcloud研究生志愿填报辅助系统

本文讲述了研究生志愿填报辅助系统。结合电子管理系统的特点&#xff0c;分析了研究生志愿填报辅助系统的背景&#xff0c;给出了研究生志愿填报辅助系统实现的设计方案。 本论文主要完成不同用户的权限划分&#xff0c;不同用户具有不同权限的操作功能&#xff0c;在用户模块&…

AJAX 03 XMLHttpRequest、Promise、封装简易版 axios

AJAX 学习 AJAX 3 原理01 XMLHttpRequest① XHR 定义② XHR & axios 关系③ 使用 XHR④ XHR查询参数案例&#xff1a;地区查询&#xff08;URLSearchParams&#xff09;⑤ XHR数据提交 POST 02 PromisePromise 使用Promise - 三种状态案例&#xff1a;使用Promise XHR 获取…

电商场景下 ES 搜索引擎的稳定性治理实践

继上文在完成了第一阶段 ES 搜索引擎的搭建后&#xff0c;已经能够实现对千万级别的商品索引的读写请求的支持。目前&#xff0c;单机房读流量在 500&#xff5e;1000 QPS 之间&#xff0c;写流量在 500 QPS 左右。 但随着业务的发展&#xff0c;问题也逐渐开始暴露&#xff0…

Wmware安装Linux(centerOS、Ubuntu版本)

目录 1、安装wmware 2、center版本 3、ubuntu版本 1、安装wmware 此处不做展开。 2、center版本 需要提前下载的文件&#xff1a; 无图形化界面https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso 有图形化界面https://mirrors.a…

增删卜易——八宫六十四卦

之前看倪海厦的《天纪》笔记里面提到了六十四卦世应,觉得不知道这个世应是啥意思。很长时间就没看了,偶然间看到了张文江教授写的一本书《潘雨廷先生谈话录》提到了《卜筮正宗》,“卜筮最后的判断是非理性转义,其他一切都只是形式”,“明人的著作,从京氏易出,如今天几日…

STM32 学习12 输入捕获与触摸按键

STM32 学习12 输入捕获与触摸按键 一、输入捕获介绍1. 概念2. STM32F1 资源3. 捕获原理 二、输入捕获配置步骤1. 使能时钟、设置端口模式2. 初始化定时器3. 设置捕获参数4. 开启捕获和定时器中断&#xff08;溢出中断|更新中断&#xff09;6. 编写定时器中断服务函数7. 使能定时…

针对教育行业的网络安全方案有哪些

智慧校园”是教育信息化进入高级阶段的表现形式&#xff0c;比“数字校园”更先进。集体知识共融、共生、业务应用融合创新、移动互联网物联网高速泛在是其重要特征。特别是在互联网教育的大环境下&#xff0c;为了更好的发挥智慧化教学服务和智慧化教学管理功能&#xff0c;需…

node.js入门—day02

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 什么是单线程…

计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密工具流程

随着网络技术的不断发展与更新&#xff0c;越来越多的企业利用网络开展了各项工作业务&#xff0c;网络也为企业提供了极大便利&#xff0c;大大提高了办公效率。但网络是一把双刃剑&#xff0c;企业的数据安全问题一直是企业关心的主要话题&#xff0c;近日&#xff0c;云天数…