使用 vLLM 部署本地 LLM 指南

目录

  • vLLM 安装与模型下载
  • 离线批量推理
  • OpenAI 兼容服务器

参考资料:

vLLM GitHub首页

vLLM 官方文档

vLLM 安装与模型下载

vLLM 安装:直接 pip install 即可

我选取了 OpenChat-3.5-0106 模型,这个模型是由 mistralai/Mistral-7B-v0.1 微调得到的,参数量为 7B
模型下载链接:

openchat/openchat-3.5-0106 · Hugging Face

大家可以选取自己喜欢的模型进行下载。

离线批量推理

首先展示一个使用 vLLM 对数据集进行离线批量推理的示例,即使用 vLLM 为输入提示列表生成文本。

需要导入两个使用 vLLM 引擎运行离线推理的主要类:LLM, SamplingParams

SamplingParams 可以设置 temperature, top_p, top_k 等各种参数,这些参数和模型的生成方式有关,关于这些参数的详细可以看源代码:

其中 temperature 越大,生成结果的随机性越强,top_p 也可以改变模型生成的随机性。

更详细的讲解可以看这篇 huggingface 里面的博客:

如何生成文本:通过 Transformers 用不同的解码方法生成文本

离线批量推理的代码如下,注意把我这里 LLM 构造方法里面 model 的路径替换成你下载好的模型的路径:

from vllm import LLM, SamplingParams
prompts = ["Hello, my name is","The president of the United States is","The capital of France is","The future of AI is",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
llm = LLM(model="/root/autodl-tmp/kdy/models/openchat-3.5-0106")
outputs = llm.generate(prompts, sampling_params)# Print the outputs.
for output in outputs:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

代码的输出结果如下:
在这里插入图片描述

把 temperature 调高一点,就会发现结果变得很不通顺,说明随机性大大增强了。

在这里插入图片描述

OpenAI 兼容服务器

vLLM 可以为 LLM 服务进行部署,提供了一个示例 FastAPI 服务器,可以检查 vllm/entrypoints/api_server.py 以获取服务器实现。

在这里我们不演示了,直接将 vLLM 部署为模仿 OpenAI API 协议的服务器,这使得 vLLM 可以用作使用 OpenAI API 的应用程序的直接替代品。

可以输入python -m vllm.entrypoints.openai.api_server --help 查看命令行参数的详细信息。

在这里插入图片描述

我们输入以下命令启动服务器,–model 为本地模型的路径,–served-model-name 是模型在服务器中的别名,这里我们取简称 openchat,其他都是默认值,当然也可以自己设置。

具体实现的详情可参考 vllm/vllm/entrypoints/openai/api_server.py at main · vllm-project/vllm (github.com)

python -m vllm.entrypoints.openai.api_server \--model "/root/autodl-tmp/kdy/models/openchat-3.5-0106" \--served-model-name "openchat" \

终端输出如下,服务器启动成功:

在这里插入图片描述

OpenAI 提供了 Completions 和 ChatCompletions 两个相关的 API,两个 API 很相似,你可以使用其中的任意一个。

Completions 的文档如下:

Completions 说明

服务器启动成功后,我们可以在 shell 中发送一个请求进行测试,该请求使用了 OpenAI Chat API 查询模型,请求内容如下:

curl http://localhost:8000/v1/completions \-H "Content-Type: application/json" \-d '{"model": "openchat","prompt": "San Francisco is a","max_tokens": 7,"temperature": 0}'

-d 里面是请求的参数,可以自己设置。temperature 为 0,代表每次模型的回答都相同,不具有随机性,你可以自由调整参数来满足你的需求😊

可以看到返回了如下结果,其中我框住的是模型为我们续写的内容。

在这里插入图片描述

当然,你也可以试一试 ChatCompletions 格式的请求,ChatCompletions API 的请求内容如下,两种的格式还是有一些区别的。

curl http://localhost:8000/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "openchat","messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Who won the world series in 2020?"}]}'

输出结果如下:

在这里插入图片描述

这里更建议使用 ChatCompletions 格式,因为经过多次测试,Completions API 的回答有时候会出现一些问题,例如模型反复重复一句话。

如果想通过代码来完成服务器的查询,需要下载 python 包 openai,我这里将 OpenAI ChatCompletions API 与 vLLM 结合使用。

代码内容如下,注意,这段代码必须在启动服务器后运行!

from openai import OpenAI# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,
)
chat_response = client.chat.completions.create(model="openchat",messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Tell me a joke."},]
)
print(chat_response)

输出结果如下,它为我们讲了一个很冷的笑话。

在这里插入图片描述

如果只想看输出结果,把最后一行代码修改为如下代码即可。

print(chat_response.choices[0].message.content)

可以看到现在只有输出结果了,依然是一个人类理解不了的笑话。

在这里插入图片描述

这样我们就完成了本地 LLM 的部署,大家快来尝试一下吧!

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

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

相关文章

docker设置代理解决内网pull外网镜像

目录 Docker 配置代理的缘由 通过dockerd配置实现代理 通过container配置实现代理 参考文献 Docker 配置代理的缘由 如何在内网环境内环境内Pull外网registry,或者反过来想要Pull公司Registry镜像?存在上述需求的朋友可以尝试以下方法进行docker代理…

高校实验室智能管理

运行环境: jdk7tomcat7mysqleclipse 技术: springhibernatestruts2jspjquery 功能介绍: 一套完整的实验室管理系统,系统支持用户的注册登陆,系统分为学生,教师,管理员三个角色,…

[BUG] Authentication Error

