昇腾社区首页
中文
注册
昇腾推理盘古Pro MoE开源模型尝鲜实操指南

昇腾推理盘古Pro MoE开源模型尝鲜实操指南

MindIEvLLM

发表于 2025/06/30

1 背景介绍

今天盘古 Pro MoE 模型正式开源,以 MoGE 架构为基础,参数总量达 720 亿,激活参数量达 160 亿。本文将指导开发者运用推理框架(昇腾MindIE / vLLM + vLLM Ascend),在昇腾Atlas 300I Duo 和Atlas 800I A2 平台上进行尝鲜体验。

2 快速体验盘古 Pro MoE模型

2.1 硬件要求

硬件型号本文推荐配置
Atlas 800I A24卡
Atlas 300I Duo4卡

2.2 MindIE上手指导

l 权重下载

权重下载:见文末模型仓库链接

将权重放到路径/home/pangu-pro-moe-mode/下,如果路径更改后续的脚本配置路径请做对应更改

l 推理前置准备

体验之前,您需确认固件/驱动已正确安装,可运行如下命令确认:

npu-smi info

修改模型文件夹属组为1001 -HwHiAiUser属组(容器为Root权限可忽视)

执行权限为750:

chown -R 1001:1001 {/home/pangu-pro-moe-mode}
chmod -R 750 {/home/pangu-pro-moe-mode}

l 加载镜像

前往华为企业技术支持网站下载镜像,本次体验推荐配套镜像版本:MindIE 2.1.T16 ,请根据对应硬件类型和系统选择镜像。下载镜像前需要申请权限,耐心等待权限申请通过后,根据指南下载对应镜像文件。

完成之后,请使用docker images命令确认具体镜像名称与标签。

docker images

l 容器启动

启动容器:执行以下命令启动容器(参考)

docker run -itd --privileged --name={容器名称} --net=host \
--shm-size 500g \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device /dev/devmm_svm \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /home/:/home/ \
{mindie:dev-xxx-xxx-xx-py311-ubuntu22.04-aarch64
(根据加载的镜像名称修改)
} \
bash

进入容器:执行以下命令进入容器(参考)

docker exec -it {容器名称} bash

设置基础环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
source /usr/local/Ascend/mindie/set_env.sh

l 服务化推理

1. 配置服务化环境变量

变量含义:expandable_segments-使能内存池扩展段功能,即虚拟内存特性。

export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

2. 修改服务化参数

cd /usr/local/Ascend/mindie/latest/mindie-service/
vim conf/config.json

修改以下参数设置权重路径

...
"httpsEnabled" : false,
"modelWeightPath" : "权重路径",
"maxPrefillTokens" : 2048,
...

如果您的硬件型号是Atlas 800I A2,在ModelConfig参数中配置以下并行特性

...
"tp" : 1,
"dp" : 4,
"moe_tp": 1,
"moe_ep": 4,
...

如果您的硬件型号是Atlas 300I Duo,在ModelConfig参数中配置以下并行特性

...
"tp" : 4,
"dp" : 2,
"moe_tp": 1,
"moe_ep": 8,
"worldSize" : 8,
...

如果您的硬件型号是Atlas 300I Duo,在BackendConfig参数中配置

...
"npuDeviceIds" : [[0,1,2,3,4,5,6,7]],
...

3. 拉起服务化

export OMP_NUM_THREADS=1
cd /usr/local/Ascend/mindie/latest/mindie-service/
./bin/mindieservice_daemon

执行命令后,首先会打印本次启动所用的所有参数,然后直到出现以下输出:

Daemon start success!

则认为服务成功启动。

4. 服务化验证

curl http://localhost:1025/infer \
-H "Content-Type: application/json" \
-d '{
"inputs": "The future of AI is",
"stream": false,
"parameters": {
"max_new_tokens": 1024
}
}'

如果运行成功,您将能接收到如下类似信息:

服务化运行成功图示


2.3 vLLM上手指导

l 权重下载

权重下载:见文末模型仓库链接

将权重放到路径/home/pangu-pro-moe-mode/下,如果路径更改后续的脚本配置路径请做对应更改

l 推理前置准备

体验之前,您需确认固件/驱动已正确安装,可运行如下命令确认:

npu-smi info

设置如下环境变量:

# Set `max_split_size_mb` to reduce memory fragmentation and avoid out of memory
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256

l 启动容器

如果您的硬件型号是Atlas 800I A2,可以用如下命令设置镜像版本:

# Choose the vllm-ascend image
export IMAGE=quay.io/ascend/vllm-ascend:v0.9.1rc1

如果您的硬件型号是Atlas 300I Duo,可以用如下命令设置镜像版本:

# Choose the vllm-ascend image
export IMAGE=quay.io/ascend/vllm-ascend:v0.9.1rc1-310p

您可以使用如下命令,一键拉起vLLM Ascend容器镜像:

# Set --device according to your hardware (/dev/davinci[0-7])
docker run -dit -u root \
--ipc=host \
--network host \
--name docker_name \
--privileged=true \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
-v /home/:/home/ \
-v /data/:/data/ \
$IMAGE /bin/bash

进入容器:执行以下命令进入容器(参考)

docker exec -it {容器名称} bash

l 离线推理(Atlas 800I A2服务器)

