前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用vLLM加速大语言模型推理

使用vLLM加速大语言模型推理

原创
作者头像
码之有理
修改于 2024-03-13 04:31:30
修改于 2024-03-13 04:31:30
21.8K0
举报

介绍

vLLM 是一个快速且易于使用的库,用于 LLM 推理和服务,和 HuggingFace 无缝集成。区别于 chatglm.cpp 和 llama.cpp,仅是在 GPU 上的模型推理加速,没有 CPU 上的加速。

在吞吐量方面,vLLM 的性能比 HuggingFace Transformers (HF) 高出 24 倍,文本生成推理 (TGI) 高出 3.5 倍。

可以使用 ray 框架实现分布式推理:https://vllm.readthedocs.io/en/latest/serving/distributed_serving.html

Github: https://github.com/vllm-project/vllm

文档:https://vllm.readthedocs.io/en/latest/models/supported_models.html

支持 HuggingFace 上的模型

  • Aquila (BAAI/Aquila-7B, BAAI/AquilaChat-7B, etc.)
  • Baichuan (baichuan-inc/Baichuan-7B, baichuan-inc/Baichuan-13B-Chat, etc.)
  • BLOOM (bigscience/bloom, bigscience/bloomz, etc.)
  • Falcon (tiiuae/falcon-7b, tiiuae/falcon-40b, tiiuae/falcon-rw-7b, etc.)
  • GPT-2 (gpt2, gpt2-xl, etc.)
  • GPT BigCode (bigcode/starcoder, bigcode/gpt_bigcode-santacoder, etc.)
  • GPT-J (EleutherAI/gpt-j-6b, nomic-ai/gpt4all-j, etc.)
  • GPT-NeoX (EleutherAI/gpt-neox-20b, databricks/dolly-v2-12b, stabilityai/stablelm-tuned-alpha-7b, etc.)
  • InternLM (internlm/internlm-7b, internlm/internlm-chat-7b, etc.)
  • LLaMA & LLaMA-2 (meta-llama/Llama-2-70b-hf, lmsys/vicuna-13b-v1.3, young-geng/koala, openlm-research/open_llama_13b, etc.)
  • MPT (mosaicml/mpt-7b, mosaicml/mpt-30b, etc.)
  • OPT (facebook/opt-66b, facebook/opt-iml-max-30b, etc.)
  • Qwen (Qwen/Qwen-7B, Qwen/Qwen-7B-Chat, etc.)

安装

代码语言:shell
AI代码解释
复制
pip install vllm

检查模型是否被 vLLM 支持,返回成功则是支持的。

代码语言:shell
AI代码解释
复制
from vllm import LLM

llm = LLM(model=...)  # Name or path of your model
output = llm.generate("Hello, my name is")
print(output)

推断

离线批量推断

代码语言:shell
AI代码解释
复制
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="facebook/opt-125m")
outputs = llm.generate(prompts, sampling_params)

# Print the outputs.
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

API Server

默认监听 8000 端口,--host 和--port 参数可以指定主机和端口。

代码地址:https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/api_server.py

代码语言:shell
AI代码解释
复制
python -m vllm.entrypoints.api_server

客户端请求,更多示例:https://github.com/vllm-project/vllm/blob/main/examples/api_client.py

代码语言:shell
AI代码解释
复制
curl http://localhost:8000/generate \
    -d '{
        "prompt": "San Francisco is a",
        "use_beam_search": true,
        "n": 4,
        "temperature": 0
    }'

兼容 OpenAI 的 API Server

默认监听 8000 端口,--host 和--port 参数可以指定主机和端口。

代码地址:https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/api_server.py

代码语言:shell
AI代码解释
复制
python -m vllm.entrypoints.openai.api_server --model facebook/opt-125m

客户端请求,更多示例:https://github.com/vllm-project/vllm/blob/main/examples/api_client.py

代码语言:shell
AI代码解释
复制
curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "facebook/opt-125m",
        "prompt": "San Francisco is a",
        "max_tokens": 7,
        "temperature": 0
    }'

