使用 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代理…

java访问mdb文件隐藏表报错解决办法:user lacks privilege or object not found: MSYSOBJECTS

java访问mdb文件隐藏表报错解决办法: UCAExc:::5.0.1 user lacks privilege or object not found: MSYSOBJECTS 在地址url中添加;sysSchematrue 在sql语句中添加sys.MSysObjects 写法 在地址url中添加;sysSchematrue 在sql语句中添加sys.MSysObjects 写法数据库访…

高校实验室智能管理

运行环境: 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安全 安全运营体系建设

c++ 类继承中 using的作用

在C类继承中,using关键字用于引入基类中的成员函数或成员变量到派生类中。使用using关键字可以实现以下两种情况: 继承并重用基类的成员函数:通过在派生类中使用using关键字,可以将基类中的成员函数引入到派生类的作用域中&#x…

log4j:WARN Please initialize the log4j system properly的解决办法

背景:很多次创建新项目log4j都出现以下2个警告: log4j:WARN No appenders could be found for logger (org.springframework.boot.ApplicationServletEnvironment).log4j:WARN Please initialize the log4j system properly 网上查询都是在说缺少以下jar…

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】——>…

微服务定时任务

Scheduled 是 Spring Framework 中的一个注解&#xff0c;用于安排方法定期执行或在特定时间点执行。 使用 Scheduled 注解的方法需要满足以下条件&#xff1a; 该方法必须是公共的&#xff08;public&#xff09;。该方法不应该返回任何值&#xff0c;或者返回一个可以忽略的…

Java数据结构与算法:二叉搜索树

Java数据结构与算法&#xff1a;二叉搜索树 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是二叉搜索树&#xff1f; 在计算机科学中&#xff0c;二叉搜索树…

基于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&#…