# 【昇腾大规模专家并行技术解码】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体验。