可以使用 Openai 的 sdk 进行请求

代码语言:shell
AI代码解释
复制
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"
completion = openai.Completion.create(model="facebook/opt-125m", prompt="San Francisco is a")
print("Completion result:", completion)

分布式推断

理论支持论文:Megatron-LM’s tensor parallel algorithm

安装分布式框架 ray

代码语言:shell
AI代码解释
复制
pip install ray

tensor_parallel_size 可以指定使用 GPU 的数量。

代码语言:shell
AI代码解释
复制
from vllm import LLM
llm = LLM("facebook/opt-13b", tensor_parallel_size=4)
output = llm.generate("San Franciso is a")

Server 指定 GPU 数量

代码语言:shell
AI代码解释
复制
python -m vllm.entrypoints.api_server \
    --model facebook/opt-13b \
    --tensor-parallel-size 4

分别在一个主节点和多个工作节点安装 ray 并运行服务。然后在主节点运行上述的 Server,GPU 数量可以指定为集群内所有的 GPU 数量总和。

代码语言:shell
AI代码解释
复制
# On head node
ray start --head

# On worker nodes
ray start --address=<ray-head-address>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nProtect APPGuard安卓反外挂分析
1.最近在学习手游保护方面的技术,本文是学习过程中分析某反外挂的一点记录,高手莫要见笑,有不对的地方还请指教,首先简单通过资源目录中文件名做基本了解,
我是小三
2018/08/08
4.6K0
nProtect APPGuard安卓反外挂分析
梆梆APP加固产品方案浅析
Android系统是基于Linux开发己具有其开放性、自由性的一种操作系统,现主要应用于移动设备,如手机、平板电脑和车载系统等。从2007年Google推出第一代Android操作系统至今已有10多年的时间,移动行业的市场份额与规模也在急速增长,现在几乎每人都在用或曾用过接触过Android智能手机。
我是小三
2021/03/18
4.5K0
梆梆APP加固产品方案浅析
一张A4纸攻破某AI人脸识别产品
人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。
我是小三
2021/08/05
1.7K0
爱加密加固产品原理分析_定制版
最近朋友让我帮忙对他们银行APP进行黑盒分析,检测其安全性,探未知程序漏洞与安全性测试,提升业务整体安全能力,我拿到APP后进行安装抓包后发现都是加密传输的,用JEB进行反编译找数据组合的地方,发现APP用某加固了,所以有了此文。
我是小三
2022/05/11
2.8K0
爱加密加固产品原理分析_定制版
xx外买APP设备指纹风控分析
电商行业的各个业务场景面临不同的风险种类:客户端漏洞利用、协议逆向、注册小号、商品信息被抓取、推广渠道作弊、营销活动被薅羊毛、商品秒杀等。 大多的防御方案是通过端上安全、链路安全、接口和数据传输安全保护,再借助设备安全核验技术、人机识别及时发现各种模拟行为和异操作风险、同时集合风控策略实现多节点防护。
我是小三
2021/10/13
7.4K1
APK加固之类抽取分析与修复
隐藏dex文件:通过对目标DEX文件进行整体加密或压缩方式把整个dex转换为另外一个文件存放在assets文件夹中或者其它地方,然后利用类加载器技术进行内存解密并加载运行。
我是小三
2018/08/08
2.2K1
APK加固之类抽取分析与修复
UCOSII系统移植详解「建议收藏」
1,处理器的C编译器能产生可重入型的代码,如果不行的话,那么就不能在任务之间随意的切换,因为当你切换到别的任务的时候,该任务在这个函数的数据就会被破坏。
全栈程序员站长
2022/08/19
2.4K0
某移动端防作弊产品技术原理浅析与个人方案构想
工具环境: android4.4.4、IDA Pro 7.0、jeb3、sklearn机器学习库
我是小三
2019/05/19
4K2
360 so动态脱壳
目前so加壳有很多家,我己知的有 爱加密,梆梆,360, 娜迦等 各有所长。今天把学习360的脱壳笔记记录下来与小菜共同学习,没有其它目的,大神请绕道!
我是小三
2018/08/08
1.4K0
360 so动态脱壳
某地理位置模拟APP从壳流程分析到破解
在我们拿到一个APP准备破解时一般得安装运行,程序运行后须要注册用户,随便注册一个用户登录,以下是APP须要购买vip才能使用的大概情况。
我是小三
2018/08/08
1.4K0
某地理位置模拟APP从壳流程分析到破解
ARM汇编简单学习
ARM汇编语言是针对ARM架构设计的低级编程语言,用于直接操作硬件和编写高效的系统级程序。
cultureSun
2024/03/28
1840
关于 Block 中捕获 self 的分析
作者:kodyzhou 问题 最近遇到一个已经使用了weak-strong dance的block依旧强引用了self的情况,好在block没被VC持有只是延迟释放,但这里的关键是用了weak_sel
QQ空间开发团队
2017/08/07
1.6K0
关于 Block 中捕获 self 的分析
汇编语言之ARM32汇编
以上两种编译环境,使用的指令集都是一致的, 只是语法格式有不同,也就是宏指令,伪指令,伪操作不一样
乱码三千
2021/08/24
3.3K0
汇编语言之ARM32汇编
zergRush (CVE-2011-3874) 提权漏洞分析
最近(终于)转Android了,2011年著名的zergrush是接触的第一个ROOT漏洞。虽然它已经过气了,只影响Android 2.2 – 2.3.6,但觉得还是有必要记录一下分析所得。
全栈程序员站长
2022/09/06
5900
Cortex-M3启动深度解析
Cortex-Mx启动,备忘,以免将来忘记。 中断向量表不用说,从重置中断开始吧 LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 这里一共就执行了两个函数,SystemInit和__main。 我们一般在SystemInit里面配置系统时钟,这里跳过。 __main是我们今天的重点。 __main: 0x080000C0 4804 LDR r0,[pc,#16] ;
大石头
2018/01/09
1K0
Il2cpp逆向:global-metadata解密
  关于Il2cpp的资料网上有很多,简而言之,Il2cpp就是unity用来代替原来的基于Mono虚拟机的一种新的打包方式,它先生成IL(中间语言),然后再转换成Cpp文件,提高运行效率的同时增加了安全性。原本基于Mono的打包方式极其容易被逆向,现在市面上的新游戏基本上都是用Il2cpp的方式打包的,当然Il2cpp的逆向教程也很多,但是都是千篇一律,教你用国内大佬写的Il2cppDumper去dump就完事,毫无技术含量。事实上,由于这个工具太过出名,很多游戏厂商都采取了对抗措施,导致就算你照着教程来,大多数情况下也不会成功的。因此打算学习一下Il2cpp相关的攻防技术,于是在网上找了一个Il2cpp的CTF题来练手。题目来源:n1ctf-2018
大A
2023/02/14
15.4K2
嵌入式ARM设计编程(二) 字符串拷贝
通过实验掌握使用 LDB/STB,b等指令完成较为复杂的存储区访问和程序分支,学习使用条件码
timerring
2023/02/16
4760
代码还原的技术 ARM汇编入门教程(二) 加减乘除
遥想当年上小学的时候,语文是先学 人口手 上中下;数学就是先数数,然后加减乘除了。
奋飞安全
2021/04/20
1.2K0
代码还原的技术 ARM汇编入门教程(二) 加减乘除
第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)
目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的  (3) 分析stext函数如何启动内核:  (3.1
诺谦
2018/01/03
1K0
第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)
OpenHarmony 内核源码分析 (内核启动篇) | 从汇编到 main ()
这应该是系列篇最难写的一篇,全是汇编代码,需大量的底层知识,涉及协处理器,内核镜像重定位,创建内核映射表,初始化 CPU 模式栈,热启动,到最后熟悉的 main() 。
小帅聊鸿蒙
2025/04/07
1440
OpenHarmony 内核源码分析 (内核启动篇) | 从汇编到 main ()
相关推荐
nProtect APPGuard安卓反外挂分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档