Skip to content

Commit

Permalink
feat: 新增 vLLM 镜像,修改部分内容写法
Browse files Browse the repository at this point in the history
rename
  • Loading branch information
gaoliye committed Apr 16, 2024
1 parent 7513c8e commit 7f061f7
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 33 deletions.
2 changes: 1 addition & 1 deletion Qwen1.5/01-Qwen1.5-7B-Chat FastApi 部署调用.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ pip install accelerate==0.24.1
pip install transformers_stream_generator==0.0.4
```

> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ和vllm外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> ***https://www.codewithgpu.com/i/datawhalechina/self-llm/self-llm-Qwen1.5***

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ pip install "transformers>=4.37.0" accelerate tiktoken einops scipy transformers
pip install -U huggingface_hub
```

> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ和vllm外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> ***https://www.codewithgpu.com/i/datawhalechina/self-llm/self-llm-Qwen1.5***

Expand Down
2 changes: 1 addition & 1 deletion Qwen1.5/03-Qwen1.5-7B-Chat WebDemo.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pip install accelerate==0.24.1
pip install transformers_stream_generator==0.0.4
```

> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ和vllm外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> ***https://www.codewithgpu.com/i/datawhalechina/self-llm/self-llm-Qwen1.5***
## 模型下载
Expand Down
2 changes: 1 addition & 1 deletion Qwen1.5/04-Qwen1.5-7B-chat Lora 微调.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ pip install peft==0.10.0

MAX_JOBS=8 pip install flash-attn --no-build-isolation
```
> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ和vllm外的所有部署环境。点击下方链接并直接创建Autodl示例即可。
> ***https://www.codewithgpu.com/i/datawhalechina/self-llm/self-llm-Qwen1.5***

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
# Qwen1.5-7B-Chat vllm 部署调用
# Qwen1.5-7B-Chat vLLM 部署调用

## vllm 简介
vLLM框架是一个高效的大型语言模型(LLM)**推理和部署服务系统**,具备以下特性:
## vLLM 简介
vLLM 框架是一个高效的大型语言模型(LLM)**推理和部署服务系统**,具备以下特性:

- **高效的内存管理**通过PagedAttention算法,vLLM实现了对KV缓存的高效管理,减少了内存浪费,优化了模型的运行效率。
- **高效的内存管理**通过 PagedAttention 算法,vLLM 实现了对 KV 缓存的高效管理,减少了内存浪费,优化了模型的运行效率。

- **高吞吐量**vLLM支持异步处理和连续批处理请求,显著提高了模型推理的吞吐量,加速了文本生成和处理速度。
- **高吞吐量**vLLM 支持异步处理和连续批处理请求,显著提高了模型推理的吞吐量,加速了文本生成和处理速度。

- **易用性**vLLM与HuggingFace模型无缝集成,支持多种流行的大型语言模型,简化了模型部署和推理的过程。兼容OpenAI的API服务器
- **易用性**vLLM 与 HuggingFace 模型无缝集成,支持多种流行的大型语言模型,简化了模型部署和推理的过程。兼容 OpenAI 的 API 服务器

- **分布式推理**:框架支持在多GPU环境中进行分布式推理,通过模型并行策略和高效的数据通信,提升了处理大型模型的能力。
- **分布式推理**:框架支持在多 GPU 环境中进行分布式推理,通过模型并行策略和高效的数据通信,提升了处理大型模型的能力。

- **开源**:vLLM 是开源的,拥有活跃的社区支持,便于开发者贡献和改进,共同推动技术发展。

- **开源**:vLLM是开源的,拥有活跃的社区支持,便于开发者贡献和改进,共同推动技术发展。

## 环境准备
在 Autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1

接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行演示。

