基于vLLM本地模型部署课程复现 #213

Open
opened 2024-10-17 18:09:05 +08:00 by 12390900721cs · 0 comments

简介:vLLM是一个开源的LLM推理和服务引擎,简单、易用、支持主流模型。

vLLM支持主流模型的推理列表

vLLM官方文档

本次课程属于本地大模型部署【推理和优化】。

本文主要讲解vLLM的几种主流使用方式。

环境准备

镜像:z100-vllm

算法:vllm_deploy_04

数据集:huggingface-cache

离线推理(非交互式)

离线推理可以将模型生成当作一个批处理任务,常用在模型评测、RLHF微调训练的过程、以及需要大量内容生成的任务中。

使用单卡推理

当一个模型单卡可以放的下时,就可以使用单卡进行推理。执行python vllm_standalone.py。

python vllm_standalone.py

基于ray做分布式多卡推理

启动ray

#平台上使用如下命令:
HIP_VISIBLE_DEVICES=0,1,2,3 ray start --head --dashboard-host 0.0.0.0 --num-gpus=4

使用如下命令查看ray集群状态:

ray status

打开ray页面:

在vscode中点击端口转发可以打开ray的前端界面:

ray的dashboard:

多卡分布式推理

执行python vllm_distributed_ray.py

python vllm_distributed_ray.py

生成过程:

在线推理(交互式)

vllm也支持模拟openai api,调用本地模型可以直接使用openai的调用方式。

但是:vLLM部署模型的优势主要在于速度快和节省显存,实际项目使用时,比较少看到直接作为openai api服务来使用的,一般用做推理后端(推理引擎),对标TensorRT-LLM。

比如我们之前提到的xinference项目,就是将vLLM作为后端引擎集成进来。

这里使用Qwen1.5 0.5B的模型。

python -m vllm.entrypoints.openai.api_server --model /dataset/Qwen1.5-0.5B-Chat/ --tensor-parallel-size 1 --dtype float16

启用单卡推理

启动多卡推理

python -m vllm.entrypoints.openai.api_server --model /dataset/Qwen1.5-0.5B-Chat/ --tensor-parallel-size 4 --dtype float16

事实上vllm会默认在ray上启动一个任务:

使用OpenAI python SDK调用vllm部署的模型

兼容openai API,直接使用sdk就可以和模型交互。

python vllm_openai_call.py

推理结果:

开源模型的部署及tools使用

部署Qwen2-7B-Instruct

使用如下命令可以部署一个Qwen2-7B-Instruct模型,并模拟openai api对外提供服务

python -m vllm.entrypoints.openai.api_server \
  --model /dataset/Qwen2-7B-Instruct/ \
  --served-model-name Qwen2-7B-Instruct \
  --tensor-parallel-size 4 \
  --dtype float16

这里<font style="color:rgb(6, 6, 7);">vllm.entrypoints.openai.api_server</font> 是 vLLM 框架提供的一个模块,用于启动一个兼容 OpenAI API 的 HTTP 服务器。vLLM 是一个高性能的大语言模型服务框架,它允许用户轻松地部署自己的 AI 聊天服务器,并且可以兼容 OpenAI 的 API,这意味着可以轻松地将 vLLM 集成到现有的使用 OpenAI API 的应用中。

参数:

  • --model /dataset/Qwen2-7B-Instruct/ 指定了模型文件的路径。
  • --served-model-name Qwen2-7B-Instruct 设置了模型在服务器中的名称。
  • --tensor-parallel-size 4 表明服务器将使用张量并行技术,并且并行大小为 4,这通常用于多 GPU 环境中以提高计算效率。
  • --dtype float16 指定了数据类型为 float16,这有助于减少内存使用,但可能会影响计算精度。

tools使用

python /code/ex04_api_call_tools.py

