diff --git a/docs/vllm_mindspore/docs/source_en/getting_started/quick_start/quick_start.md b/docs/vllm_mindspore/docs/source_en/getting_started/quick_start/quick_start.md index e425c661a47830d81822d3fe600801a359c3a189..1eee252d69e765dd7ca2a0126ca80004bb5cf7f5 100644 --- a/docs/vllm_mindspore/docs/source_en/getting_started/quick_start/quick_start.md +++ b/docs/vllm_mindspore/docs/source_en/getting_started/quick_start/quick_start.md @@ -131,13 +131,13 @@ git clone https://huggingface.co/Qwen/Qwen2.5-7B-Instruct Before launching the model, user need to set the following environment variables: ```bash -export vLLM_MODEL_BACKEND=MindFormers # use MindSpore Transformers as model backend. +export VLLM_MS_MODEL_BACKEND=MindFormers # use MindSpore Transformers as model backend. export MINDFORMERS_MODEL_CONFIG=$YAML_PATH # Set the corresponding MindSpore Transformers model's YAML file. ``` Here is an explanation of these environment variables: -- `vLLM_MODEL_BACKEND`: The backend of the model to run. User could find supported models and backends for vLLM-MindSpore Plugin in the [Model Support List](../../user_guide/supported_models/models_list/models_list.md). +- `VLLM_MS_MODEL_BACKEND`: The backend of the model to run. User could find supported models and backends for vLLM-MindSpore Plugin in the [Model Support List](../../user_guide/supported_models/models_list/models_list.md). - `MINDFORMERS_MODEL_CONFIG`: The model configuration file. User can find the corresponding YAML file in the [MindSpore Transformers repository](https://gitee.com/mindspore/mindformers/tree/master/research/qwen2_5). For Qwen2.5-7B, the YAML file is [predict_qwen2_5_7b_instruct.yaml](https://gitee.com/mindspore/mindformers/blob/master/research/qwen2_5/predict_qwen2_5_7b_instruct.yaml). Additionally, users need to ensure that MindSpore Transformers is installed. Users can add it by running the following command: diff --git a/docs/vllm_mindspore/docs/source_zh_cn/getting_started/quick_start/quick_start.md b/docs/vllm_mindspore/docs/source_zh_cn/getting_started/quick_start/quick_start.md index f0d19926ba072f4b63448d34ccb48ffe7474b66d..bddd81e67839a831e198570b277283168b521aae 100644 --- a/docs/vllm_mindspore/docs/source_zh_cn/getting_started/quick_start/quick_start.md +++ b/docs/vllm_mindspore/docs/source_zh_cn/getting_started/quick_start/quick_start.md @@ -131,13 +131,13 @@ git clone https://huggingface.co/Qwen/Qwen2.5-7B-Instruct 用户在拉起模型前,需设置以下环境变量: ```bash -export vLLM_MODEL_BACKEND=MindFormers # use MindSpore Transformers as model backend. +export VLLM_MS_MODEL_BACKEND=MindFormers # use MindSpore Transformers as model backend. export MINDFORMERS_MODEL_CONFIG=$YAML_PATH # Set the corresponding MindSpore Transformers model's YAML file. ``` 以下是对上述环境变量的解释: -- `vLLM_MODEL_BACKEND`:所运行的模型后端。目前vLLM-MindSpore插件所支持的模型与模型后端,可在[模型支持列表](../../user_guide/supported_models/models_list/models_list.md)中进行查询; +- `VLLM_MS_MODEL_BACKEND`:所运行的模型后端。目前vLLM-MindSpore插件所支持的模型与模型后端,可在[模型支持列表](../../user_guide/supported_models/models_list/models_list.md)中进行查询; - `MINDFORMERS_MODEL_CONFIG`:模型配置文件。用户可以在[MindSpore Transformers工程](https://gitee.com/mindspore/mindformers/tree/master/research/qwen2_5)中,找到对应模型的yaml文件。以Qwen2.5-7B为例,则其yaml文件为[predict_qwen2_5_7b_instruct.yaml](https://gitee.com/mindspore/mindformers/blob/master/research/qwen2_5/predict_qwen2_5_7b_instruct.yaml)。 另外,用户需要确保MindSpore Transformers已安装。用户可通过 diff --git a/docs/vllm_mindspore/docs/source_zh_cn/getting_started/tutorials/deepseek_parallel/deepseek_r1_671b_w8a8_dp4_tp4_ep4.md b/docs/vllm_mindspore/docs/source_zh_cn/getting_started/tutorials/deepseek_parallel/deepseek_r1_671b_w8a8_dp4_tp4_ep4.md index 076e1963c5c1987cbd7f2246fda4e476638d7ade..68b666256d6bc4bb3dcce6e8a74d24c2ddc01fc9 100644 --- a/docs/vllm_mindspore/docs/source_zh_cn/getting_started/tutorials/deepseek_parallel/deepseek_r1_671b_w8a8_dp4_tp4_ep4.md +++ b/docs/vllm_mindspore/docs/source_zh_cn/getting_started/tutorials/deepseek_parallel/deepseek_r1_671b_w8a8_dp4_tp4_ep4.md @@ -2,11 +2,11 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/vllm_mindspore/docs/source_zh_cn/getting_started/tutorials/deepseek_parallel/deepseek_r1_671b_w8a8_dp4_tp4_ep4.md) -vLLM-MindSpore插件支持张量并行(TP)、数据并行(DP)、专家并行(EP)及其组合配置的混合并行推理,不同并行策略的适用场景可参考[vLLM官方文档](https://docs.vllm.ai/en/latest/configuration/optimization.html#parallelism-strategies)。 +本文档介绍DeepSeek R1 671B W8A8并行推理启动流程。DeepSeek R1 671B W8A8模型需使用多个节点资源运行推理模型。为确保各个节点的执行配置(包括模型配置文件路径、Python环境等)一致,推荐通过 docker 镜像创建容器的方式避免执行差异。用户可通过以下[docker安装](#docker安装)章节进行环境配置。 -本文档将以DeepSeek R1 671B W8A8为例介绍[张量并行](#tp16-张量并行推理)及[混合并行](#混合并行推理)推理流程。DeepSeek R1 671B W8A8模型需使用多个节点资源运行推理模型。为确保各个节点的执行配置(包括模型配置文件路径、Python环境等)一致,推荐通过 docker 镜像创建容器的方式避免执行差异。 +vLLM-MindSpore插件支持[张量并行(TP)](https://docs.vllm.ai/en/v0.9.1/configuration/optimization.html?h=expert#tensor-parallelism-tp)、[数据并行(DP)](https://docs.vllm.ai/en/v0.9.1/configuration/optimization.html?h=expert#data-parallelism-dp)、[专家并行(EP)](https://docs.vllm.ai/en/v0.9.1/configuration/optimization.html?h=expert#expert-parallelism-ep)及其组合配置的混合并行推理。关于多机并行推理的更多信息,可以参考[并行推理方法介绍](../../../user_guide/supported_features/parallel/parallel.md)。 -用户可通过以下[docker安装](#docker安装)章节进行环境配置。 +该文档样例,需要2台Atlas 800 A2服务器节点。共16个可用的NPU,每个NPU为64GB的规格。 ## docker安装 @@ -84,6 +84,10 @@ docker ps docker exec -it $DOCKER_NAME bash ``` +## Ray多节点集群管理 + +在 Ascend 上,如果使用Ray,则需要额外安装 pyACL 包来适配 Ray。且所有节点的 CANN 依赖版本需要保持一致。该样例需要依赖Ray进行多机启动。Ray的安装介绍请查看[Ray安装流程介绍](#ray安装流程)。 + ## 下载模型权重 用户可采用[Python工具下载](#python工具下载)或[git-lfs工具下载](#git-lfs工具下载)两种方式,进行模型下载。 @@ -123,142 +127,52 @@ Git LFS initialized. git clone https://modelers.cn/models/MindSpore-Lab/DeepSeek-R1-0528-A8W8.git ``` -## TP16 张量并行推理 +## 启动模型服务 -vLLM 通过 Ray 对多个节点资源进行管理和运行。该样例对应张量并行(TP)为16的场景。 +以下样例以DeepSeek R1 671B W8A8为例为例,启动模型服务。 ### 设置环境变量 -环境变量必须设置在 Ray 创建集群前,且当环境有变更时,需要通过 `ray stop` 将主从节点集群停止,并重新创建集群,否则环境变量将不生效。 - 分别在主从节点配置如下环境变量: ```bash source /usr/local/Ascend/ascend-toolkit/set_env.sh -export GLOO_SOCKET_IFNAME=enp189s0f0 -export HCCL_SOCKET_IFNAME=enp189s0f0 -export TP_SOCKET_IFNAME=enp189s0f0 export MS_ENABLE_LCCL=off export HCCL_OP_EXPANSION_MODE=AIV export MS_ALLOC_CONF=enable_vmm:true export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export VLLM_MS_MODEL_BACKEND=MindFormers +export PYTHONPATH=/path/to/mindformers:$PYTHONPATH +export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python +export GLOO_SOCKET_IFNAME=enp189s0f0 +export HCCL_SOCKET_IFNAME=enp189s0f0 +export TP_SOCKET_IFNAME=enp189s0f0 ``` 环境变量说明: -- `GLOO_SOCKET_IFNAME`: GLOO后端端口。可通过`ifconfig`查找ip对应网卡的网卡名。 -- `HCCL_SOCKET_IFNAME`: 配置HCCL端口。可通过`ifconfig`查找ip对应网卡的网卡名。 -- `TP_SOCKET_IFNAME`: 配置TP端口。可通过`ifconfig`查找ip对应网卡的网卡名。 - `MS_ENABLE_LCCL`: 关闭LCCL,使能HCCL通信。 - `HCCL_OP_EXPANSION_MODE`: 配置通信算法的编排展开位置为Device侧的AI Vector Core计算单元。 - `MS_ALLOC_CONF`: 设置内存策略。可参考[MindSpore官网文档](https://www.mindspore.cn/docs/zh-CN/master/api_python/env_var_list.html)。 - `ASCEND_RT_VISIBLE_DEVICES`: 配置每个节点可用device id。用户可使用`npu-smi info`命令进行查询。 - `VLLM_MS_MODEL_BACKEND`:所运行的模型后端。目前vLLM-MindSpore插件所支持的模型与模型后端,可在[模型支持列表](../../../user_guide/supported_models/models_list/models_list.md)中进行查询。 - -另外,用户需要确保MindSpore Transformers已安装。用户可通过 - -```bash -export PYTHONPATH=/path/to/mindformers:$PYTHONPATH -``` - -以引入MindSpore Tranformers。 - -### 启动 Ray 进行多节点集群管理 - -在 Ascend 上,需要额外安装 pyACL 包来适配 Ray。且所有节点的 CANN 依赖版本需要保持一致。 - -#### 安装 pyACL - -pyACL (Python Ascend Computing Language) 通过 CPython 封装了 AscendCL 对应的 API 接口,使用接口可以管理 Ascend AI 处理器和对应的计算资源。 - -在对应环境中,获取相应版本的 Ascend-cann-nnrt 安装包后,解压出 pyACL 依赖包并单独安装,并将安装路径添加到环境变量中: - -```shell -./Ascend-cann-nnrt_8.0.RC1_linux-aarch64.run --noexec --extract=./ -cd ./run_package -./Ascend-pyACL_8.0.RC1_linux-aarch64.run --full --install-path= -export PYTHONPATH=/CANN-/python/site-packages/:$PYTHONPATH -``` - -若安装过程有权限问题,可以使用以下命令加权限: - -```bash -chmod -R 777 ./Ascend-pyACL_8.0.RC1_linux-aarch64.run -``` - -在 Ascend 的首页中可以下载 Ascend 运行包。如, 可以下载 [8.0.RC1.beta1](https://www.hiascend.cn/developer/download/community/result?module=cann&version=8.0.RC1.beta1) 对应版本的运行包。 - -#### 多节点间集群 - -多节点集群管理前,需要检查各节点的 hostname 是否各异,如果存在相同的,需要通过 `hostname ` 设置不同的 hostname。 - -1. 启动主节点 `ray start --head --port=`,启动成功后,会提示从节点的连接方式。如在 ip 为 `192.5.5.5` 的环境中,通过 `ray start --head --port=6379`,提示如下: - - ```text - Local node IP: 192.5.5.5 - - -------------------- - Ray runtime started. - -------------------- - - Next steps - To add another node to this Ray cluster, run - ray start --address='192.5.5.5:6379' - - To connect to this Ray cluster: - import ray - ray.init() - - To terminate the Ray runtime, run - ray stop - - To view the status of the cluster, use - ray status - ``` - -2. 从节点连接主节点 `ray start --address=:`。 -3. 通过 `ray status` 查询集群状态,显示的NPU总数为节点总合,则表示集群成功。 - - 当有两个节点,每个节点有8个NPU时,其结果如下: - - ```shell - ======== Autoscaler status: 2025-05-19 00:00:00.000000 ======== - Node status - --------------------------------------------------------------- - Active: - 1 node_efa0981305b1204810c3080c09898097099090f09ee909d0ae12545 - 1 node_184f44c4790135907ab098897c878699d89098e879f2403bc990112 - Pending: - (no pending nodes) - Recent failures: - (no failures) - - Resources - --------------------------------------------------------------- - Usage: - 0.0/384.0 CPU - 0.0/16.0 NPU - 0B/2.58TiB memory - 0B/372.56GiB object_store_memory - - Demands: - (no resource demands) - ``` +- `PYTHONPATH`:将mindformers路径,加入到`PYTHONPATH`。当`VLLM_MS_MODEL_BACKEND`设置为`MindFormers`需要配置。 +- `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION`:当版本不兼容时使用 +- `GLOO_SOCKET_IFNAME`:用于多机之间使用gloo通信时的网口名称。 +- `HCCL_SOCKET_IFNAME`:用于多机之间使用HCCL通信时的网口名称。 +- `TP_SOCKET_IFNAME`:用于多机之间使用TP通信时的网口名称。 ### 在线推理 #### 启动服务 -vLLM-MindSpore插件可使用OpenAI的API协议,部署为在线推理。以下是在线推理的拉起流程。 +vLLM-MindSpore插件可使用OpenAI的API协议部署在线推理。以下是在线推理的拉起流程: ```bash # 启动配置参数说明 - vllm-mindspore serve --model=[模型Config/权重路径] - --quantization [权重量化来源] # 可选golden-stick/ascend分别表示量化权重来源于golden-stick或modelslim量化工具 --trust-remote-code # 使用本地下载的model文件 --max-num-seqs [最大Batch数] --max-model-len [输出输出最大长度] @@ -266,103 +180,118 @@ vllm-mindspore serve --block-size [Block Size 大小, 推荐128] --gpu-memory-utilization [显存利用率, 推荐0.9] --tensor-parallel-size [TP 并行数] + --headless # 仅从节点需要配置,表示不需要服务侧相关内容 + --data-parallel-size [DP 并行数] + --data-parallel-size-local [当前服务节点中的DP数,所有节点求和等于data-parallel-size] + --data-parallel-start-rank [当前服务节点中负责的首个DP的偏移量,当使用multiprocess启动方式时使用] + --data-parallel-address [主节点的通讯IP,当使用multiprocess启动方式时使用] + --data-parallel-rpc-port [主节点的通讯端口,当使用multiprocess启动方式时使用] + --enable-expert-parallel # 使能专家并行 + --data-parallel-backend [ray, mp] # 指定 dp 部署方式为 ray 或是 mp(即multiprocess) + --addition-config # 并行功能与额外配置 ``` -执行示例 +- 用户可以通过`--model`参数,指定模型保存的本地路径。以下分别为multiprocess与ray两种启动方式的执行示例 +- 用户可以通过`--addition-config`参数,配置并行与其他功能。 + +以下为Ray启动命令: ```bash # 主节点: -vllm-mindspore serve --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --quantization ascend --trust-remote-code --max-num-seqs=256 --max_model_len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 16 --distributed-executor-backend=ray +vllm-mindspore serve --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --enable-expert-parallel --addition-config '{"expert_parallel": 4}' --data-parallel-backend=ray ``` -张量并行场景下,`--tensor-parallel-size`参数会覆盖模型yaml文件中`parallel_config`的`model_parallel`配置。用户可以通过`--model`参数,指定模型保存的本地路径。 - -#### 发起请求 +#### 发送请求 使用如下命令发送请求。其中`prompt`字段为模型输入: ```bash -curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"model": "MindSpore-Lab/DeepSeek-R1-0528-A8W8", "prompt": "I am", "max_tokens": 20, "temperature": 0, "top_p": 1.0, "top_k": 1, "repetition_penalty": 1.0}' +curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"model": "MindSpore-Lab/DeepSeek-R1-0528-A8W8", "prompt": "I am, "max_tokens": 120, "temperature": 0}' ``` 用户需确认`"model"`字段与启动服务中`--model`一致,请求才能成功匹配到模型。 -## 混合并行推理 +## 附录 -vLLM 通过 Ray 对多个节点资源进行管理和运行。该样例对应以下并行策略场景: +### Ray安装流程 -- 数据并行(DP)为4; -- 张量并行(TP)为4; -- 专家并行(EP)为4。 +在 Ascend 上,如果使用Ray,则需要额外安装 pyACL 包来适配 Ray。且所有节点的 CANN 依赖版本需要保持一致。 -### 设置环境变量 +#### 安装 pyACL -分别在主从节点配置如下环境变量: +pyACL (Python Ascend Computing Language) 通过 CPython 封装了 AscendCL 对应的 API 接口,使用接口可以管理 Ascend AI 处理器和对应的计算资源。 -```bash -source /usr/local/Ascend/ascend-toolkit/set_env.sh +在对应环境中,获取相应版本的 Ascend-cann-nnrt 安装包后,解压出 pyACL 依赖包并单独安装,并将安装路径添加到环境变量中: -export MS_ENABLE_LCCL=off -export HCCL_OP_EXPANSION_MODE=AIV -export MS_ALLOC_CONF=enable_vmm:true -export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 -export VLLM_MS_MODEL_BACKEND=MindFormers +```shell +./Ascend-cann-nnrt_8.0.RC1_linux-aarch64.run --noexec --extract=./ +cd ./run_package +./Ascend-pyACL_8.0.RC1_linux-aarch64.run --full --install-path= +export PYTHONPATH=/CANN-/python/site-packages/:$PYTHONPATH ``` -环境变量说明: +若安装过程有权限问题,可以使用以下命令加权限: -- `MS_ENABLE_LCCL`: 关闭LCCL,使能HCCL通信。 -- `HCCL_OP_EXPANSION_MODE`: 配置通信算法的编排展开位置为Device侧的AI Vector Core计算单元。 -- `MS_ALLOC_CONF`: 设置内存策略。可参考[MindSpore官网文档](https://www.mindspore.cn/docs/zh-CN/r2.6.0/api_python/env_var_list.html)。 -- `ASCEND_RT_VISIBLE_DEVICES`: 配置每个节点可用device id。用户可使用`npu-smi info`命令进行查询。 -- `VLLM_MS_MODEL_BACKEND`:所运行的模型后端。目前vLLM-MindSpore插件所支持的模型与模型后端,可在[模型支持列表](../../../user_guide/supported_models/models_list/models_list.md)中进行查询。 +```bash +chmod -R 777 ./Ascend-pyACL_8.0.RC1_linux-aarch64.run +``` -### 在线推理 +在 Ascend 的首页中可以下载 Ascend 运行包。如, 可以下载 [8.0.RC1.beta1](https://www.hiascend.cn/developer/download/community/result?module=cann&version=8.0.RC1.beta1) 对应版本的运行包。 -#### 启动服务 +#### 多节点间集群 -`vllm-mindspore`可使用OpenAI的API协议部署在线推理。以下是在线推理的拉起流程: +多节点集群管理前,需要检查各节点的 hostname 是否各异,如果存在相同的,需要通过 `hostname ` 设置不同的 hostname。 -```bash -# 启动配置参数说明 -vllm-mindspore serve - --model=[模型Config/权重路径] - --quantization [权重量化来源] # 可选golden-stick/ascend分别表示量化权重来源于golden-stick或modelslim量化工具 - --trust-remote-code # 使用本地下载的model文件 - --max-num-seqs [最大Batch数] - --max-model-len [输出输出最大长度] - --max-num-batched-tokens [单次迭代最大支持token数, 推荐4096] - --block-size [Block Size 大小, 推荐128] - --gpu-memory-utilization [显存利用率, 推荐0.9] - --tensor-parallel-size [TP 并行数] - --headless # 仅从节点需要配置,表示不需要服务侧相关内容 - --data-parallel-size [DP 并行数] - --data-parallel-size-local [当前服务节点中的DP数,所有节点求和等于data-parallel-size] - --data-parallel-start-rank [当前服务节点中负责的首个DP的偏移量] - --data-parallel-address [主节点的通讯IP] - --data-parallel-rpc-port [主节点的通讯端口] - --enable-expert-parallel # 使能专家并行 - --additional-config '{"expert_parallel": [EP 并行数]}' -``` +1. 启动主节点 `ray start --head --port=`,启动成功后,会提示从节点的连接方式。如在 ip 为 `192.5.5.5` 的环境中,通过 `ray start --head --port=6379`,提示如下: -`data-parallel-size`及`tensor-parallel-size`指定attn及ffn-dense部分的并行策略,`expert_parallel`指定moe部分路由专家并行策略,且需满足`data-parallel-size * tensor-parallel-size`可被`expert_parallel`整除。 + ```text + Local node IP: 192.5.5.5 -用户可以通过`--model`参数,指定模型保存的本地路径。以下为执行示例: + -------------------- + Ray runtime started. + -------------------- -```bash -# 主节点: -vllm-mindspore serve --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --quantization ascend --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --data-parallel-start-rank 0 --data-parallel-address 192.10.10.10 --data-parallel-rpc-port 12370 --enable-expert-parallel --additional-config '{"expert_parallel": 4}' + Next steps + To add another node to this Ray cluster, run + ray start --address='192.5.5.5:6379' -# 从节点: -vllm-mindspore serve --headless --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --quantization ascend --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --data-parallel-start-rank 2 --data-parallel-address 192.10.10.10 --data-parallel-rpc-port 12370 --enable-expert-parallel --additional-config '{"expert_parallel": 4}' -``` + To connect to this Ray cluster: + import ray + ray.init() -#### 发送请求 + To terminate the Ray runtime, run + ray stop -使用如下命令发送请求。其中`prompt`字段为模型输入: + To view the status of the cluster, use + ray status + ``` -```bash -curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"model": "MindSpore-Lab/DeepSeek-R1-0528-A8W8", "prompt": "I am, "max_tokens": 120, "temperature": 0}' -``` +2. 从节点连接主节点 `ray start --address=:`。 -用户需确认`"model"`字段与启动服务中`--model`一致,请求才能成功匹配到模型。 +3. 通过 `ray status` 查询集群状态,显示的NPU总数为节点总合,则表示集群成功。 + + 当有两个节点,每个节点有8个NPU时,其结果如下: + + ```shell + ======== Autoscaler status: 2025-05-19 00:00:00.000000 ======== + Node status + --------------------------------------------------------------- + Active: + 1 node_efa0981305b1204810c3080c09898097099090f09ee909d0ae12545 + 1 node_184f44c4790135907ab098897c878699d89098e879f2403bc990112 + Pending: + (no pending nodes) + Recent failures: + (no failures) + + Resources + --------------------------------------------------------------- + Usage: + 0.0/384.0 CPU + 0.0/16.0 NPU + 0B/2.58TiB memory + 0B/372.56GiB object_store_memory + + Demands: + (no resource demands) + ``` diff --git a/docs/vllm_mindspore/docs/source_zh_cn/index.rst b/docs/vllm_mindspore/docs/source_zh_cn/index.rst index 921322682e81d226bf2e3a76f0b8a8a4916ac841..7347b18131c9fc4ad238c20e5305236bff6fe371 100644 --- a/docs/vllm_mindspore/docs/source_zh_cn/index.rst +++ b/docs/vllm_mindspore/docs/source_zh_cn/index.rst @@ -116,6 +116,7 @@ Apache 许可证 2.0,如 `LICENSE - 如果不配置`--enable-expert-parallel`则不使能EP,配置 `--additional-config '{"expert_parallel": 4}'`不会生效 +> - 如果配置`--enable-expert-parallel`,但不配置`--additional-config '{"expert_parallel": 4'`,则EP并行数等于TP并行数乘以DP并行数 +> - 如果配置`--enable-expert-parallel`,且配置`--additional-config '{"expert_parallel": 4'`,则EP并行数等于`4` + +### 服务启动示例 + +#### 单机示例 + +以下命令为单机八卡,启动Qwen-3 MOE的专家并行示例: + +```bash +vllm-mindspore serve --model=/path/to/Qwen3-MOE --trust-remote-code --enable-expert-parallel --addition-config '{"expert_parallel": 8} +``` + +#### 多机示例 + +多机专家并行依赖Ray进行启动。请参考[Ray多节点集群管理](#ray多节点集群管理)进行Ray环境配置。以下命令为双机四卡,Ray启动Qwen-3 MOE的专家并行示例: + +```bash +vllm-mindspore serve --model=/path/to/Qwen3-MOE --trust-remote-code --enable-expert-parallel --addition-config '{"expert_parallel": 8} --data-parallel-backend=ray +``` + +## 混合并行 + +用户可根据所使用的模型,与机器资源情况,灵活叠加调整并行策略。例如在DeepSeek-R1场景中,可以使用以下混合策略: + +- 张量并行:4 +- 数据并行:4 +- 专家并行:4 + +可根据上述介绍,分别将三种并行策略的配置叠加,在启动命令`vllm-mindspore serve`中使能。多机混合并行依赖Ray进行启动。请参考[Ray多节点集群管理](#ray多节点集群管理)进行Ray环境配置。其叠加后混合并行的Ray启动命令如下 + +```bash +vllm-mindspore serve --model="/path/to/DeepSeek-R1" --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --enable-expert-parallel --addition-config '{"expert_parallel": 4}' --data-parallel-backend=ray +``` + +## 附录 + +### Ray多节点集群管理 + +在 Ascend 上,有multiprocess和Ray两种启动方式。由于在多机场景中,如果使用Ray,则需要额外安装 pyACL 包来适配 Ray。且所有节点的 CANN 依赖版本需要保持一致。 + +#### 安装 pyACL + +pyACL (Python Ascend Computing Language) 通过 CPython 封装了 AscendCL 对应的 API 接口,使用接口可以管理 Ascend AI 处理器和对应的计算资源。 + +在对应环境中,获取相应版本的 Ascend-cann-nnrt 安装包后,解压出 pyACL 依赖包并单独安装,并将安装路径添加到环境变量中: + +```shell +./Ascend-cann-nnrt_8.0.RC1_linux-aarch64.run --noexec --extract=./ +cd ./run_package +./Ascend-pyACL_8.0.RC1_linux-aarch64.run --full --install-path= +export PYTHONPATH=/CANN-/python/site-packages/:$PYTHONPATH +``` + +若安装过程有权限问题,可以使用以下命令加权限: + +```bash +chmod -R 777 ./Ascend-pyACL_8.0.RC1_linux-aarch64.run +``` + +在 Ascend 的首页中可以下载 Ascend 运行包。如, 可以下载 [8.0.RC1.beta1](https://www.hiascend.cn/developer/download/community/result?module=cann&version=8.0.RC1.beta1) 对应版本的运行包。 + +#### 多节点间集群 + +多节点集群管理前,需要检查各节点的 hostname 是否各异,如果存在相同的,需要通过 `hostname ` 设置不同的 hostname。 + +1. 启动主节点 `ray start --head --port=`,启动成功后,会提示从节点的连接方式。如在 ip 为 `192.5.5.5` 的环境中,通过 `ray start --head --port=6379`,提示如下: + + ```text + Local node IP: 192.5.5.5 + + ------------------- + Ray runtime started. + -------------------- + + Next steps + To add another node to this Ray cluster, run + ray start --address='192.5.5.5:6379' + + To connect to this Ray cluster: + import ray + ray.init() + + To terminate the Ray runtime, run + ray stop + + To view the status of the cluster, use + ray status + ``` + +2. 从节点连接主节点 `ray start --address=:`。 + +3. 通过 `ray status` 查询集群状态,显示的NPU总数为节点总合,则表示集群成功。 + + 当有两个节点,每个节点有8个NPU时,其结果如下: + + ```shell + ======== Autoscaler status: 2025-05-19 00:00:00.000000 ======== + Node status + --------------------------------------------------------------- + Active: + 1 node_efa0981305b1204810c3080c09898097099090f09ee909d0ae12545 + 1 node_184f44c4790135907ab098897c878699d89098e879f2403bc990112 + Pending: + (no pending nodes) + Recent failures: + (no failures) + + Resources + --------------------------------------------------------------- + Usage: + 0.0/384.0 CPU + 0.0/16.0 NPU + 0B/2.58TiB memory + 0B/372.56GiB object_store_memory + + Demands: + (no resource demands) + ``` + +### 在线推理 + +#### 设置环境变量 + +分别在主从节点配置如下环境变量: + +```bash +source /usr/local/Ascend/ascend-toolkit/set_env.sh + +export MS_ENABLE_LCCL=off +export HCCL_OP_EXPANSION_MODE=AIV +export MS_ALLOC_CONF=enable_vmm:true +export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 +export VLLM_MS_MODEL_BACKEND=MindFormers +``` + +环境变量说明: + +- `MS_ENABLE_LCCL`: 关闭LCCL,使能HCCL通信。 +- `HCCL_OP_EXPANSION_MODE`: 配置通信算法的编排展开位置为Device侧的AI Vector Core计算单元。 +- `MS_ALLOC_CONF`: 设置内存策略。可参考[MindSpore官网文档](https://www.mindspore.cn/docs/zh-CN/r2.6.0/api_python/env_var_list.html)。 +- `ASCEND_RT_VISIBLE_DEVICES`: 配置每个节点可用device id。用户可使用`npu-smi info`命令进行查询。 +- `VLLM_MS_MODEL_BACKEND`:所运行的模型后端。目前vLLM-MindSpore插件所支持的模型与模型后端,可在[模型支持列表]。(../../../user_guide/supported_models/models_list/models_list.md)中进行查询。 + +**如用户需要使用ray方式部署,需要额外设置以下环境变量** + +```bash +export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python +export GLOO_SOCKET_IFNAME=enp189s0f0 +export HCCL_SOCKET_IFNAME=enp189s0f0 +export TP_SOCKET_IFNAME=enp189s0f0 +``` + +#### 启动服务 + +vLLM-MindSpore插件可使用OpenAI的API协议部署在线推理。以下是在线推理的拉起流程: + +```bash +# 启动配置参数说明 +vllm-mindspore serve + --model=[模型Config/权重路径] + --trust-remote-code # 使用本地下载的model文件 + --max-num-seqs [最大Batch数] + --max-model-len [输出输出最大长度] + --max-num-batched-tokens [单次迭代最大支持token数, 推荐4096] + --block-size [Block Size 大小, 推荐128] + --gpu-memory-utilization [显存利用率, 推荐0.9] + --tensor-parallel-size [TP 并行数] + --headless # 仅从节点需要配置,表示不需要服务侧相关内容 + --data-parallel-size [DP 并行数] + --data-parallel-size-local [当前服务节点中的DP数,所有节点求和等于data-parallel-size] + --data-parallel-start-rank [当前服务节点中负责的首个DP的偏移量,当使用multiprocess启动方式时使用] + --data-parallel-address [主节点的通讯IP,当使用multiprocess启动方式时使用] + --data-parallel-rpc-port [主节点的通讯端口,当使用multiprocess启动方式时使用] + --enable-expert-parallel # 使能专家并行 + --data-parallel-backend [ray, mp] # 指定 dp 部署方式为 ray 或是 mp(即multiprocess) + --addition-config # 并行功能与额外配置 +``` + +- 用户可以通过`--model`参数,指定模型保存的本地路径。 + +- 用户可以通过`--addition-config`参数,配置并行与其他功能。其中并行可进行如下配置,对应的是DP4-EP4-TP4场景 + + ```bash + --addition-config '{"data_parallel": 4, "model_parallel": 4, "expert_parallel": 4}' + ``` + +以下分别为multiprocess与ray两种启动方式的执行示例 + +**multiprocess启动方式** + +```bash +# 主节点: +vllm-mindspore serve --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --data-parallel-start-rank 0 --data-parallel-address 192.10.10.10 --data-parallel-rpc-port 12370 --enable-expert-parallel --addition-config '{"data_parallel": 4, "model_parallel": 4, "expert_parallel": 4}' + +# 从节点: +vllm-mindspore serve --headless --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --data-parallel-start-rank 2 --data-parallel-address 192.10.10.10 --data-parallel-rpc-port 12370 --enable-expert-parallel --addition-config '{"data_parallel": 4, "model_parallel": 4, "expert_parallel": 4}' +``` + +**ray启动方式** + +```bash +# 主节点: +vllm-mindspore serve --model="MindSpore-Lab/DeepSeek-R1-0528-A8W8" --trust-remote-code --max-num-seqs=256 --max-model-len=32768 --max-num-batched-tokens=4096 --block-size=128 --gpu-memory-utilization=0.9 --tensor-parallel-size 4 --data-parallel-size 4 --data-parallel-size-local 2 --enable-expert-parallel --addition-config '{"data_parallel": 4, "model_parallel": 4, "expert_parallel": 4}' --data-parallel-backend=ray +``` + +#### 发送请求 + +使用如下命令发送请求。其中`prompt`字段为模型输入: + +```bash +curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"model": "MindSpore-Lab/DeepSeek-R1-0528-A8W8", "prompt": "I am, "max_tokens": 120, "temperature": 0}' +``` + +用户需确认`"model"`字段与启动服务中`--model`一致,请求才能成功匹配到模型。