![开启机器配置选择](images/Qwen1.5-vllm-gpu-select.png)
Expand All @@ -32,26 +33,26 @@ pip install openai==1.17.1
pip install torch==2.1.2+cu121
pip install tqdm==4.64.1
pip install transformers==4.39.3
pip install flash-attn==2.5.7 --no-build-isolation
pip install vllm==0.4.0.post1
```


直接安装 vllm 会安装 CUDA 12.1 版本。
直接安装 vLLM 会安装 CUDA 12.1 版本。
```shell
pip install vllm
```

如果我们需要在 CUDA 11.8 的环境下安装 vllm,可以使用以下命令,指定 vllm 版本和 python 版本下载。
如果我们需要在 CUDA 11.8 的环境下安装 vLLM,可以使用以下命令,指定 vLLM 版本和 python 版本下载。
```shell
export VLLM_VERSION=0.4.0
export PYTHON_VERSION=38
pip install https://github.com/vllm-project/vllm/releases/download/v${VLLM_VERSION}/vllm-${VLLM_VERSION}+cu118-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118
```

<!-- > 考虑到部分同学配置环境可能会遇到一些问题,我们在AutoDL平台准备了Qwen1.5的环境镜像,该镜像适用于该仓库除Qwen-GPTQ外的所有部署环境。点击下方链接并直接创建Autodl示例即可(目前还没有同步 vllm 环境镜像)。
> ***https://www.codewithgpu.com/i/datawhalechina/self-llm/self-llm-Qwen1.5*** -->
> 考虑到部分同学配置环境可能会遇到一些问题,我们在 AutoDL 平台准备了 vLLM 的环境镜像,该镜像适用于任何需要 vLLM 的部署环境。点击下方链接并直接创建 AutoDL 示例即可。(vLLM 对 torch 版本要求较高,且越高的版本对模型的支持更全,效果更好,所以新建一个全新的镜像。)
> ***https://www.codewithgpu.com/i/datawhalechina/self-llm/self-llm-vllm***
> vllm 需要 torch 版本较高,这里新建一个镜像来安装 vllm。镜像地址待更新:

## 模型下载

Expand All @@ -74,6 +75,8 @@ model_dir = snapshot_download('qwen/Qwen1.5-7B-Chat', cache_dir='/root/autodl-tm

首先从 vLLM 库中导入 LLM 和 SamplingParams 类。`LLM`类是使用vLLM引擎运行离线推理的主要类。`SamplingParams`类指定采样过程的参数,用于控制和调整生成文本的随机性和多样性。

vLLM 提供了非常方便的封装,我们直接传入模型名称或模型路径即可,不必手动初始化模型和分词器。

我们可以通过这个 demo 熟悉下 vLLM 引擎的使用方式。被注释的部分内容可以丰富模型的能力,但不是必要的,大家可以按需选择。


Expand All @@ -100,7 +103,7 @@ if __name__ == "__main__":
model='/root/autodl-tmp/qwen/Qwen1.5-7B-Chat' # 指定模型路径
# model="Qwen/Qwen1.5-MoE-A2.7B-Chat" # 指定模型名称,自动下载模型
tokenizer = None
# tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False) # 加载分词器后传入vllm 模型,但不是必要的。
# tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False) # 加载分词器后传入vLLM 模型,但不是必要的。

text = ["给我介绍一下大型语言模型。",
"告诉我如何变强。"]
Expand All @@ -125,14 +128,14 @@ if __name__ == "__main__":
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

```
![vllm 模型部署](images/Qwen1.5-vllm.png)
![vLLM 模型部署](images/Qwen1.5-vLLM.png)

### 创建兼容 OpenAI API 接口的服务器

Qwen 兼容 OpenAI API 协议,所以我们可以直接使用 vllm 创建 OpenAI API 服务器。vllm 部署实现 OpenAI API 协议的服务器非常方便。默认会在 http://localhost:8000 启动服务器。服务器当前一次托管一个模型,并实现列表模型、completions 和 chat completions 端口。
Qwen 兼容 OpenAI API 协议,所以我们可以直接使用 vLLM 创建 OpenAI API 服务器。vLLM 部署实现 OpenAI API 协议的服务器非常方便。默认会在 http://localhost:8000 启动服务器。服务器当前一次托管一个模型,并实现列表模型、completions 和 chat completions 端口。

- "completions":这是一个基本的文本生成任务,模型会在给定的提示后生成一段文本。这种类型的任务通常用于生成文章、故事、邮件等。
- "chat completions":这是一个更复杂的任务,模型需要理解和生成对话。这种类型的任务通常用于构建聊天机器人或者对话系统。
- completions:是基本的文本生成任务,模型会在给定的提示后生成一段文本。这种类型的任务通常用于生成文章、故事、邮件等。
- chat completions:是面向对话的任务,模型需要理解和生成对话。这种类型的任务通常用于构建聊天机器人或者对话系统。

在创建服务器时,我们可以指定模型名称、模型路径、聊天模板等参数。
- --host 和 --port 参数指定地址。
Expand All @@ -141,6 +144,8 @@ Qwen 兼容 OpenAI API 协议,所以我们可以直接使用 vllm 创建 OpenA
- --served-model-name 指定服务模型的名称。
- --max-model-len 指定模型的最大长度。

这里指定 `--max-model-len=2048` 是因为 Qwen1.5-7B-Chat 模型的最大长度过长 32768,导致 vLLM 初始化 KV 缓存时消耗资源过大。