前言 给服务器安装了一个todesk,但是远程一直就是,点击用户,进入输入密码界面,还没等输入就自动返回了 解决 服务器是无桌面版本,或者桌面程序死掉了,重新安装就好 sudo apt install xorg sudo apt inst…

数据结构<1>——树状数组

树状数组,也叫Fenwick Tree和BIT(Binary Indexed Tree),是一种支持单点修改和区间查询的,代码量小的数据结构。 那神马是单点修改和区间查询?我们来看一道题。 洛谷P3374(模板): 在本题中,单点修改就是将某一个数加上…

有哪些简单好用、适合中小型企业的CRM系统?

阅读本文,你将了解:一、中小型企业对CRM系统的主要需求;二、盘点四款好用的CRM系统;三、CRM系统实施策略和优秀实践。 在快速变化的商业环境中,中小型企业面临着独特的挑战:如何在有限的资源下高效地管理客…

web安全思维导图(白帽子)

web安全思维导图(白帽子) 客户端脚本安全 服务端应用安全 白帽子讲web安全 安全运营体系建设

2、Line Charts折线图

可视化时间趋势 现在你已经熟悉了编码环境,是时候学习如何制作自己的图表了! 在本教程中,您将学习足够的Python来创建专业外观的折线图。然后,在接下来的练习中,您将使用您的最新技能处理真实世界的数据集。 本课程数据集夸克网盘下载链接:https://pan.quark.cn/s/a235ac…

数据管理平台Splunk Enterprise本地部署并结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步,结合cpolar内网穿透工具实现随时随地在任意浏览器,远程访问在本地…

智能控制箱解决方案

一、建设背景 在数字时代的浪潮中,智能化的管理和操作已经成为各行业的共同追求。唯众物联网智能控制箱,是一款功能性强、使用安装简单的智能网络传输、温湿度监测、门锁控制综合系统。系统由I/O网络模块、传感器、管理后端、移动端APP组成,辅…

TArry TMap TSet

一.TArry 1. TArray<int32> MyArray; 增加 删除 改 查 2.TMap<int32, int32>MyMap; //TMap是一种键值对容器&#xff0c;里面的数据都是成对出现的(Key&#xff0c;Value),Value通过Key值来获取&#xff0c;且Key值不能重复&#xff0c;key值唯一。 增&#x…

idea——git提交到本地记录如何退回/删除

目录 一、git提交到本地记录如何退回/删除 一、git提交到本地记录如何退回/删除 git提交到本地记录&#xff0c;如下图【更新】记录&#xff0c;表示本次提交到git本地需要退回/删除的操作&#xff1a; 选中项目&#xff0c;右键点击【git】——>【Show History】——>…

基于SSM的影视创作论坛(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的影视创作论坛&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

21.云原生之GitLab pipline语法(CI基础)

云原生专栏大纲 文章目录 gitlab-ci.yml 介绍GitLab中语法检测gitlab-ci.yml 语法job定义作业before_script和after_scriptstages定义阶段tages指定runnerallow_failure运行失败when控制作业运行retry重试timeout超时parallel并行作业only & exceptrulescache 缓存cache:p…

PolarDB 再升级:欢迎来到云数据库 x AI新时代

大模型时代&#xff0c;数据库的变化走到了哪&#xff1f; 作者|思杭 编辑|皮爷 出品|产业家 “搭积木”、“‘自动驾驶’”、“三层解耦”&#xff0c;这些形象的标签成了1月17日阿里云开发者生态大会当天最出圈的词汇。 会上&#xff0c;一名小学生受邀上台演示了数据…

3.jmeter接口关联及实战

1.当所传参数包含键值对和json文件时&#xff0c;键值对放在链接后&#xff0c;参数放在消息体数据中 2.当查看结果树返回乱码时&#xff0c;修改请求中内容编码为utf-8 一、jmeter接口关联 1.正则表达式提取器 接口2.3传递的参数中需要用到接口1的返回值 禁用接口2.3&#…

Elasticsearch:Simulate ingest API

Ingest pipeline 为我们摄入数据提供了极大的方便。在我之前的文章中&#xff0c;有非常多的有关 ingest pipeline 的文章。请详细阅读文章 “Elastic&#xff1a;开发者上手指南”。针对一组提供的文档执行摄取管道&#xff0c;可以选择使用替代管道定义。 Simulate ingest AP…

基于关系型数据库的知识图谱存储探析

目录 前言1 图结构数据的关系存储1.1 Wikidata与MySQL的结合1.2 关系型数据库的优势与挑战 2 选择数据库需要考虑的三个问题2.1 存储的物理结构2.2 存储的性能问题2.3 图的查询问题 3. 不同的存储方式3.1 Triple Store3.2 属性表存储3.3 二元表3.4 全索引结构 结语 前言 在当今…

前端动画特效分享(附效果图及在线演示)

分享7款有趣也实用的前端动画特效 其中有CSS动画、canvas动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 SVG天气图标动画特效 SVG天气图标动画特效 不管是晴天雨天等都很完美的展示出了各自真实的…

新版idea创建spring boot项目

目录 前言 汉化教程 项目模板初始化 1.点击新建项目 2.配置初始化信息 3.初始依赖选择 配置Maven 1.打开maven设置 2.重写maven配置文件 3.选择你创建的配置文件 4.重启项目 spring boot配置并测试 1.修改配置文件后缀 2.启动项目 3.编写测试控制类 4.重启项目…

创建.gitignore,忽视不必要提交的文件

在项目主目录下创建.gitignore文件 touch .gitignore在.gitignore文件内输入要忽略的文件即可。 e.g. build/.gitignore文件不生效问题 上传后并没有不在build目录内产生文件 该文件只能作用于Untracked Files&#xff0c;也就是那些从来没有被git记录过的文件。 解决方法…