<font style="color:#333333;">简介:vLLM是一个开源的LLM推理和服务引擎,简单、易用、支持主流模型。</font> [<font style="color:#117CEE;">vLLM支持主流模型的推理列表</font>](https://docs.vllm.ai/en/latest/models/supported_models.html) [vLLM官方文档](https://docs.vllm.ai/en/latest/index.html) **<font style="color:#000000;">本次课程属于本地大模型部署【推理和优化】。</font>** <font style="color:#333333;">本文主要讲解vLLM的几种主流使用方式。</font> <font style="color:#333333;"></font> ## <font style="color:#333333;">环境准备</font> ### 镜像:<font style="color:rgb(96, 98, 102);">z100-vllm</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729048441980-adcf85e1-0430-49ea-a2c2-c9621ab51c75.png) ### 算法:<font style="color:rgb(96, 98, 102);">vllm_deploy_04</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729048470411-9c4f16e3-32f6-460a-834d-98cbf8b680a6.png) ### 数据集:<font style="color:#333333;">huggingface-cache</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729048577015-3dbe9076-6724-4505-9fa0-3b1640c53507.png) ## 离线推理(非交互式) <font style="color:#333333;">离线推理可以将</font>**<font style="color:#333333;">模型生成</font>**<font style="color:#333333;">当作一个</font>**<font style="color:#333333;">批处理任务</font>**<font style="color:#333333;">,常用在模型评测、RLHF微调训练的过程、以及需要大量内容生成的任务中。</font> ### <font style="color:#333333;">使用单卡推理</font> <font style="color:#333333;">当一个模型单卡可以放的下时,就可以使用单卡进行推理。执行</font>**<font style="color:#333333;">python vllm_standalone.py。</font>** ```plain python vllm_standalone.py ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729049360742-20071b5b-728d-4867-b6f0-4ece0f3e5428.png) ### 基于ray做分布式多卡推理 #### 启动ray ```plain #平台上使用如下命令: HIP_VISIBLE_DEVICES=0,1,2,3 ray start --head --dashboard-host 0.0.0.0 --num-gpus=4 ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729050133808-d2abdf2b-9a08-479e-9959-b375b1df333a.png) <font style="color:#333333;">使用如下命令查看ray集群状态:</font> ```plain ray status ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729050143887-5bd6cf1b-c696-477e-8e8d-3cb73855d75b.png) <font style="color:#333333;"></font> <font style="color:#333333;">打开ray页面:</font> <font style="color:#333333;">在vscode中点击端口转发可以打开ray的前端界面:</font>![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729149551668-c48a1406-7028-47f4-9207-1c8335bc5656.png) <font style="color:#333333;"></font> <font style="color:#333333;">ray的dashboard:</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729150346766-d6f90511-9838-484b-ac8c-73cdc153fc1a.png) #### <font style="color:#333333;">多卡分布式推理</font> <font style="color:#333333;">执行</font>**<font style="color:#333333;">python vllm_distributed_ray.py</font>** ```plain python vllm_distributed_ray.py ``` <font style="color:#333333;">生成过程:</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729150202610-b39a9ee2-a609-4074-a0ab-ceaa68b5336c.png) <font style="color:#333333;"></font> <font style="color:#333333;"></font> ## <font style="color:#333333;">在线推理(交互式)</font> **<font style="color:#333333;">vllm也支持模拟openai api,调用本地模型可以直接使用openai的调用方式。</font>** > <font style="color:#333333;">但是:vLLM部署模型的优势主要在于速度快和节省显存,实际项目使用时,比较少看到直接作为openai api服务来使用的,一般用做推理后端(推理引擎),对标</font>**<font style="color:#333333;">TensorRT-LLM。</font>** > <font style="color:#333333;">比如我们之前提到的xinference项目,就是将vLLM作为后端引擎集成进来。</font> <font style="color:#333333;">这里使用Qwen1.5 0.5B的模型。</font> ```plain python -m vllm.entrypoints.openai.api_server --model /dataset/Qwen1.5-0.5B-Chat/ --tensor-parallel-size 1 --dtype float16 ``` ### <font style="color:#333333;">启用单卡推理</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729150611299-cdfc8944-bbe7-4ebb-9e8f-1aa1360b0011.png) ### 启动多卡推理 ```plain python -m vllm.entrypoints.openai.api_server --model /dataset/Qwen1.5-0.5B-Chat/ --tensor-parallel-size 4 --dtype float16 ``` <font style="color:#333333;">事实上vllm会默认在ray上启动一个任务:</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729150831373-d0fc94d6-f5a3-4218-88f2-ddf567deca51.png) **<font style="color:#333333;"></font>** ### <font style="color:#333333;">使用OpenAI python SDK调用vllm部署的模型</font> <font style="color:#333333;">兼容openai API,直接使用sdk就可以和模型交互。</font> ```plain python vllm_openai_call.py ``` 推理结果: ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729157369432-6a73a005-35dd-4359-9024-896677e578c2.png) ## 开源模型的部署及tools使用 ### <font style="color:#333333;">部署Qwen2-7B-Instruct</font> <font style="color:#333333;">使用如下命令可以部署一个Qwen2-7B-Instruct模型,并模拟openai api对外提供服务</font> ```plain python -m vllm.entrypoints.openai.api_server \ --model /dataset/Qwen2-7B-Instruct/ \ --served-model-name Qwen2-7B-Instruct \ --tensor-parallel-size 4 \ --dtype float16 ``` <font style="color:#333333;">这里</font>`<font style="color:rgb(6, 6, 7);">vllm.entrypoints.openai.api_server</font>`<font style="color:rgb(6, 6, 7);"> 是 vLLM 框架提供的一个模块,用于启动一个兼容 OpenAI API 的 HTTP 服务器。vLLM 是一个高性能的大语言模型服务框架,它允许用户轻松地部署自己的 AI 聊天服务器,并且可以兼容 OpenAI 的 API,这意味着可以轻松地将 vLLM 集成到现有的使用 OpenAI API 的应用中。</font> <font style="color:rgb(6, 6, 7);">参数:</font> + `--model /dataset/Qwen2-7B-Instruct/`<font style="color:rgb(6, 6, 7);"> </font><font style="color:rgb(6, 6, 7);">指定了模型文件的路径。</font> + `--served-model-name Qwen2-7B-Instruct`<font style="color:rgb(6, 6, 7);"> </font><font style="color:rgb(6, 6, 7);">设置了模型在服务器中的名称。</font> + `--tensor-parallel-size 4`<font style="color:rgb(6, 6, 7);"> </font><font style="color:rgb(6, 6, 7);">表明服务器将使用张量并行技术,并且并行大小为 4,这通常用于多 GPU 环境中以提高计算效率。</font> + `--dtype float16`<font style="color:rgb(6, 6, 7);"> 指定了数据类型为 float16,这有助于减少内存使用,但可能会影响计算精度。</font> ### <font style="color:#333333;">tools使用</font> ```plain python /code/ex04_api_call_tools.py ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1729156636567-dc3bcea9-3938-4e4c-b6b3-2e7a07a4d40c.png) <font style="color:#333333;"></font> <font style="color:#333333;"></font> <font style="color:#333333;"></font> <font style="color:#333333;"></font> <font style="color:#333333;"></font> <font style="color:#333333;"></font>
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#213
No description provided.