- 46 篇原文+摘要双文件归档(按 来源/作者 分层,复用本地归档 20 篇+新抓取 26 篇) - 即梦生成 9 组主题配图(大图+列表缩略图)存入 知识/金鹏/20260806/ - 章节重组为 9 个主题分组并挂接摘要引用
156 lines
7.1 KiB
Markdown
156 lines
7.1 KiB
Markdown
# 【昇腾大规模专家并行技术解码】PD分离,让推理性能再提速30%!
|
||
|
||
> **来源**:昇腾社区(技术干货)
|
||
> **作者**:未知(昇腾官方,未署名)
|
||
> **发布日期**:2025-04-23
|
||
> **原文链接**:https://www.hiascend.com/developer/techArticles/20250423-1
|
||
|
||
---
|
||
|
||
随着大语言模型(LLM)的快速发展,提升用户体验、增加吞吐和并发成为关键。昇腾推出大规模专家并行推理方案,通过优化专家分布、通信计算加速,将单卡吞吐提升了3倍以上。然而,LLM的Prefill和Decode阶段"混合部署"在吞吐和时延上仍存在瓶颈,针对这一问题,昇腾使用PD分离技术,进一步将吞吐量提升了30%以上,取得性能&效率的双提升。
|
||
|
||
## 大模型推理的趋势和挑战
|
||
|
||
生成式人工智能的核心 —— 大规模语言模型推理,其推理过程通常分为两个阶段:Prefill阶段和Decode阶段。Prefill阶段负责处理用户的输入生成初始KV缓存,并生成第一个Token(字),而Decode阶段则负责后续Token的生成。如下图:
|
||
|
||
*文本经过Prefill计算和Decode解码*
|
||
|
||
一方面,随着AI大模型的发展,数百GB模型权重文件、千亿参数模型更加常见。在"尝鲜"时,数百GB的MoE模型加载使推理效率降低,因此,通过集群化部署,将**MoE模型专家拆分到多张NPU卡上进行专家并行(EP)成为趋势**。
|
||
|
||
另一方面,在传统部署方案中,Prefill和Decode这两个阶段往往运行在同一个计算节点上,导致传统部署方案存在如下问题:
|
||
|
||
- **1.PD时延互相干扰**:Prefill和Decode阶段互相等待,用户需要增加等待时延,为了保证用户体验(时延小于100ms),必须牺牲并发,降低吞吐率。
|
||
- **2.计算与访存冲突**:Prefill阶段是计算密集型任务,Decode阶段是访存密集型任务,混合在同一节点上的运行,会导致算力和显存资源的竞争冲突。
|
||
- **3.资源利用不足**:两阶段硬件需求差异较大,为保证效果需要算力、显存资源过配置,混合部署难以充分利用资源,存在资源利用不足的问题。
|
||
|
||
### 1. 昇腾大规模专家并行方案
|
||
|
||
本方案是将数百个专家(Expert)离散地分布到更多的卡上。
|
||
|
||
*大规模专家并行专家分配示意图*
|
||
|
||
这个方案可以做到:
|
||
|
||
- **1.权重加载更快**:每张卡只需要加载部分专家权重,整体时延降低;
|
||
- **2.并行路数更多**:单卡专家少,空闲显存更多,显著提升并行的路数;
|
||
- **3.资源利用率更高**:专家可以充分利用单卡上的资源,整体提高效率;
|
||
|
||
因此,大规模专家并行方案可以实现更大的吞吐和更低的时延。
|
||
|
||
### 2. 昇腾PD实例分离方案
|
||
|
||
结合大规模专家并行方案,昇腾进一步通过MindIE推理引擎的调度,将Prefill和Decode阶段分别部署到不同的服务器上,分别作为P实例和D实例:
|
||
|
||
*将服务器做PD实例分离示意图*
|
||
|
||
通过PD分离,可以达到:
|
||
|
||
- **1.消除PD间时延干扰**:Decode可以使用更大的BatchSize,计算效率更高。
|
||
- **2.PD灵活配比调节**:可以根据PD需要的计算资源,独立地调整资源的比例,资源利用更充分。
|
||
- **3.PD资源解耦**: P实例和D实例使用不同的硬件资源,避免资源的冲突。
|
||
|
||
## 快速部署
|
||
|
||
### 1. 环境准备
|
||
|
||
**硬件需求:**
|
||
|
||
以16台昇腾服务器为例,8台组成4个P实例,8台作为1个D实例。服务器需具备高算力和大显存(推荐使用昇腾Atlas 800系列)。同时,确保服务器之间网络带宽充足(建议200Gbps或以上)。
|
||
|
||
**软件环境:**
|
||
|
||
- **1.安装k8s环境;**
|
||
- **2.集群节点安装MindCluster调度组件;**
|
||
- **3.安装MindIE镜像,支持大规模专家并行调度、PD分离功能。**
|
||
|
||
**准备权重:**
|
||
|
||
可从"魔乐社区"准备DeepSeek-R1 INT8量化版模型权重文件。
|
||
|
||
### 2.配置和启动服务
|
||
|
||
**准备配置文件**
|
||
|
||
从"昇腾社区"获取最新版本的MindIE软件包文件Ascend-mindie_2.0.RC1_linux-aarch64.run,拷贝到Linux本地,并执行如下命令:
|
||
|
||
```
|
||
chmod +x Ascend-mindie_2.0.RC1_linux-aarch64.run
|
||
./Ascend-mindie_2.0.RC1_linux-aarch64.run --extract=mindie
|
||
/mindie/Ascend-mindie-service_2.0.RC1_py311_linux-aarch64.run
|
||
--extract=mindie-service
|
||
cd mindie-service/examples/kubernetes_deploy_scripts
|
||
cp ../../conf/config.json ./conf/config_p.json
|
||
cp ../../conf/config.json ./conf/config_d.json
|
||
cp ../../conf/http_client_ctl.json ./conf
|
||
cp ../../conf/ms_controller.json ./conf
|
||
cp ../../conf/ms_coordinator.json ./conf
|
||
```
|
||
|
||
根据业务需求,执行命令修改当前目录下的配置文件"user_config.json"
|
||
|
||
```
|
||
vim user_config.json
|
||
```
|
||
|
||
**PD分离部署参数配置:**
|
||
|
||
设置 Prefill 和 Decode 阶段的实例数量 ,保持两者处理速度匹配,如下配置为4个Prefill实例,每个实例2台服务器,1个Decode实例,每个实例8台服务器。
|
||
|
||
```
|
||
"p_instances_num": 4, // 配置4个Prefill实例
|
||
"d_instances_num": 1, // 配置2个Decode实例
|
||
"single_p_instance_pod_num": 2, // 单个Prefill实例使用2个服务器
|
||
"single_d_instance_pod_num": 8, // 单个Decode实例使用8个服务器
|
||
```
|
||
|
||
可根据实际业务负载,调整实例数量和实例服务器配置。
|
||
|
||
**大规模专家并行部署配置:**
|
||
|
||
将模型拆分为多个 Expert 实例,分别部署到不同的 NPU卡上。
|
||
|
||
```
|
||
"moe_ep": 4, // Prefill实例或Decode实例的MOE EP配置
|
||
"moe_tp": 4, // Prefill实例或Decode实例的MOE 配置
|
||
```
|
||
|
||
**调度与资源管理:**
|
||
|
||
使用 MindIE 的调度器协调Prefill和Decode阶段的任务分配。根据负载变化自动调整批处理大小(Batch Size),提升吞吐量。
|
||
|
||
```
|
||
"maxPrefillBatchSize": 4, // Prefill实例一个batch中包含请求个数的上限
|
||
"maxPrefillTokens": 4096, // Prefill实例一个batch中包含input token总数的上限
|
||
```
|
||
|
||
**拉起服务:**
|
||
|
||
在当前目录执行如下命令拉起服务。观察服务日志 。
|
||
|
||
```
|
||
python3 deploy_ac_job.py
|
||
bash log.sh
|
||
```
|
||
|
||
当MS Coordinator中出现"MindIE-MS coordinator is ready!!!"时,表示服务拉起成功。
|
||
|
||
### 3.性能监控与优化
|
||
|
||
使用 MindIE 的性能分析组件,实时监控各节点的负载、时延和吞吐量。
|
||
|
||
```
|
||
benchmark --DatasetPath $dataset_path
|
||
--ModelName dsv3_w8a8 --ModelPath $weight_path --TestType openai --Http http://$ip:$port
|
||
--Tokenizer True --MaxOutputLen 2048 --DatasetType gsm8k --WarmupSize 0
|
||
--RequestRate 12 --Concurrency 2048 --SamplingParams
|
||
'{"ignore_eos":true}' --WorkersNum 4 --TaskKind text --WarmupSize 0
|
||
```
|
||
|
||
可观察到如下的回显。
|
||
|
||
## 结语
|
||
|
||
昇腾PD分离技术通过对LLM推理过程中的计算密集型和访存密集型任务进行解耦,结合大规模专家并行方案,显著提升了系统性能和资源利用率,为用户实实在在地节约了成本,提升了业务的质量。这一技术不仅为大规模语言模型的高效推理提供了新的解决方案,也为AI算力的高效利用开辟了新方向。
|
||
|
||
未来,随着昇腾处理器在更多场景中的应用,PD分离技术将进一步释放LLM的潜力,为各行业带来更智能化、高效的AI体验。
|