昇腾推理盘古Pro MoE开源模型尝鲜实操指南
发表于 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 A2 | 4卡 |
Atlas 300I Duo | 4卡 |
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