已合并
Revert "update vllm" #896
Revert "update vllm" #896
已合并
fh_188创建于 1月15日
11 个文件变更+46-142
Mdocs/install_guide.md+13-35
@@ -1,16 +1,16 @@
1# 安装指南1# 安装指南
2 2 
3-## 版本配套表3+## 版本配套表
4 4 
5MindSpeed RL支持Atlas 800T A2等昇腾训练硬件形态。软件版本配套表如下:5MindSpeed RL支持Atlas 800T A2等昇腾训练硬件形态。软件版本配套表如下:
6 6 
7-| MindSpeed RL版本 | Megatron版本 | PyTorch版本 | torch_npu版本 | CANN版本 | Python版本 |7+| MindSpeed RL版本 | Megatron版本 | PyTorch版本 | torch_npu版本 | CANN版本 | Python版本 |
8-| ---------------- | ------------ | ----------- | ------------- | -------- | ---------- |8+| ---------------- | ------------ |-----------|-------------|---------| ---------- |
9-| master(主线) | Core 0.12.0 | 2.7.1 | 2.7.1 | 8.5.0 | Python3.10 |9+| master(主线) | Core 0.12.0 | 2.7.1 | 2.7.1 | 8.5.0 | Python3.10 |
10-| 2.3.0(商分) | Core 0.12.0 | 2.5.1 | 2.5.1 | 8.5.0 | Python3.10 |10+| 2.3.0(商分) | Core 0.12.0 | 2.5.1 | 2.5.1 | 8.5.0 | Python3.10 |
11-| 2.2.0(商分) | Core 0.8.0 | 2.5.1 | 2.5.1 | 8.3.RC1 | Python3.10 |11+| 2.2.0(商分) | Core 0.8.0 | 2.5.1 | 2.5.1 | 8.3.RC1 | Python3.10 |
12-| 2.1.0(商分) | Core 0.8.0 | 2.5.1 | 2.5.1 | 8.2.RC1 | Python3.10 |12+| 2.1.0(商分) | Core 0.8.0 | 2.5.1 | 2.5.1 | 8.2.RC1 | Python3.10 |
13-| 2.0.0(预览) | Core 0.8.0 | 2.5.1 | 2.5.1 | 8.1.RC1 | Python3.10 |13+| 2.0.0(预览) | Core 0.8.0 | 2.5.1 | 2.5.1 | 8.1.RC1 | Python3.10 |
14 14 
15[昇腾辅助软件](https://gitcode.com/Ascend/pytorch/tree/master#%E6%98%87%E8%85%BE%E8%BE%85%E5%8A%A9%E8%BD%AF%E4%BB%B6)中有更多关于PyTorch和CANN的版本信息。15[昇腾辅助软件](https://gitcode.com/Ascend/pytorch/tree/master#%E6%98%87%E8%85%BE%E8%BE%85%E5%8A%A9%E8%BD%AF%E4%BB%B6)中有更多关于PyTorch和CANN的版本信息。
16 16 
@@ -77,9 +77,7 @@ bash Ascend-hdk-*-npu-driver_*.run --full
77```77```
78 78 
79### CANN安装79### CANN安装
80- 
81(注:下载参考:[商用稳定版CANN](https://www.hiascend.com/developer/download/commercial/result?module=cann)和[8.5.0 社区体验版CANN](https://www.hiascend.com/developer/download/community/result?module=cann))80(注:下载参考:[商用稳定版CANN](https://www.hiascend.com/developer/download/commercial/result?module=cann)和[8.5.0 社区体验版CANN](https://www.hiascend.com/developer/download/community/result?module=cann))
82- 
83```shell81```shell
84bash Ascend-cann-toolkit_*_linux-aarch64.run --install82bash Ascend-cann-toolkit_*_linux-aarch64.run --install
85bash Ascend-cann-A3-ops_*_linux-aarch64.run --install83bash Ascend-cann-A3-ops_*_linux-aarch64.run --install
@@ -89,27 +87,23 @@ source /usr/local/Ascend/nnal/atb/set_env.sh
89```87```
90 88 
91### vllm及相关依赖安装:89### vllm及相关依赖安装:
92- 
93(注:环境中需要安装git,因为vllm的安装过程依赖git)90(注:环境中需要安装git,因为vllm的安装过程依赖git)
94- 
95```shell91```shell
96# pydantic高版本包会产生冲突,指定版本安装92# pydantic高版本包会产生冲突,指定版本安装
97pip install pydantic==2.12.093pip install pydantic==2.12.0
98-git clone https://github.com/vllm-project/vllm.git94+git clone -b releases/v0.11.0 https://github.com/vllm-project/vllm.git
99cd vllm95cd vllm
100-git checkout ad32e3e19ccf0526cb6744a5fed09a138a5fb2f996+git checkout b8b302c
101VLLM_TARGET_DEVICE=empty pip install .97VLLM_TARGET_DEVICE=empty pip install .
102cd ..98cd ..
103```99```
104 100 
105### vllm_ascend安装101### vllm_ascend安装
106- 
107(注:若机器为x86架构,需要先进行[PyTorch框架安装](#PyTorch框架安装)中的torch和torch_npu安装,安装vllm_ascend时,注释requirements.txt和pyproject.toml中torch和torch_npu的安装)102(注:若机器为x86架构,需要先进行[PyTorch框架安装](#PyTorch框架安装)中的torch和torch_npu安装,安装vllm_ascend时,注释requirements.txt和pyproject.toml中torch和torch_npu的安装)
108- 
109```shell103```shell
110-git clone https://github.com/vllm-project/vllm-ascend.git104+git clone -b v0.11.0-dev https://github.com/vllm-project/vllm-ascend.git
111cd vllm-ascend105cd vllm-ascend
112-git checkout 0983c5510aa49c7310b79db72657d8a0f92918ec106+git checkout 1b16c01
113pip install -r requirements.txt107pip install -r requirements.txt
114export COMPILE_CUSTOM_KERNELS=1108export COMPILE_CUSTOM_KERNELS=1
115python setup.py install109python setup.py install
@@ -120,7 +114,6 @@ python setup.py install
120```shell114```shell
121pip install ray==2.42.1115pip install ray==2.42.1
122```116```
123- 
124```shell117```shell
125# ray 生成的日志文件夹权限修改118# ray 生成的日志文件夹权限修改
126# 此处针对 ray==2.42.1 实现119# 此处针对 ray==2.42.1 实现
@@ -130,10 +123,8 @@ sed -i 's/os.chmod(\(.*\), 0o0777)/os.chmod(\1, 0o0750)/g' "$UTILS_PATH"
130```123```
131 124 
132### PyTorch框架安装125### PyTorch框架安装
133- 
134(注:[PyTorch框架和torch_npu插件安装教程](https://www.hiascend.com/document/detail/zh/Pytorch/710/configandinstg/instg/insg_0004.html))126(注:[PyTorch框架和torch_npu插件安装教程](https://www.hiascend.com/document/detail/zh/Pytorch/710/configandinstg/instg/insg_0004.html))
135可从[PyTorch-Ascend官方代码仓](https://gitcode.com/Ascend/pytorch/releases)获取PyTorch各个版本对应的torch_npu的whl包,也可以通过本仓库对应版本的[vllm-ascend官方代码仓的requirements](https://github.com/vllm-project/vllm-ascend/blob/v0.11.0-dev/requirements.txt)中的安装方式安装torch和torch_npu。127可从[PyTorch-Ascend官方代码仓](https://gitcode.com/Ascend/pytorch/releases)获取PyTorch各个版本对应的torch_npu的whl包,也可以通过本仓库对应版本的[vllm-ascend官方代码仓的requirements](https://github.com/vllm-project/vllm-ascend/blob/v0.11.0-dev/requirements.txt)中的安装方式安装torch和torch_npu。
136- 
137```shell128```shell
138# 安装torch和torch_npu129# 安装torch和torch_npu
139pip install torch-2.7.1-cp310-cp310-*.whl130pip install torch-2.7.1-cp310-cp310-*.whl
@@ -144,19 +135,13 @@ pip install apex-0.1.dev*.whl
144```135```
145 136 
146### 高性能内存库 jemalloc 安装137### 高性能内存库 jemalloc 安装
147- 
148为了确保 Ray 进程能够正常回收内存,需要安装并使能 jemalloc 库进行内存管理。138为了确保 Ray 进程能够正常回收内存,需要安装并使能 jemalloc 库进行内存管理。
149- 
150#### Ubuntu 操作系统139#### Ubuntu 操作系统
151- 
152通过操作系统源安装jemalloc(注意: 要求ubuntu版本>=20.04):140通过操作系统源安装jemalloc(注意: 要求ubuntu版本>=20.04):
153- 
154```shell141```shell
155sudo apt install libjemalloc2142sudo apt install libjemalloc2
156```143```
157- 
158在启动任务前执行如下命令通过环境变量导入jemalloc,需先通过 **find /usr -name libjemalloc.so.2** 确认文件是否存在 :144在启动任务前执行如下命令通过环境变量导入jemalloc,需先通过 **find /usr -name libjemalloc.so.2** 确认文件是否存在 :
159- 
160```shell145```shell
161# arm64架构146# arm64架构
162export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2147export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2
@@ -167,14 +152,11 @@ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
167#### OpenEuler 操作系统152#### OpenEuler 操作系统
168 153 
169执行如下命令重操作系统源安装jemalloc154执行如下命令重操作系统源安装jemalloc
170- 
171```shell155```shell
172yum install jemalloc156yum install jemalloc
173```157```
174- 
175如果上述方法无法正常安装,可以通过源码编译安装158如果上述方法无法正常安装,可以通过源码编译安装
176前往jemalloc官网下载最新稳定版本,官网地址:https://github.com/jemalloc/jemalloc/releases/159前往jemalloc官网下载最新稳定版本,官网地址:https://github.com/jemalloc/jemalloc/releases/
177- 
178```shell160```shell
179tar -xvf jemalloc-{version}.tar.bz2161tar -xvf jemalloc-{version}.tar.bz2
180cd jemalloc-{version}162cd jemalloc-{version}
@@ -182,9 +164,7 @@ cd jemalloc-{version}
182make164make
183make install165make install
184```166```
185- 
186在启动任务前执行如下命令通过环境变量导入jemalloc:167在启动任务前执行如下命令通过环境变量导入jemalloc:
187- 
188```shell168```shell
189#根据实际安装路径设置环境变量,例如安装路径为:/usr/local/lib/libjemalloc.so.2,可通过以下命令来设置环境变量(可通过 find /usr -name libjemalloc.so.2 确认文件是否存在)169#根据实际安装路径设置环境变量,例如安装路径为:/usr/local/lib/libjemalloc.so.2,可通过以下命令来设置环境变量(可通过 find /usr -name libjemalloc.so.2 确认文件是否存在)
190export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2170export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2
@@ -193,7 +173,6 @@ export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2
193> 如以上安装过程出现错误,可以通过提出issue获得更多解决建议。173> 如以上安装过程出现错误,可以通过提出issue获得更多解决建议。
194 174 
195## 准备源码175## 准备源码
196- 
197```shell176```shell
198git clone https://gitcode.com/Ascend/MindSpeed-RL.git177git clone https://gitcode.com/Ascend/MindSpeed-RL.git
199 178 
@@ -223,7 +202,6 @@ pip install antlr4-python3-runtime==4.9.3 --no-deps
223```202```
224 203 
225## FAQ204## FAQ
226- 
227Q:安装过程中出现的软件依赖冲突,是否会影响正常运行?205Q:安装过程中出现的软件依赖冲突,是否会影响正常运行?
228 206 
229-A:建议软件安装顺序严格按照安装指南从上到下进行,此时遇到依赖冲突不会影响正常运行207+A:建议软件安装顺序严格按照安装指南从上到下进行,此时遇到依赖冲突不会影响正常运行
Mmindspeed_rl/config_cls/generate_config.py+0-8
@@ -21,8 +21,6 @@ class GenerateConfig(BaseConfig):
21 infer_tensor_parallel_size: Tensor parallel size during inference. Default is 8.21 infer_tensor_parallel_size: Tensor parallel size during inference. Default is 8.
22 infer_pipeline_parallel_size: Pipeline parallel size during inference. Default is 1.22 infer_pipeline_parallel_size: Pipeline parallel size during inference. Default is 1.
23 infer_expert_parallel_size: Expert parallel size during inference. Default is 1.23 infer_expert_parallel_size: Expert parallel size during inference. Default is 1.
24- infer_prefill_context_parallel_size: Prefill context parallel size during inference. Default is 1.
25- infer_decode_context_parallel_size: Decode context parallel size during inference. Default is 1.
26 24 
27 max_num_seqs: Maximum number of sequences to process simultaneously. Default is 256.25 max_num_seqs: Maximum number of sequences to process simultaneously. Default is 256.
28 max_model_len: Maximum model length (in tokens). Default is 2048.26 max_model_len: Maximum model length (in tokens). Default is 2048.
@@ -75,12 +73,6 @@ class GenerateConfig(BaseConfig):
75 # 推理时的流水线并行大小,默认为 173 # 推理时的流水线并行大小,默认为 1
76 self.infer_pipeline_parallel_size = 174 self.infer_pipeline_parallel_size = 1
77 75 
78- # 推理时的Prefill上下文并行并行大小,默认为 1
79- self.infer_prefill_context_parallel_size = 1
80-
81- # 推理时的Decode上下文并行并行大小,默认为 1
82- self.infer_decode_context_parallel_size = 1
83-
84 # 推理时的专家并行大小,默认为 176 # 推理时的专家并行大小,默认为 1
85 self.infer_expert_parallel_size = 177 self.infer_expert_parallel_size = 1
86 78 
Mmindspeed_rl/config_cls/validate_config.py+0-8
@@ -169,14 +169,6 @@ def validate_rl_args(
169 if generate_config.infer_pipeline_parallel_size > 1:169 if generate_config.infer_pipeline_parallel_size > 1:
170 raise ValueError(170 raise ValueError(
171 "pipeline_parallel for vllm is not supported yet ! ")171 "pipeline_parallel for vllm is not supported yet ! ")
172-
173- if generate_config.infer_prefill_context_parallel_size > 1:
174- raise ValueError(
175- "prefill_context_parallel for vllm is not supported yet ! ")
176- 
177- if generate_config.infer_decode_context_parallel_size > 1:
178- raise ValueError(
179- "decode_context_parallel for vllm is not supported yet ! ")
180 172 
181 if ref_config:173 if ref_config:
182 ref_data_parallel_size = rl_config.reference_resource.num_npus // (174 ref_data_parallel_size = rl_config.reference_resource.num_npus // (
Mmindspeed_rl/models/base/base_inference_engine.py+0-6
@@ -21,8 +21,6 @@ class BaseInferEngine(ABC):
21 infer_tensor_parallel_size: int = 8,21 infer_tensor_parallel_size: int = 8,
22 infer_pipeline_parallel_size: int = 1,22 infer_pipeline_parallel_size: int = 1,
23 infer_expert_parallel_size: int = 1,23 infer_expert_parallel_size: int = 1,
24- infer_prefill_context_parallel_size: int = 1,
25- infer_decode_context_parallel_size: int = 1,
26 max_num_seqs: int = 1, # Default value set to 124 max_num_seqs: int = 1, # Default value set to 1
27 max_model_len: int = 2048, # Default value set to 204825 max_model_len: int = 2048, # Default value set to 2048
28 dtype: str = "bfloat16", # Default value set to "bfloat16"26 dtype: str = "bfloat16", # Default value set to "bfloat16"
@@ -42,8 +40,6 @@ class BaseInferEngine(ABC):
42 infer_tensor_parallel_size (int): Tensor parallel size during inference.40 infer_tensor_parallel_size (int): Tensor parallel size during inference.
43 infer_pipeline_parallel_size (int): Pipeline parallel size during inference.41 infer_pipeline_parallel_size (int): Pipeline parallel size during inference.
44 infer_expert_parallel_size (int): Expert parallel size during inference.42 infer_expert_parallel_size (int): Expert parallel size during inference.
45- infer_prefill_context_parallel_size (int): Prefill context parallel size during inference.
46- infer_decode_context_parallel_size (int): Decode context parallel size during inference.
47 max_num_seqs (int): Maximum number of sequences to process simultaneously. Default is 1.43 max_num_seqs (int): Maximum number of sequences to process simultaneously. Default is 1.
48 max_model_len (int): Maximum model length (in tokens). Default is 2048.44 max_model_len (int): Maximum model length (in tokens). Default is 2048.
49 dtype (str): Data type for model weights. Default is "bfloat16".45 dtype (str): Data type for model weights. Default is "bfloat16".
@@ -61,8 +57,6 @@ class BaseInferEngine(ABC):
61 self.infer_tensor_parallel_size = infer_tensor_parallel_size57 self.infer_tensor_parallel_size = infer_tensor_parallel_size
62 self.infer_pipeline_parallel_size = infer_pipeline_parallel_size58 self.infer_pipeline_parallel_size = infer_pipeline_parallel_size
63 self.infer_expert_parallel_size = infer_expert_parallel_size59 self.infer_expert_parallel_size = infer_expert_parallel_size
64- self.infer_prefill_context_parallel_size = infer_prefill_context_parallel_size
65- self.infer_decode_context_parallel_size = infer_decode_context_parallel_size
66 self.max_num_seqs = max_num_seqs60 self.max_num_seqs = max_num_seqs
67 self.max_model_len = max_model_len61 self.max_model_len = max_model_len
68 self.dtype = dtype62 self.dtype = dtype
Mmindspeed_rl/models/rollout/vllm_adapter/engine_core.py+8-1
@@ -92,7 +92,14 @@ def initialize_kv_cache(self, kv_cache_config: KVCacheConfig) -> None:
92 92 
93 self.may_reinitialize_input_batch(kv_cache_config)93 self.may_reinitialize_input_batch(kv_cache_config)
94 94 
95- kv_caches = self.initialize_kv_cache_tensors(kv_cache_config)95+ if self.use_sparse:
96+ kv_caches = self.initialize_kv_cache_tensors_deepseek_sfa(
97+ kv_cache_config)
98+ elif self.model_config.is_deepseek_mla:
99+ kv_caches = self.initialize_kv_cache_tensors_deepseek_mla(
100+ kv_cache_config)
101+ else:
102+ kv_caches = self.initialize_kv_cache_tensors(kv_cache_config)
96 if has_kv_transfer_group():103 if has_kv_transfer_group():
97 get_kv_transfer_group().register_kv_caches(kv_caches)104 get_kv_transfer_group().register_kv_caches(kv_caches)
98 105 
Mmindspeed_rl/models/rollout/vllm_adapter/fused_moe.py+11-11
@@ -24,13 +24,13 @@ from vllm.model_executor.layers.fused_moe.layer import (FusedMoE, UnquantizedFus
24 24 
25import vllm_ascend.envs as envs_ascend25import vllm_ascend.envs as envs_ascend
26from vllm_ascend.ascend_config import get_ascend_config26from vllm_ascend.ascend_config import get_ascend_config
27-from vllm_ascend.ascend_forward_context import MoECommType27+from vllm_ascend.ascend_forward_context import FusedMoEState
28from vllm_ascend.distributed.parallel_state import get_mc2_group28from vllm_ascend.distributed.parallel_state import get_mc2_group
29from vllm_ascend.ops.expert_load_balancer import ExpertLoadBalancer29from vllm_ascend.ops.expert_load_balancer import ExpertLoadBalancer
30-from vllm_ascend.ops.fused_moe.experts_selector import select_experts30+from vllm_ascend.ops.moe.experts_selector import select_experts
31-from vllm_ascend.ops.fused_moe.fused_moe import AscendFusedMoE31+from vllm_ascend.ops.common_fused_moe import AscendFusedMoE
32-from vllm_ascend.utils import (AscendDeviceType, dispose_tensor, get_ascend_device_type, npu_stream_switch)32+from vllm_ascend.utils import (AscendSocVersion, dispose_tensor, get_ascend_soc_version, npu_stream_switch)
33- 33+from vllm_ascend.torchair.utils import npu_wait_tensor, super_kernel
34import vllm_ascend34import vllm_ascend
35 35 
36 36 
@@ -85,11 +85,11 @@ def fused_experts_with_mc2(
85 ep_world_size)85 ep_world_size)
86 86 
87 # Currently, when in A3 or in torchair graph, we need to pass in some extra param into dispatch & combine87 # Currently, when in A3 or in torchair graph, we need to pass in some extra param into dispatch & combine
88- need_extra_args = get_ascend_device_type(88+ need_extra_args = get_ascend_soc_version(
89- ) == AscendDeviceType._910_93 or is_torchair89+ ) == AscendSocVersion.A3 or is_torchair
90 90 
91 # Currently, when in A3, we need to pass in some extra param into dispatch & combine91 # Currently, when in A3, we need to pass in some extra param into dispatch & combine
92- a3_need_extra_args = get_ascend_device_type() == AscendDeviceType._910_9392+ a3_need_extra_args = get_ascend_soc_version() == AscendSocVersion.A3
93 93 
94 enable_dispatch_v2 = hasattr(torch_npu, "npu_moe_distribute_dispatch_v2")94 enable_dispatch_v2 = hasattr(torch_npu, "npu_moe_distribute_dispatch_v2")
95 95 
@@ -137,10 +137,10 @@ def fused_experts_with_mc2(
137 137 
138 if shared_experts is not None:138 if shared_experts is not None:
139 with npu_stream_switch("moe_secondary", 0):139 with npu_stream_switch("moe_secondary", 0):
140- torch.npu.current_stream().synchronize()140+ npu_wait_tensor(hidden_states_for_share, topk_weights)
141 shared_gate_up, _ = shared_experts.gate_up_proj(141 shared_gate_up, _ = shared_experts.gate_up_proj(
142 hidden_states_for_share)142 hidden_states_for_share)
143- torch.npu.current_stream().synchronize()143+ npu_wait_tensor(shared_gate_up, expand_x)
144 shared_act = shared_experts.act_fn(shared_gate_up)144 shared_act = shared_experts.act_fn(shared_gate_up)
145 145 
146 w1 = w1.transpose(1, 2)146 w1 = w1.transpose(1, 2)
@@ -220,7 +220,7 @@ def fused_experts_with_mc2(
220 return hidden_states, expert_token_nums, group_list_type220 return hidden_states, expert_token_nums, group_list_type
221 else:221 else:
222 with npu_stream_switch("moe_secondary", 0):222 with npu_stream_switch("moe_secondary", 0):
223- torch.npu.current_stream().synchronize()223+ npu_wait_tensor(shared_act, down_out_list)
224 shared_hidden_states, _ = shared_experts.down_proj(shared_act)224 shared_hidden_states, _ = shared_experts.down_proj(shared_act)
225 return hidden_states, shared_hidden_states, expert_token_nums, group_list_type225 return hidden_states, shared_hidden_states, expert_token_nums, group_list_type
226 226 
Mmindspeed_rl/models/rollout/vllm_adapter/vllm_parallel_state.py+2-47
@@ -43,10 +43,6 @@ _EP = None
43_MC2 = None43_MC2 = None
44# Data model parallel group that the current rank belongs to.44# Data model parallel group that the current rank belongs to.
45_DP = None45_DP = None
46-# Prefill context model parallel group that the current rank belongs to.
47-_PCP = None
48-# Decode context model parallel group that the current rank belongs to.
49-_DCP = None
50 46 
51# Tensor model parallel group47# Tensor model parallel group
52_TP_GROUP_RANKS = None48_TP_GROUP_RANKS = None
@@ -68,8 +64,6 @@ def initialize_parallel_state(
68 train_expert_model_parallel_size: int = 1,64 train_expert_model_parallel_size: int = 1,
69 infer_expert_model_parallel_size: int = 1,65 infer_expert_model_parallel_size: int = 1,
70 train_context_model_parallel_size: int = 1,66 train_context_model_parallel_size: int = 1,
71- infer_prefill_context_model_parallel_size: int = 1,
72- infer_decode_context_model_parallel_size: int = 1,
73):67):
74 os.environ["TORCH_NCCL_AVOID_RECORD_STREAMS"] = "1"68 os.environ["TORCH_NCCL_AVOID_RECORD_STREAMS"] = "1"
75 69 
@@ -93,9 +87,7 @@ def initialize_parallel_state(
93 infer_expert_tensor_parallel_size=infer_expert_tensor_parallel_size,87 infer_expert_tensor_parallel_size=infer_expert_tensor_parallel_size,
94 train_expert_model_parallel_size=train_expert_model_parallel_size,88 train_expert_model_parallel_size=train_expert_model_parallel_size,
95 infer_expert_model_parallel_size=infer_expert_model_parallel_size,89 infer_expert_model_parallel_size=infer_expert_model_parallel_size,
96- train_context_model_parallel_size=train_context_model_parallel_size,90+ train_context_model_parallel_size=train_context_model_parallel_size
97- infer_prefill_context_model_parallel_size=infer_prefill_context_model_parallel_size,
98- infer_decode_context_model_parallel_size=infer_decode_context_model_parallel_size
99 )91 )
100 else:92 else:
101 initialize_model_parallel(infer_tensor_model_parallel_size, infer_pipeline_model_parallel_size, backend)93 initialize_model_parallel(infer_tensor_model_parallel_size, infer_pipeline_model_parallel_size, backend)
@@ -110,8 +102,6 @@ def initialize_model_parallel_for_vllm(
110 train_expert_model_parallel_size: int = 1,102 train_expert_model_parallel_size: int = 1,
111 infer_expert_model_parallel_size: int = 1,103 infer_expert_model_parallel_size: int = 1,
112 train_context_model_parallel_size: int = 1,104 train_context_model_parallel_size: int = 1,
113- infer_prefill_context_model_parallel_size: int = 1,
114- infer_decode_context_model_parallel_size: int = 1,
115 rebulid_EP_group: bool = False105 rebulid_EP_group: bool = False
116) -> None:106) -> None:
117 107 
@@ -127,7 +117,7 @@ def initialize_model_parallel_for_vllm(
127 raise ValueError("tensor model parallel group is already initialized")117 raise ValueError("tensor model parallel group is already initialized")
128 118 
129 global _TP119 global _TP
130- 120+ 
131 world_size: int = torch.distributed.get_world_size()121 world_size: int = torch.distributed.get_world_size()
132 122 
133 backend = torch.distributed.get_backend()123 backend = torch.distributed.get_backend()
@@ -207,41 +197,7 @@ def initialize_model_parallel_for_vllm(
207 backend=backend,197 backend=backend,
208 use_message_queue_broadcaster=True,198 use_message_queue_broadcaster=True,
209 )199 )
210- 
211 ps._TP = _TP200 ps._TP = _TP
212- 
213- global _PCP
214- pcp_group_ranks = []
215- num_pcp_model_parallel_groups: int = world_size // infer_prefill_context_model_parallel_size
216- for i in range(num_pcp_model_parallel_groups):
217- ranks = list(range(i, world_size, num_pcp_model_parallel_groups))
218- pcp_group_ranks.append(ranks)
219- logger.info(f"PCP rank: {pcp_group_ranks}")
220- _PCP = init_model_parallel_group(
221- group_ranks=pcp_group_ranks,
222- local_rank=get_world_group().local_rank,
223- backend=backend,
224- use_message_queue_broadcaster=True,
225- )
226- ps._PCP = _PCP
227- 
228- global _DCP
229- dcp_group_ranks = []
230- num_dcp_model_parallel_groups: int = world_size // infer_decode_context_model_parallel_size
231- for i in range(num_dcp_model_parallel_groups):
232- ranks = list(range(i, world_size, num_dcp_model_parallel_groups))
233- dcp_group_ranks.append(ranks)
234- logger.info(f"DCP rank: {dcp_group_ranks}")
235- 
236- _DCP = init_model_parallel_group(
237- group_ranks=dcp_group_ranks,
238- local_rank=get_world_group().local_rank,
239- backend=backend,
240- use_message_queue_broadcaster=True,
241- )
242- ps._DCP = _DCP
243- 
244- 
245 num_pipeline_model_parallel_groups: int = world_size // infer_pipeline_model_parallel_size201 num_pipeline_model_parallel_groups: int = world_size // infer_pipeline_model_parallel_size
246 global _PP202 global _PP
247 if _PP is not None:203 if _PP is not None:
@@ -340,7 +296,6 @@ def initialize_model_parallel_for_vllm(
340 backend,296 backend,
341 group_name="dp")297 group_name="dp")
342 298 
343- 
344 os.environ["VLLM_DP_RANK"] = str(ps._DP.rank_in_group)299 os.environ["VLLM_DP_RANK"] = str(ps._DP.rank_in_group)
345 envs.VLLM_DP_RANK = int(os.environ["VLLM_DP_RANK"])300 envs.VLLM_DP_RANK = int(os.environ["VLLM_DP_RANK"])
346 ip_list = get_cluster_info()301 ip_list = get_cluster_info()
Mmindspeed_rl/models/rollout/vllm_engine.py+3-11
@@ -40,8 +40,6 @@ class VLLMInferEngine(BaseInferEngine):
40 infer_tensor_parallel_size: int,40 infer_tensor_parallel_size: int,
41 infer_pipeline_parallel_size: int,41 infer_pipeline_parallel_size: int,
42 infer_expert_parallel_size: int,42 infer_expert_parallel_size: int,
43- infer_prefill_context_parallel_size: int,
44- infer_decode_context_parallel_size: int,
45 sampling_config: dict,43 sampling_config: dict,
46 prompt_type: str = None,44 prompt_type: str = None,
47 prompt_type_path: str = None,45 prompt_type_path: str = None,
@@ -106,8 +104,6 @@ class VLLMInferEngine(BaseInferEngine):
106 gpu_memory_utilization=gpu_memory_utilization,104 gpu_memory_utilization=gpu_memory_utilization,
107 trust_remote_code=trust_remote_code,105 trust_remote_code=trust_remote_code,
108 enable_expert_parallel=enable_expert_parallel,106 enable_expert_parallel=enable_expert_parallel,
109- infer_prefill_context_parallel_size=infer_prefill_context_parallel_size,
110- infer_decode_context_parallel_size=infer_decode_context_parallel_size
111 )107 )
112 # Additional initialization logic for VLLMInferEngine108 # Additional initialization logic for VLLMInferEngine
113 109 
@@ -163,9 +159,7 @@ class VLLMInferEngine(BaseInferEngine):
163 train_pipeline_model_parallel_size=train_pipeline_parallel_size,159 train_pipeline_model_parallel_size=train_pipeline_parallel_size,
164 train_expert_model_parallel_size=train_expert_parallel_size,160 train_expert_model_parallel_size=train_expert_parallel_size,
165 infer_expert_model_parallel_size=infer_expert_parallel_size,161 infer_expert_model_parallel_size=infer_expert_parallel_size,
166- train_context_model_parallel_size=train_context_parallel_size,162+ train_context_model_parallel_size=train_context_parallel_size
167- infer_prefill_context_model_parallel_size=infer_prefill_context_parallel_size,
168- infer_decode_context_model_parallel_size=infer_decode_context_parallel_size
169 )163 )
170 164 
171 if load_format == "megatron":165 if load_format == "megatron":
@@ -187,7 +181,6 @@ class VLLMInferEngine(BaseInferEngine):
187 model=tokenizer_name_or_path,181 model=tokenizer_name_or_path,
188 trust_remote_code=trust_remote_code,182 trust_remote_code=trust_remote_code,
189 tensor_parallel_size=infer_tensor_parallel_size,183 tensor_parallel_size=infer_tensor_parallel_size,
190- prefill_context_parallel_size=infer_prefill_context_parallel_size,
191 load_format='dummy' if load_format == 'megatron' else load_format,184 load_format='dummy' if load_format == 'megatron' else load_format,
192 distributed_executor_backend="external_launcher",185 distributed_executor_backend="external_launcher",
193 enable_prefix_caching=enable_prefix_caching,186 enable_prefix_caching=enable_prefix_caching,
@@ -253,7 +246,8 @@ class VLLMInferEngine(BaseInferEngine):
253 ctx = worker.model_runner.vllm_config.compilation_config.static_forward_context246 ctx = worker.model_runner.vllm_config.compilation_config.static_forward_context
254 else:247 else:
255 ctx = self.llm.llm_engine.model_executor.driver_worker.worker.compilation_config.static_forward_context248 ctx = self.llm.llm_engine.model_executor.driver_worker.worker.compilation_config.static_forward_context
256- from vllm.attention.backends.abstract import AttentionType249+ from vllm.attention import AttentionType
250+ 
257 layer_need_kv_cache = []251 layer_need_kv_cache = []
258 for layer_name in ctx:252 for layer_name in ctx:
259 if hasattr(ctx[layer_name], 'attn_type') and ctx[layer_name].attn_type in (AttentionType.DECODER, AttentionType.ENCODER_DECODER):253 if hasattr(ctx[layer_name], 'attn_type') and ctx[layer_name].attn_type in (AttentionType.DECODER, AttentionType.ENCODER_DECODER):
@@ -367,14 +361,12 @@ class VLLMInferEngine(BaseInferEngine):
367 idx_list = None361 idx_list = None
368 else:362 else:
369 prompts = [self.tokenizer.tokenizer.decode(p, skip_special_tokens=True) for p in idx_list]363 prompts = [self.tokenizer.tokenizer.decode(p, skip_special_tokens=True) for p in idx_list]
370- 
371 with self.update_sampling_params(**kwargs):364 with self.update_sampling_params(**kwargs):
372 response = self.llm.generate(365 response = self.llm.generate(
373 prompts=prompts,366 prompts=prompts,
374 sampling_params=self.sampling_params,367 sampling_params=self.sampling_params,
375 use_tqdm=False368 use_tqdm=False
376 )369 )
377-
378 outs = self._post_process_outputs(response)370 outs = self._post_process_outputs(response)
379 self.free_cache_engine()371 self.free_cache_engine()
380 return outs372 return outs
Mmindspeed_rl/trainer/utils/parallel_state.py+8-8
@@ -4,7 +4,7 @@
4def get_pipeline_model_parallel_rank(mpu, use_vllm=False):4def get_pipeline_model_parallel_rank(mpu, use_vllm=False):
5 if use_vllm:5 if use_vllm:
6 from vllm.distributed import parallel_state as vpu6 from vllm.distributed import parallel_state as vpu
7- return vpu.get_pp_group().rank_in_group7+ return vpu.get_pipeline_model_parallel_group().rank_in_group
8 else:8 else:
9 return mpu.get_pipeline_model_parallel_rank()9 return mpu.get_pipeline_model_parallel_rank()
10 10 
@@ -12,7 +12,7 @@ def get_pipeline_model_parallel_rank(mpu, use_vllm=False):
12def get_pipeline_model_parallel_src_rank(mpu, use_vllm=False):12def get_pipeline_model_parallel_src_rank(mpu, use_vllm=False):
13 if use_vllm:13 if use_vllm:
14 from vllm.distributed import parallel_state as vpu14 from vllm.distributed import parallel_state as vpu
15- return vpu.get_pp_group().first_rank15+ return vpu.get_pipeline_model_parallel_group().first_rank
16 else:16 else:
17 return mpu.get_pipeline_model_parallel_first_rank()17 return mpu.get_pipeline_model_parallel_first_rank()
18 18 
@@ -20,7 +20,7 @@ def get_pipeline_model_parallel_src_rank(mpu, use_vllm=False):
20def get_pipeline_model_parallel_group(mpu, use_vllm=False):20def get_pipeline_model_parallel_group(mpu, use_vllm=False):
21 if use_vllm:21 if use_vllm:
22 from vllm.distributed import parallel_state as vpu22 from vllm.distributed import parallel_state as vpu
23- return vpu.get_pp_group().device_group23+ return vpu.get_pipeline_model_parallel_group().device_group
24 else:24 else:
25 return mpu.get_pipeline_model_parallel_group()25 return mpu.get_pipeline_model_parallel_group()
26 26 
@@ -28,7 +28,7 @@ def get_pipeline_model_parallel_group(mpu, use_vllm=False):
28def is_pipeline_last_stage(mpu, use_vllm=False):28def is_pipeline_last_stage(mpu, use_vllm=False):
29 if use_vllm:29 if use_vllm:
30 from vllm.distributed import parallel_state as vpu30 from vllm.distributed import parallel_state as vpu
31- return vpu.get_pp_group().is_last_rank31+ return vpu.get_pipeline_model_parallel_group().is_last_rank
32 else:32 else:
33 return mpu.is_pipeline_last_stage()33 return mpu.is_pipeline_last_stage()
34 34 
@@ -55,7 +55,7 @@ def get_context_parallel_rank(mpu, use_vllm=False):
55def get_tensor_model_parallel_src_rank(mpu, use_vllm=False):55def get_tensor_model_parallel_src_rank(mpu, use_vllm=False):
56 if use_vllm:56 if use_vllm:
57 from vllm.distributed import parallel_state as vpu57 from vllm.distributed import parallel_state as vpu
58- return vpu.get_tp_group().first_rank58+ return vpu.get_tensor_model_parallel_group().first_rank
59 else:59 else:
60 return mpu.get_tensor_model_parallel_src_rank()60 return mpu.get_tensor_model_parallel_src_rank()
61 61 
@@ -70,7 +70,7 @@ def get_context_parallel_src_rank(mpu, use_vllm=False):
70def get_tensor_model_parallel_group(mpu, use_vllm=False):70def get_tensor_model_parallel_group(mpu, use_vllm=False):
71 if use_vllm:71 if use_vllm:
72 from vllm.distributed import parallel_state as vpu72 from vllm.distributed import parallel_state as vpu
73- return vpu.get_tp_group().device_group73+ return vpu.get_tensor_model_parallel_group().device_group
74 else:74 else:
75 return mpu.get_tensor_model_parallel_group()75 return mpu.get_tensor_model_parallel_group()
76 76 
@@ -86,7 +86,7 @@ def get_model_parallel_group(mpu, use_vllm=False):
86 if use_vllm:86 if use_vllm:
87 import vllm87 import vllm
88 from vllm.distributed import parallel_state as vpu88 from vllm.distributed import parallel_state as vpu
89- return vpu.get_tp_group().device_group89+ return vpu.get_tensor_model_parallel_group().device_group
90 else:90 else:
91 return mpu.get_model_parallel_group()91 return mpu.get_model_parallel_group()
92 92
@@ -104,6 +104,6 @@ def get_tensor_and_context_parallel_group(mpu, use_vllm=False):
104 """Get the tensor- and context-parallel group the caller rank belongs to."""104 """Get the tensor- and context-parallel group the caller rank belongs to."""
105 if use_vllm:105 if use_vllm:
106 from vllm.distributed import parallel_state as vpu106 from vllm.distributed import parallel_state as vpu
107- return vpu.get_tp_group().device_group107+ return vpu.get_tensor_model_parallel_group().device_group
108 else:108 else:
109 return mpu.get_tensor_and_context_parallel_group()109 return mpu.get_tensor_and_context_parallel_group()
Mmindspeed_rl/workers/actor_hybrid_worker.py+1-3
@@ -836,8 +836,6 @@ class ActorHybridWorkerBase(BaseWorker):
836 infer_tensor_parallel_size=self.generate_config.infer_tensor_parallel_size,836 infer_tensor_parallel_size=self.generate_config.infer_tensor_parallel_size,
837 infer_pipeline_parallel_size=self.generate_config.infer_pipeline_parallel_size,837 infer_pipeline_parallel_size=self.generate_config.infer_pipeline_parallel_size,
838 infer_expert_parallel_size=self.generate_config.infer_expert_parallel_size,838 infer_expert_parallel_size=self.generate_config.infer_expert_parallel_size,
839- infer_prefill_context_parallel_size=self.generate_config.infer_prefill_context_parallel_size,
840- infer_decode_context_parallel_size=self.generate_config.infer_decode_context_parallel_size,
841 megatron_config=self.megatron_config,839 megatron_config=self.megatron_config,
842 sampling_config=sampling_config,840 sampling_config=sampling_config,
843 enable_prefix_caching=self.generate_config.enable_prefix_caching,841 enable_prefix_caching=self.generate_config.enable_prefix_caching,
@@ -868,7 +866,7 @@ class ActorHybridWorkerBase(BaseWorker):
868 866 
869 from vllm.distributed import parallel_state as vpu867 from vllm.distributed import parallel_state as vpu
870 if vpu.get_tensor_model_parallel_rank() == 0 and \868 if vpu.get_tensor_model_parallel_rank() == 0 and \
871- vpu.get_pp_group().rank_in_group == 0:869+ vpu.get_pipeline_model_parallel_group().rank_in_group == 0:
872 server_info = ZmqServerInfo()870 server_info = ZmqServerInfo()
873 server_info.global_rank = self._rank871 server_info.global_rank = self._rank
874 server_info.dp_world_size = (vpu.get_tensor_model_parallel_world_size() *872 server_info.dp_world_size = (vpu.get_tensor_model_parallel_world_size() *
Mtests/st/resharding/test_resharding.py+0-4
@@ -330,8 +330,6 @@ class TestActor():
330 infer_tensor_parallel_size=args.infer_tp,330 infer_tensor_parallel_size=args.infer_tp,
331 infer_pipeline_parallel_size=args.infer_pp,331 infer_pipeline_parallel_size=args.infer_pp,
332 infer_expert_parallel_size=args.infer_ep,332 infer_expert_parallel_size=args.infer_ep,
333- infer_prefill_context_parallel_size=args.infer_prefill_context_parallel_size,
334- infer_decode_context_parallel_size=args.infer_decode_context_parallel_size,
335 sampling_config=sampling_config,333 sampling_config=sampling_config,
336 max_num_seqs=16,334 max_num_seqs=16,
337 max_model_len=4096,335 max_model_len=4096,
@@ -397,8 +395,6 @@ def parse_args():
397 parser.add_argument("--infer-tp", type=int, default=4)395 parser.add_argument("--infer-tp", type=int, default=4)
398 parser.add_argument("--infer-pp", type=int, default=1)396 parser.add_argument("--infer-pp", type=int, default=1)
399 parser.add_argument("--infer-ep", type=int, default=1)397 parser.add_argument("--infer-ep", type=int, default=1)
400- parser.add_argument("--infer-prefill-context-parallel-size", type=int, default=1)
401- parser.add_argument("--infer-decode-context-parallel-size", type=int, default=1)
402 return parser.parse_args()398 return parser.parse_args()
403 399 
404 400