```bash
python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/qwen/Qwen1.5-7B-Chat --served-model-name Qwen1.5-7B-Chat --max-model-len=2048
```
Expand Down Expand Up @@ -244,9 +249,21 @@ ChatCompletion(id='cmpl-1889c8c4e11240e3a6cab367b26d32b5', choices=[Choice(finis

## 速度测试

既然说 vllm 是一个高效的大型语言模型推理和部署服务系统,那么我们就来测试一下模型的生成速度。看看和原始的速度有多大的差距。这里直接使用 vllm 自带的 benchmark_throughput.py 脚本进行测试。可以将当前文件夹 benchmark_throughput.py 脚本放在 /root/autodl-tmp/ 下。或者大家可以自行[下载脚本](https://github.com/vllm-project/vllm/blob/main/benchmarks/benchmark_throughput.py)

测试 vllm 的速度:
既然说 vLLM 是一个高效的大型语言模型推理和部署服务系统,那么我们就来测试一下模型的生成速度。看看和原始的速度有多大的差距。这里直接使用 vLLM 自带的 benchmark_throughput.py 脚本进行测试。可以将当前文件夹 benchmark_throughput.py 脚本放在 /root/autodl-tmp/ 下。或者大家可以自行[下载脚本](https://github.com/vllm-project/vllm/blob/main/benchmarks/benchmark_throughput.py)

下面是一些 benchmark_throughput.py 脚本的参数说明:
- --model 参数指定模型路径或名称。
- --backend 推理后端,可以是 vllm、hf 和 mii。分布对应 vLLM、HuggingFace 和 Mii 推理后端。
- --input-len 输入长度
- --output-len 输出长度
- --num-prompts 生成的 prompt 数量
- --seed 2024 随机种子
- --dtype float16 浮点数精度
- --max-model-len 模型最大长度
- --hf_max_batch_size transformers 库的最大批处理大小(只有 hf 推理后端有效,且必须)
- --dataset 数据集路径。(未设置会自动生成数据)

测试 vLLM 的速度:
```bash
python benchmark_throughput.py \
--model /root/autodl-tmp/qwen/Qwen1.5-7B-Chat \
Expand All @@ -262,24 +279,25 @@ python benchmark_throughput.py \
```
Throughput: 6.34 requests/s, 1216.34 tokens/s
```
测试原始方式的速度
测试原始方式(使用 hunggingface 的 transformers 库)的速度
```bash
python benchmark_throughput.py \
--model /root/autodl-tmp/qwen/Qwen1.5-7B-Chat \
--backend hf \
--input-len 256 \
--output-len 512 \
--num-prompts 1000 \
--input-len 64 \
--output-len 128 \
--num-prompts 25 \
--seed 2024 \
--dtype float16
--hf_max_batch_size 25
```
得到的结果如下所示:
```
Throughput: 4.03 requests/s, 773.74 tokens/s
```

对比两者的速度,在本次测试中 vllm 的速度要比原始的速度快 50% 左右(本次测试相对比较随机,仅供本 case 参考,不对其他 case 有参考意义)。
| 模型 | Throughput | tokens/s |
对比两者的速度,在本次测试中 vLLM 的速度要比原始的速度快 **50%** 左右(本次测试相对比较随意,仅供本 case 参考,不对其他 case 有参考意义)。
| 推理框架 | Throughput | tokens/s |
| :---: | :---: | :---: |
| vllm | 6.34 requests/s | 1216.34 tokens/s |
| hf | 4.03 requests/s | 773.74 tokens/s |
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
- [x] [Qwen1.5-7B-chat Lora 微调](./Qwen1.5/04-Qwen1.5-7B-chat%20Lora%20微调.md) @不要葱姜蒜
- [x] [Qwen1.5-72B-chat-GPTQ-Int4 部署环境](./Qwen1.5/05-Qwen1.5-7B-Chat-GPTQ-Int4%20%20WebDemo.md) @[byx020119](https://github.com/byx020119)
- [x] [Qwen1.5-MoE-chat Transformers 部署调用](./Qwen1.5/06-Qwen1.5-MoE-A2.7B.md) @[丁悦](https://github.com/dingyue772)
- [x] [Qwen1.5-7B-chat vLLM推理部署](./Qwen1.5/07-Qwen1.5-7B-Chat%20vllm%20推理部署调用.md) @[立业](https://github.com/0-yy-0)
- [x] [Qwen1.5-7B-chat vLLM推理部署](./Qwen1.5/07-Qwen1.5-7B-Chat%20vLLM%20推理部署调用.md) @[立业](https://github.com/0-yy-0)

- [TransNormerLLM](https://github.com/OpenNLPLab/TransnormerLLM.git)
- [X] [TransNormerLLM-7B-Chat FastApi 部署调用](./TransNormer/01-TransNormer-7B%20FastApi%20部署调用.md) @[ml67](https://github.com/mlw67) ddl=3月底
Expand Down

0 comments on commit 7f061f7

Please sign in to comment.