基于vLLM本地模型部署跟课复现 #25
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
环境准备/准备notebook
离线推理(非交互式)
进入终端,先转到code目录下
单卡推理
调动文件,启动单卡推理
成功后能看到模型给出的答案
基于ray做分布式多卡推理
启动ray
在平台上使用如下命令:
HIP_VISIBLE_DEVICES=0,1,2,3
:这是一个环境变量设置,用于指定哪些 GPU 设备对应用程序可见。在这里,HIP_VISIBLE_DEVICES 被设置为 0,1,2,3,意味着应用程序只能看到编号为 0、1、2 和 3 的 GPU 设备。这通常用于在多 GPU 系统中选择特定的 GPU 设备进行计算。ray start
:这是启动 Ray 框架的命令。--head
:这个参数指定当前节点是 Ray 集群的主节点(head node)可以看到ray已经成功启动了:
可以通过如下命令查看ray集群状态:
可以看到如下界面:
接下来打开VS Code
打开VS Code后,在port里查看端口;这里一开始并没有端口自动连接上,所以手动添加了端口。手动添加只需输入端口号'8265'便可成功添加上。
点击这里进入Ray的前端界面:
分布式推理
输入以下命令,开启分布式推理
这时回到Ray界面,在最上方 'JOB' 里可以看到我们提交了任务
执行结果
在线推理(交互式)
vllm也支持模拟openai api,调用本地模型可以直接使用openai的调用方式。
单卡推理
python -m
:这是 Python 的模块运行方式,用于运行 Python 程序中的模块。vllm.entrypoints.openai.api_server
:这是要运行的 Python 模块和入口点。vllm 是一个库的名称,entrypoints 可能是该库中用于定义入口点的子模块,而 openai.api_server 是具体的入口点,用于启动 API 服务器。--model /dataset/Qwen1.5-0.5B-Chat/
:这个参数指定了模型的路径。在这里,/dataset/Qwen1.5-0.5B-Chat/ 是模型文件所在的目录。这个目录应该包含模型的权重和配置文件。--tensor-parallel-size 1
:这个参数设置了张量并行的大小。在深度学习模型训练和推理中,张量并行是一种并行计算技术,用于在多个 GPU 上分割和处理模型的张量(多维数据数组)。这里的 1 表示不使用张量并行,即所有的计算都在单个 GPU 上完成。--dtype float16
:这个参数指定了模型推理时使用的数据类型。在这里,float16 表示使用 16 位浮点数进行计算。使用 float16 可以减少模型推理时的内存使用和加速计算,但可能会牺牲一些精度。出现端口8000便表示已成功
这时回到Ray界面,可以看到界面上并没有出现新的任务,只有一个刚刚在做分布式推理时已完成的任务。
多卡推理
多卡推理的代码与单卡推理代码的唯一不同之处在于需要调整GPU使用的数量:
--tensor-parallel-size 4
:这个参数设置了张量并行的大小。在深度学习模型训练和推理中,张量并行是一种并行计算技术,用于在多个 GPU 上分割和处理模型的张量(多维数据数组)。这里的 4 表示模型的张量将在 4 个 GPU 上并行处理。这种配置可以加速模型的推理过程,特别是对于大型模型。出现了端口8000,表示已成功
但与单卡推理时不同,这时Ray的界面上会出现新的任务
使用OpenAI python SDK调用vllm部署的模型
创建vllm_openai_call.py文件,然后将以下代码粘贴进文件:
执行:
开源模型的部署及tools使用
开源模型的部署
新启一个终端terminal,首先需要先转到code目录下
输入以下命令对开源模型进行部署
python -m
:这是 Python 的模块运行方式,用于运行 Python 程序中的模块。vllm.entrypoints.openai.api_server
:这是要运行的 Python 模块和入口点。vllm 是一个库的名称,entrypoints 可能是该库中用于定义入口点的子模块,而 openai.api_server 是具体的入口点,用于启动 API 服务器。--model /dataset/Qwen2-7B-Instruct/
:这个参数指定了模型的路径。在这里,/dataset/Qwen2-7B-Instruct/ 是模型文件所在的目录。这个目录应该包含模型的权重和配置文件。模型名称 Qwen2-7B-Instruct 暗示这可能是一个用于处理指令的自然语言处理模型,具有大约 7B(70 亿)个参数。--served-model-name Qwen2-7B-Instruct
:这个参数为服务的模型指定了一个名称。在这个例子中,模型被命名为 Qwen2-7B-Instruct。这个名称通常用于在 API 调用中引用模型,使得客户端可以明确地请求特定的模型进行推理。--tensor-parallel-size 4
:这个参数设置了张量并行的大小。在这里,4 表示模型的张量将在 4 个 GPU 上并行处理。这种配置可以加速模型的推理过程,特别是对于大型模型。--dtype float16
:这个参数指定了模型推理时使用的数据类型。在这里,float16 表示使用 16 位浮点数进行计算。使用 float16 可以减少模型推理时的内存使用和加速计算,但可能会牺牲一些精度。所以,这条命令的作用是启动一个 API 服务器,该服务器加载了位于 /dataset/Qwen2-7B-Instruct/ 路径下的模型,并使用 float16 数据类型进行推理。由于 --tensor-parallel-size 设置为 4,这意味着推理过程将在 4 个 GPU 上并行进行,这可以显著提高处理速度,尤其是在处理大型模型时。
出现8000端口代表部署成功
使用tools
这里我们也新开一个终端,并转到code目录下
这里我们五个文件都测试了一遍: