VLLM适配昇腾开源体验任务心得

举报
云聪明 发表于 2025/02/11 21:53:06 2025/02/11
1.3w+ 0 0
【摘要】 VLLM适配昇腾910B NPU验证任务

VLLM使用昇腾进行对话推理体验任务

1. 开源项目基本情况

VLLM是一个开源的高性能大语言模型推理库,旨在实现大规模语言模型的快速推理。

源码地址:https://github.com/vllm-project/vllm

官网主页:https://github.com/vllm-project

主要开发语言:python

LICENSE:Apache License 2.0

维护者:Woosuk Kwon

项目数据:Fork 5.6k,Star 37.3K,Contributor 823,最近一次提交:2025-2-11

star历史(https://star-history.com/):

star-history-2025211.png

2. 任务目的和范围

本任务旨在将VLLM项目部署至华为的Ascend和Kunpeng处理器以及Euler操作系统,并进行对话推理功能的使用,确保其能够在这些平台上有效运行。

3. 方案设计

• 昇腾环境验证:完成昇腾环境的验证,需要CANN、torch_npu。

先安装CANN,参考:

https://www.hiascend.com/zh/developer/download/community/result?module=cann

cann默认安装在/usr/local/Ascend目录下,需要运行一下命令初始化环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

torch_npu的安装参考:

https://github.com/Ascend/pytorch/blob/master/README.zh.md

• vllm环境搭建:创建conda环境,GitHub上拉取vllm仓库代码并安装vllm。

• 离线推理/API部署:

vllm可以使用两种方式进行推理对话。离线推理即不通过服务器,直接使用推理脚本进行推理对话;API部署推理即通过启动服务器访问API进行推理部署,项目提供了一个兼容 OpenAI 接口的 API 服务器,使得开发者可以像使用 OpenAI 服务一样,轻松地集成 VLLM 的能力。

API部署:

命令行启动服务器——>Completions API访问——>开始推理对话

离线推理:

修改推理脚本——>选择Qwen1.5-4B-Chat模型为对话推理模型——>执行脚本进行对话

(可能报错modelscope找不到,使用pip install modelscope可以解决)

• 推理验证:

两种方式均可进行推理,通过在命令行输入问题的提问方式,进行推理。模型加载成功后会提取问题并回答问题并将结果反馈给用户。

4. 完成演示DEMO设计、开发

DEMO整体设计流程图如下:

5. 验证CPU实验步骤

5.1 购买的资源配置

购买一台如下配置的服务器

鲲鹏通用计算增强型 | 32vCPUs | 128GiB | kc1.8xlarge.4

cpu资源购买.png

5.2 鲲鹏920、OpenEuler验证推理

其中vllm安装的主要步骤如下:

1. 下载软件包Miniconda,并赋上安装脚本可执行权限和执行脚本

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
chmod +x Miniconda3-latest-Linux-aarch64.sh
./Miniconda3-latest-Linux-aarch64.sh
export PATH="/root/miniconda3/bin:$PATH"
source ~/.bashrc

2. 创建虚拟环境 vllm311并激活

conda create -n vllm311 python=3.11
conda activate vllm311

3. 拉取代码仓库

git clone https://github.com/vllm-project/vllm.git
git clone https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoAI.git

4. 安装依赖,然后安装vllm

cd vllm
yum install -y gcc gcc-c++
pip install wheel packaging ninja setuptools>=49.4.0 numpy psutil
pip install -v -r requirements-cpu.txt --extra-index-url https://download.pytorch.org/whl/cpu
pip install setuptools_scm
conda install -c conda-forge cmake=3.27
sudo yum install numactl-devel
VLLM_TARGET_DEVICE=cpu python setup.py install

根据以上步骤可顺利安装vllm,进行推理验证可参考“5.3 完成Demo部署和验证”。

5.3 完成Demo部署和验证

参考WIKI "https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoAI/overview"中的AI Demo示例,

通过下面的代码完成部署:

5.3.1 离线推理部署

pip install modelscope
export VLLM_USE_MODELSCOPE=True
export VLLM_CPU_KVCACHE_SPACE=100
export OMP_NUM_THREADS=32
cd OpenSourceForHuaweiDemoAI/
python test_vllm_cpu.py

输出结果如下:

根据输入的问题"The future of AI is",扩写得到文本如下图中红色方框显示“ here, and it's changing the world around us. From......”红色方框32cpu离线命令行推理.png

推理过程中通过htop命令查看系统状态

32cpu.png说明离线推理,通过命令行验证成功。

5.3.2 API部署推理

1. 启动服务器:

python -m vllm.entrypoints.openai.api_server --model "/root/.cache/modelscope/hub/Qwen/Qwen1.5-4B-chat" --served-model-name "openchat" --dtype float16

部署成功:

在线推理1.png

在线推理2.png注意:

后面一定要加参数:

 --dtype float16

不然会出现下面的错误告警:

ERROR 02-11 16:16:47 engine.py:139] RuntimeError: "rms_norm_impl" not implemented for 'BFloat16'

使用参数float32也可以。

2. 使用curl访问并得到推理验证结果

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "openchat",
    "prompt": "San Francisco is a",
    "max_tokens": 7,
    "temperature": 0
}'

-d 里面是请求的参数,可以自己设置;

temperature 0,代表每次模型的回答都相同,不具有随机性,你可以自由调整参数来满足你的需求;

promote是输入需要推理的内容“San Francisco is a”,模型可以根据输入的内容扩写文本,如红框标注即模型扩写出来的内容 “beautiful city with attractions”

注意:

1. 命令行推理

python offline_inference_npu.py --trust-remote-code

执行推理脚本offline_inference_npu.py,该脚本会调用模型,并根据promot扩写文本。

此次任务中promote输入的问题为 "San Francisco is a"。

2. 推理验证结果

在线推理红框.png

在线推理cpu.png

说明API部署推理验证成功

5.4 鲲鹏920、OpenEuler CPU推理小结

通过5.3 完成Demo部署和验证,成功验证了VLLM在鲲鹏920款CPU上的推理验证。

6. 验证NPU实验步骤

6.1 购买的资源配置

华为云上目前西南-贵阳一有notebook上有 Ascend 910B3芯片

配置清单如下:

购买配置1.png

购买配置2.png

6.2 昇腾910 NPU验证推理

其中vllm安装的主要步骤如下:

1. conda源修改

这次选择的是镜像mindspore_2.3.0-cann_8.0.rc2-py_3.9-euler_2.10.7-aarch64-snt9b

这个版本的canda镜像源需要做一些修改:

conda config --remove-key channels
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda clean -i

2. 创建虚拟环境 vllm310并激活

conda create -n vllm310 python=3.10 -y
conda activate vllm310

3. 拉取代码仓库

git clone -b npu_support https://github.com/wangshuai09/vllm.git
git clone https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoAI.git

4. 安装依赖,然后安装vllm

pip3 install torch==2.1.0
pip3 install pyyaml
pip3 install setuptools
pip3 install torch-npu==2.1.0.post10
pip install modelscope
VLLM_TARGET_DEVICE=npu pip install -e .

根据以上步骤可顺利安装vllm,进行推理验证可参考“6.3 完成Demo部署和验证”。

6.3 完成Demo部署和验证

参考WIKI "https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoAI/overview"中的AI Demo示例,

通过下面的代码完成部署:

6.3.1 离线推理部署

pip install modelscope
export VLLM_USE_MODELSCOPE=True
cd ../OpenSourceForHuaweiDemoAI
python offline_inference_npu.py --trust-remote-code

输出结果如下:

根据输入的问题"The future of AI is",扩写得到文本如下图中红色方框显示“bright,but it's also filled with challenges......”

离线命令行推理结果.png4-3.png

说明离线推理,通过命令行验证成功。

6.3.2 API部署推理

1. 启动服务器:

python -m vllm.entrypoints.openai.api_server --model "/root/.cache/modelscope/hub/Qwen/Qwen1.5-4B-chat" --served-model-name "openchat"

部署成功:

5-1.png5-2.png2. 使用curl访问并得到推理验证结果

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "openchat",
    "prompt": "San Francisco is a",
    "max_tokens": 7,
    "temperature": 0
}'

-d 里面是请求的参数,可以自己设置;

temperature 0,代表每次模型的回答都相同,不具有随机性,你可以自由调整参数来满足你的需求;

promote是输入需要推理的内容“San Francisco is a”,模型可以根据输入的内容扩写文本,如红框标注即模型扩写出来的内容 “beautiful city with attractions”

注意:

1. 命令行推理

python offline_inference_npu.py --trust-remote-code

执行推理脚本offline_inference_npu.py,该脚本会调用模型,并根据promot扩写文本。

此次任务中promote输入的问题为 "San Francisco is a"。

2. 推理验证结果

6.png

6-1.png

说明API部署推理验证成功

6.4 昇腾910 NPU推理小结

通过6.3 完成Demo部署和验证,成功验证了VLLM在昇腾910 NPU上的推理验证。

7. 参考资料

1.开源for Huawei介绍、环境搭建、示例项目、开发和部署指南:

https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/overview

2.完成任务过程中,碰到问题可以在这里查询或者提问:

https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues

3. VLLM Github仓库:

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

4. VLLM适配昇腾开源验证任务心得:

https://bbs.huaweicloud.com/blogs/441244

5. VLLM部署参考WIKI:

https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/tree/main/zh_CN/docs.md

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

热门文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。