以下为使用vLLM Ascend加载PanguProMoE-72B进行离线推理的示例脚本examples.py。当前在Atlas 800I A2(8*64G)服务器上支持4卡、8卡部署,可在以下脚本中创建LLM对象时设置tensor_parallel_size=4(或8)。

import gc
from transformers import AutoTokenizer
import torch
 
from vllm import LLM, SamplingParams
from vllm.distributed.parallel_state import (destroy_distributed_environment,
                                             destroy_model_parallel)
 
def clean_up():
    destroy_model_parallel()
    destroy_distributed_environment()
    gc.collect()
    torch.npu.empty_cache()
 
 
if __name__ == "__main__":
 
    tokenizer = AutoTokenizer.from_pretrained("/home/pangu-pro-moe-mode/", trust_remote_code=True)
    tests = [
        "Hello, my name is",
        "The future of AI is",
    ]
    prompts = []
    for text in tests:
        messages = [
        {"role": "system", "content": ""},    # Optionally customize system content
        {"role": "user", "content": text}
    ]
        prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)        # 推荐使用官方的template
        prompts.append(prompt)
 
    sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=40)
 
    llm = LLM(model="/home/pangu-pro-moe-mode/",
            tensor_parallel_size=4,
            distributed_executor_backend="mp",
            max_model_len=1024,
            trust_remote_code=True,
            enforce_eager=True)
 
    outputs = llm.generate(prompts, sampling_params)
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
 
    del llm
    clean_up()      

按如下命令执行上述脚本即可使用vLLM + vLLM Ascend进行推理:

python example.py

如果运行成功,您将能接收到如下信息:

l 离线推理(Atlas 300I Duo服务器)

以下为使用vLLM Ascend加载PanguProMoE-72B进行离线推理的示例脚本examples.py。当前在Atlas 300I Duo服务器上支持4卡8芯部署,可在以下脚本中创建LLM对象时设置tensor_parallel_size=8、enable_expert_parallel=True。此外,Atlas 300I Duo服务器要求模型权重格式为float16,因此需要额外在创建LLM对象时指定dtype="float16"。

import gc
from transformers import AutoTokenizer
import torch
 
from vllm import LLM, SamplingParams
from vllm.distributed.parallel_state import (destroy_distributed_environment,
                                             destroy_model_parallel)
 
def clean_up():
    destroy_model_parallel()
    destroy_distributed_environment()
    gc.collect()
    torch.npu.empty_cache()
 
 
if __name__ == "__main__":
 
    tokenizer = AutoTokenizer.from_pretrained("/home/pangu-pro-moe-mode/", trust_remote_code=True)
    tests = [
        "Hello, my name is",
        "The future of AI is",
    ]
    prompts = []
    for text in tests:
        messages = [
        {"role": "system", "content": ""},    # Optionally customize system content
        {"role": "user", "content": text}
    ]
        prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)        # 推荐使用官方的template
        prompts.append(prompt)
    sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=40)
 
    llm = LLM(model="/home/pangu-pro-moe-mode/",
            tensor_parallel_size=8,
            distributed_executor_backend="mp",
            enable_expert_parallel=True,
            dtype="float16",
            max_model_len=1024,
            trust_remote_code=True,
            enforce_eager=True)
 
    outputs = llm.generate(prompts, sampling_params)
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
 
    del llm
    clean_up()      

按如下命令执行上述脚本即可使用vLLM + vLLM Ascend进行推理:

python example.py

如果运行成功,您将能接收到如下信息:

l 在线推理部署(Atlas 800I A2服务器)

您可以使用vLLM + vLLM Ascend一键部署在线推理服务:

export VLLM_USE_V1=1
 
vllm serve /home/pangu-pro-moe-mode/  \
--tensor-parallel-size 4 \
--trust-remote-code \
--enforce-eager

服务成功启动后,您可以看到如下信息:

l 在线推理部署(Atlas 300I Duo服务器)

您可以使用vLLM + vLLM Ascend一键部署在线推理服务:

export VLLM_USE_V1=1
 
vllm serve /home/pangu-pro-moe-mode/ \
--tensor-parallel-size 4 \
--enable-expert-parallel \
--dtype "float16" \
--trust-remote-code \
--enforce-eager

服务成功启动后,您可以看到如下信息:

l 在线推理服务化验证

随后,您可以通过curl请求来进行内容生成:

export question="The future AI is"
 
curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d "{
        \"prompt\": \"<s>[unused9]系统:[unused10][unused9]用户:$question[unused10][unused9]助手:\",
        \"max_tokens\": 128,
        \"top_p\": 0.95,
        \"top_k\": 50,
        \"temperature\": 0.6
    }"

如果运行成功,您将能接收到如下信息:

3 相关链接

盘古 Pro MoE模型权重仓库:https://gitcode.com/ascend-tribe/pangu-pro-moe-model

盘古 Pro MoE项目仓库:https://gitcode.com/ascend-tribe/pangu-pro-moe  

盘古 Pro MoE技术报告:https://raw.gitcode.com/ascend-tribe/pangu-pro-moe/raw/main/Pangu-Pro-MoE-CN-Report.pdf

vllm-ascend项目仓库:https://github.com/vllm-project/vllm-ascend

华为企业技术支持网站:https://support.huawei.com/enterprise/zh/index.html

MindIE文档:https://www.hiascend.com/document/detail/zh/mindie/20RC2/index/index.html


本页内容