昇腾大模型训练与推理全链路
在昇腾 NPU 上跑大模型的国产化链路:MindSpore / MindFormers 分布式训练 → MindIE 多机推理。本篇讲平台侧的编排机制;MindIE 单篇见 03-MindIE分布式推理。
一、链路全景
数据/模型准备 → MindSpore/MindFormers 分布式训练(Volcano 多 Worker)
→ 模型登记(model-register) → MindIE 多机推理(rank table + ATB) → 对外 API
昇腾侧支撑该链路的组件(install/kubernetes/ascend/readme.md):
| 组件 | 作用 |
|---|---|
| Ascend Device Plugin | 上报 NPU 资源、设备发现/健康检查 |
| Volcano | NPU 亲和调度、gang scheduling、故障重调度 |
| Ascend Operator | 分布式训练生命周期、生成框架环境变量 |
| HCCL Controller | 生成分布式训练集合通信配置 |
| NPU Exporter | 采集 NPU 利用率/显存/温度 |
| Resilience Controller / Elastic Agent | 故障剔除续训、保存临终 CheckPoint |
| MindIO ACP / TTP | 用内存加速 CheckPoint 保存/加载 |
二、分布式训练:MindSpore/MindFormers on Volcano
任务模板 mindspore、mindformers,launcher 位于 job-template/job/deep-learning-framework/(mindformers 复用 mindspore launcher)。核心机制:
- Volcano gang scheduling:使用
batch.volcano.sh/v1alpha1Job,minAvailable保证多副本同时调度。 --num_worker定副本:所有 Worker 共用同一 Pod 模板,launcher 依平台环境变量(KFJ_TASK_IMAGES、KFJ_TASK_VOLUME_MOUNT、KFJ_TASK_RESOURCE_*等)生成 Jobtasks。- 算力/组网/容错:按 GPU/NPU 数量申请资源 +
gpu-type节点选择器;配置 RDMA 时申请 RDMA 资源并加IPC_LOCK;同 Job Worker 做kubernetes.io/hostname反亲和分散节点。 - 可观测:监控线程轮询 Job 状态;主线程用 stern 汇聚打印所有 Worker 日志;失败以非 0 退出码返回供流水线判断。
| 参数 | 含义 | 默认 |
|---|---|---|
--num_worker |
Worker 数量 | 3 |
--image |
运行镜像(空则用 KFJ_TASK_IMAGES) |
空 |
--working_dir |
工作目录 | /mnt/ |
--command |
训练命令 | python3 mnist.py |
launcher 依赖的平台注入环境变量(部分):
| 类别 | 环境变量 |
|---|---|
| 任务/流水线 | KFJ_NAMESPACE、KFJ_PIPELINE_ID、KFJ_TASK_ID、KFJ_RUN_ID、KFJ_CREATOR、KFJ_RUNNER |
| 镜像/挂载 | KFJ_TASK_IMAGES、KFJ_TASK_VOLUME_MOUNT |
| 资源 | KFJ_TASK_RESOURCE_CPU/MEMORY/GPU、GPU_RESOURCE_NAME、KFJ_TASK_RESOURCE_RDMA、RDMA_RESOURCE_NAME |
| 调度 | KFJ_TASK_NODE_SELECTOR |
同一 launcher 机制支撑 pytorch/deepspeed/megatron/colossalai/horovod/mxnet/paddle;昇腾走 mindspore/mindformers 分支。launcher 先按 run-id 清旧 Job 再建新 Job,监控线程约 60s 轮询状态,主线程用 stern 汇聚全 Worker 日志(每小时重启规避长跟踪限制),失败以非 0 退出码返回。
三、多机推理:MindIE + rank table
镜像目录 images/serving/mindie/,服务本体在镜像 /usr/local/Ascend/mindie/latest/mindie-service/。多机组网自动化:
- 生成 rank table:
generate_rank_table.py从 Volcano 注入的VC_WORKER_NUM/VC_MASTER_NUM/VC_TASK_INDEX/ROLE算节点数与角色,用hccn_tool -i <n> -ip -g读取本机各 NPU 卡 IP,生成ranktable-<run_id>.json,推导MASTER_IP、WORLD_SIZE。交给 MindIE 的环境变量(source_mul_env.sh):export RANK_TABLE_FILE=${MODEL_PATH}/ranktable-${KUBEFLOW_RUN_ID}.json export MIES_CONTAINER_IP=$K8S_POD_IP export MASTER_IP=$(cat /master) export WORLD_SIZE=$(cat /world_size) - ATB 模型与环境:镜像
/opt/package下提供 ATB Model 软件,解压到分布式存储后pip3 install atb_llm-<version>-py3-none-any.whl,source /usr/local/Ascend/llm_model/set_env.sh配环境。支持模型列表与参数以昇腾 MindIE 官方文档为准。 - 平台纳管:MindIE 服务由 Volcano 编排多机 Worker,纳入项目组配额、监控告警、流量网关,对外标准 API。
四、国产化意义
训练(MindSpore/MindFormers)与推理(MindIE+ATB)均不依赖 CUDA;全程云原生纳管;配合 ARM64(鲲鹏/飞腾)、麒麟/统信 UOS、达梦、内网离线,构成从硬件到大模型的完整国产化栈。