7. MacaRT-vLLM
7.1. MacaRT-vLLM介绍
MacaRT-vLLM是在曦云系列GPU上适配官方vLLM的推理工具,基于MXMACA后端对vLLM方法进行了兼容适配和Kernel优化。 使用MacaRT-vLLM在曦云系列GPU上进行大模型推理,其方法和功能与官方vLLM兼容。当前兼容版本为vLLM-0.8.2。
vLLM版本与PyTorch版本的兼容适配关系,参见表 7.1。
vLLM |
PyTorch |
|---|---|
0.6.2 |
2.1 |
0.6.6 |
2.1 |
0.7.2 |
2.4 |
0.8.2 |
2.4 |
7.2. MacaRT-vLLM功能与局限性
MacaRT-vLLM兼容适配了vLLM-0.8.2,包含了以下功能和特性,以及局限性:
功能和特性:
兼容vLLM-0.8.2支持的所有模型BFLOAT16推理和部分模型FLOAT16推理,支持官方多模态模型
兼容原生LLM、Engine、Kernel的API接口
兼容原生server和OpenAI server接口
支持Lora特性
支持GPTQ和AWQ量化方式
支持ray和mp方式启动单机多卡推理;设置
--distributed-executor-backend可以指定不同后端进行多卡推理,默认使用ray支持prefix_cache方式
支持
enforce_eager=False方式。需通过显式配置,默认为True。另外,需要额外设置MACA环境变量来获取加速效果:export MACA_GRAPH_LAUNCH_MODE=1
局限性:
不支持FP8类型KV Cache和相关FP8模型
包含Ubuntu 20、Ubuntu 22、kylin2309a系统版本,后续完善支持其他系统
7.3. MacaRT-vLLM使用流程
本章节介绍MacaRT-vLLM的使用步骤,主要分为离线推理、吞吐测试和Sever服务。
7.3.1. 环境准备
使用MacaRT-vLLM进行推理需要准备好环境。目前提供两种方式:镜像和wheel包。
7.3.1.1. 使用vLLM镜像
从发布的软件包中获取vLLM镜像并启动,参见《曦云® 系列通用计算GPU用户指南》中“容器相关场景支持”章节。
7.3.1.2. 安装wheel包
操作步骤
预先安装沐曦平台的torch、flash attn、xformer(可选)环境。
获取MacaRT-vLLM压缩包mxc500-vllm-py310-xxx-${OS_Version}.tar.xz并解压。
pip安装以下wheel包:
vllm-0.8.2+xxx.whl
flash_attn+xxx.whl(适配vLLM新加速whl包)
ray-2.43.0-cp310-cp310_${OS_Version}.whl
除了上述wheel包,其他依赖环境可以通过外部镜像源进行安装。安装过程中有其他依赖,需要提前配置好Python的pip源。
7.3.1.3. 配置环境变量
export MACA_PATH=your_maca_path
export PATH=${MACA_PATH}/bin:${MACA_PATH}/mxgpu_llvm/bin:${PATH}
export LD_LIBRARY_PATH=${MACA_PATH}/lib:${MACA_PATH}/ompi/lib:${MACA_PATH}/mxgpu_llvm/lib:${LD_LIBRARY_PATH}
7.3.2. 离线推理
离线推理代码示例如下:
from vllm import LLM, SamplingParams
# Sample prompts.
prompts = [
"Hello, my name is",
"The president of the United States is",
"The capital of France is",
"The future of AI is",
]
# Create a sampling params object.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# Create an LLM.
llm = LLM(model="facebook/opt-125m", tensor_parallel_size=1, dtype="float16", max_model_len=2048)
# Generate texts from the prompts. The output is a list of RequestOutput objects
# that contain the prompt, generated text, and other information.
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}")
其中主要配置为:
LLM初始化类:指定模型路径(可配置为本地路径,如果不是本地路径,会根据网络下载外网模型)、tensor切分数量、模型数据类型(可不配置,如果没指定,将通过model config读取)、模型最大处理长度(可不配置,如果没设置,将从model config读取)
SamplingParams:设置采样算法方式。参数配置可参照官方vLLM-0.8.2版本进行配置。
7.3.3. 吞吐测试
吞吐测试代码可参考官方vLLm-0.8.2 benchmark_throughput.py。
吞吐测试代码的运行方式示例1:
python benchmark_throughput.py --model XXX --tensor-parallel-size 1 --num-prompts 8 --trust-remote-code --input-len 1024 --output-len 512
模型为XXX,tensor并行为1,8条请求数量,信任模型路径的tokenizer方式,每条输入长度为1024个token,输出为512个token。
吞吐测试代码的运行方式示例2:
python benchmark_throughput.py --model XXX --tensor-parallel-size 1 --num-prompts 8 --trust-remote-code --dataset XXX.json
模型为XXX,tensor并行为1,8条请求数量,信任模型路径的tokenizer方式,通过从dataset选取语料进行真实模拟。 json格式可参考ShareGPT_V3_unfiltered_cleaned_split.json。
运行程序后,结果打印如下:
Throughout: XXX request/s, XXXX token/s
打印结果指示每秒能接受多少请求,以及每秒处理的token数量(包括输入token)。
7.3.4. Server服务
Server请求服务参数设置可参考官方vLLM-0.8.2版本:
API server参数配置可参考api_server.py。
OpenAI server参数配置可参考api_server.py。
参考示例如下:
python -m vllm.entrypoints.api_server --model XXX #普通server方式
python -m vllm.entrypoints.openai.api_server --model XXX --host localhost --chat-template XXX.jinja ## openai 方式的请求
vllm server --model XXX