昇腾开源仓Issue分析解答-Ascend精选(一)
昇腾开源仓Issue分析解答-Ascend精选(一)
一句话让Agent变成昇腾专家,昇腾任务轻松搞定。评测入口:请按这个开源仓接入昇腾图谱 https://gitcode.com/agent0/kg-tools
总览
| 仓库 | 定位 | 收录条数 |
|---|---|---|
| pytorch | PyTorch 昇腾后端适配,分布式、算子分发与内存分配的适配层 | 14 |
| torchair | aclgraph/npugraph_ex 图编译与 reduce-overhead 加速,入图问题的专属定位仓 | 14 |
| MindSpeed-LLM | Megatron/FSDP2 双后端 LLM 训练,权重转换与拉起脚本是 issue 重灾区 | 16 |
| MindSpeed-MM | 多模态大模型训练,Qwen-VL/Wan/GDN 新栈适配的前线 | 6 |
pytorch(torch_npu 适配)
PyTorch 昇腾后端适配,分布式、算子分发与内存分配的适配层
| 编号 | Issue 问题内容 | 解答总结 |
|---|---|---|
| #1415 | 双机 910B SGLang 图捕获期间 HcclAllreduce 冻结,仅 MoE 模型复现 | 官方堆栈分析:rank3 卡在 CannKbInit 刚初始化,rank0-2 停在 HcclAllreduce 等待直至超时,判定为 HCCL/初始化问题而非脚本问题。排查手段:py-spy dump 定期采集堆栈看变化、调小 HCCL_EXEC_TIMEOUT 验证是否报超时错;issue 因长期无互动关闭,未给出最终修复版本。 |
| #1428 | OrangePi AIpro 上十元素加乘首跑 137 秒,期望毫秒级 | 首跑慢主因是算子首次 JIT 编译与初始化开销:正确安装配套 kernels 包并配置 torch.npu.set_compile_mode(jit_compile=False) 走预编译二进制可大幅缩短;配置后首跑仍约 45s 属初始化开销,应观察后续 step 耗时再判断;持续偏慢需采集 profiling 针对性优化。 |
| #1440 | 目标检测 NMS 后处理在 CPU 上,如何搬到 NPU 加速 | 两条路:装 Torchvision Adapter(Ascend/vision)后 torchvision 的 nms 直接在 NPU 执行;或用 torch_npu 自定义算子 npu_nms_v4。性能上装 kernels 包并 set_compile_mode(jit_compile=False) 减编译耗时,再采集 profiling 定位;200I DK A2 算力有限,搬迁收益需实测。 |
| #1442 | import torch_npu 即 SIGSEGV;示例首跑极慢;_lazy_init 死循环 | 混插 300I Duo/Pro+CANN8.3RC1:SIGSEGV 重装配套 CANN 后消失;首跑慢是算子 JIT 实时编译,装配套 kernels 包并 set_compile_mode(jit_compile=False) 走二进制;死循环堆栈卡在 CANN setdevice 且 lspci 找不到设备,属驱动层问题,需核查驱动固件安装或硬件。 |
| #1474 | torch.repeat_interleave 在 NPU 上极慢,甚至不如切回 CPU | aclnnRepeatInterleave 的 block 并非固定 1;官方给出两个经用户验证有效的提速点:显式传 dim(torch.repeat_interleave(x, repeats, 0))或把输入转 int32,提升切分并行度(step 间仍有波动);CANN 8.3.RC1 版本更新含该算子性能优化,旧版本建议升级。 |
| #1497 | sglang 图捕获报 torchair 不同 stream 运行图不支持 | torchair 的 TorchNpuGraph.run 要求 replay 与捕获同 stream,流不一致即抛错。用户定位:get_masked_input_and_mask 被 @torch.compile(dynamic=True) 反复重编译(命中 recompile_limit),注释该装饰器后跑通;官方判定属 torchair,转 torchair 仓跟进。 |
| #1498 | torch.func.jvp 在 NPU 首调即崩:function 无 graph 属性 | 崩在 torch 首次加载 JVP 分解表阶段(decompositions_for_jvp 依赖 torch.jit.script 可用),NPU 迁移场景该路径失效;官方建议移除 torch_npu.contrib.transfer_to_npu,用户改用迁移工具后仍复现,issue 未闭环即关闭。规避:JVP 可拆两次前向差分或 vjp 组合近似(通用做法,未经该 issue 验证)。 |
| #1516 | npu_grouped_matmul 在 W4A8 场景 A2 开 NZ 时输出错误,单测不过 | int4 权重 NZ 排布 + per-token 量化是官方文档明确支持的组合(公式3-3),A2 实测输出错,属真实精度缺陷;官方定位中还发现 A3 上 npu_format_cast 不起作用、用例本身疑似有问题,最终未给出修复版本即关闭。规避:权重改 ND 排布,或跟进后续 CANN/torch_npu 版本。 |
| #1517 | A3 上 AFD worker 算子单测跑不通,synchronize 报 507057 | 坑:cann-ops-8.5.0 出包未带全 AFD 相关算子(aclnnFfnWorkerBatching、aclnnAttentionWorkerCombine 等),A3 上调用即报 507057 远端错误。根因属算子出包缺失/用例问题,官方在 op-plugin 修复并合入 PR#4140;算子 kernel 开源进度需另行到 cann/ops-nn 提 issue 跟进。 |
| #1520 | 双机16卡 dist.broadcast_object_list 跑不通,多机广播是否支持 | 官方确认支持多机多卡 broadcast:建链方式由 RANK_TABLE_FILE 区分(ranktable vs 协商建链),脚本层不感知;用户普通双机脚本实测通过。后在 MindIE atb-models(已启用 ATB_LLM_HCCL_ENABLE 等)内叠加 dist.broadcast 报错/卡死,属组件内混用 torch.distributed,转 MindIE 排查。 |
| #1525 | 如何定位 npu_grouped_matmul 等 npu_* 算子的 C++ 实现与源码 | torch_npu 的 npu_* 自定义算子适配实现集中在 Ascend/op-plugin 仓(pytorch 的 third_party submodule),需 git submodule update --init --recursive 拉全再检索;自定义算子开发参考官方 op-plugin 适配文档;底层 aclnn 算子实现与接口参考 CANN AOL 文档。 |
| #1528 | 先 acl.init 再建 NPU tensor 即 abort(free 失败) | 先用 acl python 接口 init/set_device/create_context,再 import torch 创建 NPU tensor 即 abort。根因是外部 ACL 初始化与 torch_npu 内部初始化/分配器冲突(双重初始化语义);官方答复升级 torch_npu 7.3.0 及之后版本修复。规避:同进程避免混用两套初始化路径。 |
| #1533 | DataLoader 多进程报 _in_order 属性缺失 | 根因:torchvision_npu 与 torch 版本不配套——其 _dataloader.py 复写 _MultiProcessingDataLoaderIter 并引用新版 torch 才有的 _in_order 属性,旧版 2.6.0 无此属性。解决:按 Ascend/vision README 对齐配套版本,升级含修复的 torchvision-npu 包(PR#195)。 |
| #2005 | MemPool 劫持 aclMalloc 后 del tensor 物理内存不释放,共卡部署受阻 | sglang RL 后端用 torch_memory_saver(NPU 移植版)+ MemPool,del 后物理内存不归还。官方用原生 MemPool 复现对照并索取移植版本,未闭环。规避:显式 empty_cache 归还;池空闲占用可用 PYTORCH_NPU_ALLOC_CONF=expandable_segments:True 优化;自定义分配器须正确实现 free。 |
torchair(图模式加速)
aclgraph/npugraph_ex 图编译与 reduce-overhead 加速,入图问题的专属定位仓
| 编号 | Issue 问题内容 | 解答总结 |
|---|---|---|
| #143 | 补齐 _npu_dropout Converter 报 FX 图与 GE 图输出形状不一致 | 根因:op-plugin 里 npu_dropout_backward 的 meta 注册返回值个数与 converter 实现不一致(mask 未作为第二个返回值),shape 推导错误在校验阶段暴露。改 meta 注册即可;升级 torch_npu 2.6.0.post4.dev20251030 后该 bug 已随版本修复。另注:torchair 主要面向推理场景优化。 |
| #180 | 自定义算子新增可选 tensor v 入参,入图后 tiling 阶段找不到 v | 按官方指引 dump pbtxt 图,确认 FX/GE 图中 v 已存在(可选输入顺序颠倒、未置 None 属表象)。根因不在 torchair:该算子需 canndev+nn-dev 联合构建 CANN 包,canndev 侧 REG_OP 未同步适配(只适配了 nn-dev),且算子 infershape 实现有编码问题;修 canndev 注册与 infershape 后解决。 |
| #212 | Florence-2 走 torchair 编译报 dynamo Unsupported,报错不断 | 根因是 PyTorch 2.1 原生 dynamo 不支持 transformers 4.41 中 str()/set()/比较等写法,与 torchair 无关。官方建议升级 torch≥2.6 消掉大部分;残余语法改模型代码或留 eager,只编译 forward(性能热点在 forward);先用 aot_eager 验证跑通再切 NPU 后端。 |
| #231 | 开启 torchair 后 TensorMove 算子占比从 0.02% 涨到 50% | 官方:TensorMove 由 torchair 翻译 dynamo 图时按语义产生,本质是隔离内存生命周期的拷贝,inplace 算子多就大量引入。排查:dump 图+python 日志定位来源;GE 的 O3 优化本身会消除冗余 TensorMove。另 max-autotune 下 index_put 无 converter,可设 fx_summary.type=‘csv’ 导出支持清单。 |
| #236 | qwen2.5-vl 捕获报 Not allow to sync captured-stream | reduce-overhead 下,capture 期间出现 host↔device 拷贝/流同步(ACL 全局捕获模式下 aclrtMemcpy/StreamSynchronize 属非安全函数)即报此错。典型触发:CPU fallback 算子(gelu.out 回退)、arange 后 .to(device) 搬运。规避:NPU 上直接建张量、消除 fallback。 |
| #241 | 图模式 allgather+matmul 引入额外 stride/view copy 操作 | 根因:wq/wk 是 allgather 输出 buffer 的视图,NPU 编译期需 as_strided 写死取数布局,且通信原地写 buffer 后必须 viewcopy 把输出布局对齐成 wq 可识别格式。规避:①视图 .clone() 独立化;②把 w1/w2 切分构造放进 FX 图内;③from_blob 自建 tensor 让 PyTorch 追踪不到共享关系(需自担风险)。 |
| #310 | 函数加 @torch.compile 报 Cannot prepare for replay | 根因是重复编译:token_drop 上的函数级 @torch.compile 装饰器与 vLLM 已有的模型级 compile 嵌套,replay 时流状态不是 capture。官方判定用法错误:去掉函数上的装饰器,由模型粒度 compile 统一入图——compile 范围内部的函数会按配置自动入图编译。 |
| #402 | 图模式下 dist.broadcast 传 group_src 参数报错 | 根因:group_src 是 PyTorch 2.6 新增参数,torchair 的 broadcast ge_converter 基于 2.1 实现未覆盖。临时规避:只传 src 不传 group_src。官方按承诺于 2026-05-09 合入 PR#3029(broadcast support groupsrc,已 merge),630 版本正式商用。 |
| #436 | aclgraph 静态编译 run 包不自动安装;静态编译后自定义算子精度错 | 自动安装问题换 2026-04-13 之后的 nightly CANN 即修复。精度错根因:static_kernel_compile 下算子执行两次(首遍动态+静态执行),含原地更新入参的算子第二遍执行时入参已被首遍改写,与 golden 单次执行不一致。定位:算子 Data Dump(npugraph_ex/dfx/data_dump.md)+ plog 对比两次输入。 |
| #451 | yolov5 开 torch.compile 报 Guard check failed | dynamo guard 机制:首次 trace 记录各 tensor 的 dispatch key set,replay 时 from_numpy(x) 生成的 tensor 若 key 变化(trace 时 CPU、replay 时 NPU)即断言失败。排查:先确认 eager 可跑;再用 backend=‘aot_eager’ 定界是 dynamo 捕获问题还是 NPU 后端问题。 |
| #461 | 社区版 CANN 8.5.1 + A2(910B)能否使用 inductor-npu-ext? | 官方:需最新 CANN(当时 9.0.0-beta.2;旧社区版 8.5.1 报 soc_version 不识别、dlog_pub.h 缺失)+ torch≥2.8(现 README 要求 2.9+,随 torch_npu 打包为 _inductor/ascendc)。升级后 910B 跑通 demo;残余 libopp_registry.so 符号问题到 CANN 社区确认。 |
| #487 | acl graph 模式 msprof 采到同算子出现两次,疑图被执行两遍 | 官方定性为正常行为:static_kernel_compile 开启后首次运行为静态 kernel 编译而动态执行一次,之后才是真正执行,profiling 因此看到两份算子记录,并非图重复执行。规避统计干扰:给 profiler 指定 warmup 数量,跳过 static 首跑后再采集。 |
| #514 | npu.py concat() 是否把 bf16 提升成 fp32 再拼接? | 官方确认设计如此:concat 是搬运操作,类型提升会显著降低性能,因此 cat 的输入不做类型提升、不会被 upcast 到 fp32;autofuse 不支持 bf16 concat 的问题已在 CANN 包中更新支持。提问者提交的 PR#3163(fix concat convert to fp32)仍为 open,供参考。 |
| #602 | npugraph_ex 控核报 Dynamo 无法 trace builtin str(int) | 根因:torch_npu 的 npugraph_ex/scope/init.py 对动态 int 入参(aic_num/aiv_num)调用 str(),dynamo 无法 trace SymNodeVariable。规避:不把核数作为 cached_model 的动态入参,改为模块属性/常量传入;官方把脚本改成单卡、核数走构造参数入 Module 后验证可跑。 |
MindSpeed-LLM(大模型训练框架)
Megatron/FSDP2 双后端 LLM 训练,权重转换与拉起脚本是 issue 重灾区
| 编号 | Issue 问题内容 | 解答总结 |
|---|---|---|
| #1012 | glm-4.5-air SFT 序列 3k→6k 后 loss 爆炸(起始>5) | 官方确认框架长序列无问题,疑似配置:勿开 pack 模式;prompt-type 应为 glm4_moe(数据已离线拼模板可用 empty);关键:glm45-moe-air 微调脚本仅在 master 适配,2.2.0 分支未适配,勿跨分支用脚本。可跑推理看对话质量辅助判断精度。 |
| #1018 | qwen3-32b LoRA 微调后 mg 权重无法转 HF | 当时权重转换 v2 不支持 LoRA/QLoRA 合并转 HF。社区解法:在 mindspeed_llm/tasks/checkpoint/convert_mg2hf.py 中添加 merge_lora 权重操作,参考 examples/mcore/deepseek3 的转换脚本(现仓已有 ckpt_convert_deepseek3_merge_lora2hf.sh)。 |
| #1102 | ds-v3/r1 QLoRA 后转 HF,index.json 缺最后一层(第 61 层)map | 根因:LoRA/QLoRA 权重转换不加载 MTP 层结构,缺失的第 61 层即 MTP 层;官方短期无支持计划(欢迎社区提 PR)。规避:主体权重不受影响可正常使用;需要 MTP 层则等待或自行实现合并逻辑。 |
| #1110 | Qwen2.5-7B 单机(910B4 32G×8)预训练 NPU out of memory | 坑:示例脚本按 64G 的 910B/Atlas 900 系列调优,32G 卡直接沿用会 OOM。解:开重计算 --recompute-granularity full --recompute-method uniform --recompute-num-layers 1 大幅省显存;或减 SEQ_LEN、改切分 TP2PP4/TP1PP8、换小模型。 |
| #1113 | 按 quickstart 用 MindSpore 后端拉起训练失败 | 两个坑:①脚本路径错,mindspore 后端脚本在 examples/mindspore/ 而非 examples/mcore/;②quickstart 漏了环境步骤,需 cd MindSpeed-Core-MS && source tests/scripts/set_path.sh 把路径加进 PYTHONPATH(文档已修)。MindSpore 后端后续将下架,建议转 pytorch 后端。 |
| #1164 | 自用 json 数据集如何转成 qwen3 可微调数据集 | alpaca 格式用 data_convert_qwen3_instruction.sh(preprocess_data.py + AlpacaStyleInstructionHandler)。list index out of range 是 DATA_PATH 填错:只填前缀、不带 *_input_ids_document 后缀(如 ./finetune_dataset/alpaca)。 |
| #1187 | deepseek 671B 多机预训练卡在 HCCL communicator 建立报错 | 官方定位为环境问题而非框架:多机间环境不一致所致,换统一 docker 镜像后不再复现。另一队遇随机复现,用 mindspeed 算子预编译规避(启动前后台跑 GMM/MatmulAdd/MoeTokenPermute 等 OpBuilder().load())。多机 HCCL 失败先核对各机 CANN/torch_npu 版本与网络配置。 |
| #1194 | FSDP2 拉起 qwen3-14b 报 the patch of compile exist | 坑:MindSpeed-LLM 用 master 而 MindSpeed 装的是 2.2.0/2.3.0 分支,torch.compile 补丁重复注册报错。解:MindSpeed 换配套 master 版本(同 #1160);另 fsdp2 老框架(sh 脚本风格)已废弃,新模型接入走 yaml 风格新框架,参考 docs/pytorch/fsdp2/fsdp2_quickstart.md。 |
| #1220 | FSDP2 后端并行策略如何搭配,三种 mesh 约束看不懂 | FSDP2 后端 tp/dp 切分暂未实现不生效,可用 fsdp/ep/cp。world_size=fsdp_size;开 EP 需 ep_size×ep_fsdp_size=fsdp_size;cp_size 需整除 fsdp_size 且 ≤fsdp_size,一步 batch 数=fsdp_size/cp_size(例:8 卡 fsdp8 cp2 → batch 4)。 |
| #1247 | LoRA 微调后 mg→HF,config.json 的 torch_dtype 变成 dtype | 根因:V1 mg2hf 调 transformers 原生方法生成 config.json,原始权重基于 4.51.0,环境是 4.57,新版把 torch_dtype 键改名 dtype。解:重装 transformers 4.51.0,或直接手改 config.json(官方更推荐,避免版本变化影响训练/精度)。 |
| #1257 | 双机分布式训练 qwen2.5 报 ERRO2200 hccl api failed | 排查清单:①两机 NODE_RANK 分别设 0/1,MASTER_ADDR 均填 rank0 机器 IP;②镜像需配套 mindspeed_llm(用户误用 mindspeed_rl 镜像,配置不同),见 2.2.0 镜像使用指导 wiki;③多机 HCCL 失败常见于网络与各机版本不一致。方向性结论,官方未最终复现确认。 |
| #1264 | 训练日志显存 32G 而 npu-smi 显示 53G,差值过大 | 正常现象:npu-smi(HBM-Usage)>reserved>allocated,多出为 allocator 缓存+驱动/HCCL/CANN 占用;caching allocator 释放只回池不还设备。iter2 抬升是优化器状态 iter1 末 lazy init 常驻,iter3 起平稳即健康。看真实占用用 memory_allocated()。 |
| #1308 | DeepSeek-V4 权重转换多项问题汇总(MTP/参数校验/vpp/mg2hf) | 官方逐项修复并合入:非 base 模型 MTP 层 missingkey→PR#4433;hf2mg 未知参数不报错、compress_ratios 补齐与结构不符、量化权重不报错→PR#4442;新增 mg2hf(支持 vpp,dualpipe 当时适配中暂不可用)→PR#4458。三个 PR 均已 merged。 |
| #1323 | MindSpeed-Core-MS 装后预训练报 helpers ImportError | 根因:Megatron 的 helpers C++ 扩展未编译。解:cd Megatron-LM/megatron/core/datasets/ && make,缺 pybind11 先 pip install 再编。另注意:MindSpore 后端文档与代码已计划下架,官方建议迁移 pytorch 后端;2.1.0+Core-MS r0.3.0 已过维护期。 |
| #1329 | sft_trainer.py 的 loss 除 loss_mask_sum 会不会除 0 | 不会:loss_mask_sum 是 CP 组 all-reduce 聚合后的整条序列未 mask token 总数,单卡 local 为 0 除法也正常。衍生实测问题:pack+CP 下 loss_mask 呈浮点、CP=2 触发 NaN check 异常,官方未能复现;建议 pack 勿与 --no-pad-to-seq-lengths 混用,排查 get_batch 数据处理。 |
| #1505 | 微调报 prompt_type 不在可选项,templates.json 找不到配置 | 根因:2.3.0 镜像配 master 文档——master/26.0.0 的 quickstart 改为在线加载训练(权重数据训练合一是 26.0.0 新特性,2.3.0 不支持)。解:用与代码分支配套的 quickstart(2.3.0 按原离线流程),或升级 26.0.0 镜像;templates.json 中 template 的 name 字段即 prompt_type 选项。 |
MindSpeed-MM(多模态训练框架)
多模态大模型训练,Qwen-VL/Wan/GDN 新栈适配的前线
| 编号 | Issue 问题内容 | 解答总结 |
|---|---|---|
| #147 | Qwen3VL微调跑完不保存模型,手动加保存参数即报assert tensor.is_cpu错误 | 坑:Qwen3-VL走FSDP2,保存仅支持torch_dcp格式(PR#1638/PR#1676补文档);旧版torch_npu 2.5.1的分布式save只认cpu/cuda,权重在NPU上即报assert。解法:torch与torch-npu配套升到2.7.1(新版已patch支持npu),master+配套FrameworkPTAdapter/CANN实测正常保存。 |
| #173 | Qwen2.5VL-7B微调3-5分钟长视频问答时AI Core长时间为0,静默后报错退出 | 根因:长视频抽帧后序列过长(128帧),算子执行过久触发超时,官方疑长序列FA降频。排查:ASCEND_LAUNCH_BLOCKING=1落盘plog、py-spy抓栈、模型减层二分。解法:降video_maxlen(30帧实测可训)、开CP、试PR#1708;官方建议采profiling,可用数据分桶BucketBatchSampler均衡长视频负载。 |
| #189 | Wan2.2 5B用pretrain.sh默认参数在pexel-45k数据集训练loss不收敛 | 非框架bug:扩散模型学习随机噪声,loss本就持续震荡,需滑窗平均(如100步)看趋势;开源权重已在同类数据充分训练,微调呈收敛态震荡。调参建议:删–bf16避免权重down-cast(PR#1914已改);GBS扩到128及以上、MBS=1×梯度累计8;lr缩至5e-6;重视数据质量,低质数据微调反致劣化。 |
| #287 | GDN算子chunk_gated_delta_rule_fwd开cu_seqlens后必现nan | 根因:chunk_local_cumsum用head_first=True时数据读取错位,须改False(官方文档已弃用该参数);recompute_w_u_fwd的bug实为NPUIR编译器缺陷(AscendNPU-IR#149,主线已修)。PR#2386(varlen支持seqlen<64K)已合入,实测解决。规避:用cu_seqlens=None;seqlen>64K仍可能卡死(跟踪中)。 |
| #435 | Qwen3.5 packing微调GDN triton算子报507015设备同步超时错误 | 根因:triton版GDN使用随数据变化的grid,数据触发较大grid时部分CV融合算子workspace超限越界,编译器表现为底层硬件限制,需auto blockify特性规避(当时预期Q2交付)。规避:packing模式将gdn_implementation设为AscendC实现;gdn与causal_conv1d全设triton时尚有功能短板,后续版本优化,AscendC性能亦更优。 |
| #437 | Qwen3.5 SFT packing下micro_batch_size>1报序列长度不一致错误 | 设计限制非bug:packing已把多条样本拼成一条,单step想多训数据应调大cutoff_len而非mbs。mbs>1需模型侧causal conv1d、GDN、FA全链路支持二维cu_seqlens场景,实现较复杂,当时暂不支持。解法:mbs=1+cutoff_len调大;确有mbs>1强诉求可联系官方对齐修复计划或参与贡献。 |
组合解读:这 50 条里的共性规律
1. 图模式是三层坑:dynamo 捕获 → torchair 翻译 → capture 约束。
dynamo 不认 transformers 4.41 的写法(#212)、guard 记录 dispatch key set 导致 from_numpy 张量 replay 失败(#451)、动态 int 入参被 str() 无法 trace(#602)是捕获层;TensorMove 暴涨(#231)、额外 view copy(#241)是翻译层;capture 期间禁 host↔device 同步(#236)、replay 必须同 stream(pytorch #1497)是执行层。定界套路统一:先 aot_eager 验证 dynamo,再查 NPU 后端;性能热点在 forward,只编译 forward 即可。
2. 权重转换是训练框架第一坑。
transformers 版本差异让 torch_dtype 键改名(#1247)、LoRA 转换缺 MTP 层 map(#1102)、dsv4 一口气修三个 PR(#1308)、FSDP2 保存只认 torch_dcp 且要 torch_npu≥2.7.1(#147)。转换链每一步都在挑版本:先核对 transformers/torch/torch_npu 三方版本,再怀疑脚本。
3. 配套矩阵:镜像-分支-文档-依赖四件套。
master 配 2.2.0 分支包报补丁重复注册(#1194)、2.3.0 镜像配 master 文档踩新特性(#1505)、glm45 脚本仅 master 适配(#1012)、helpers C++ 扩展要手动 make(#1323)、inductor-npu-ext 要 torch≥2.8+最新 CANN(#461)。报错离谱时先核四件套版本是否配套,再排代码。
4. 显存与性能,先对齐口径。
32G 卡直接沿用 64G 调优脚本必 OOM,开重计算/改切分(#1110);npu-smi>reserved>allocated 属正常口径差(#1264);首跑 137 秒是 JIT 编译+初始化,看稳态耗时再优化(pytorch #1428);repeat_interleave 显式传 dim/转 int32 即提速(pytorch #1474)。
5. GDN/长序列多模态新栈,坑集中在实现切换与变长支持。
head_first 已弃用须置 False + NPUIR 编译器缺陷(#287)、triton 版 GDN grid 超限换 AscendC 实现(#435)、packing 下 mbs>1 不支持改调 cutoff_len(#437)、长视频降 video_maxlen+开 CP+分桶(#173)。新模型栈排错先确认官方推荐实现路径,再谈参数。
6. 多机问题九成是环境不一致。
统一 docker 镜像解决 671B communicator 建立失败(#1187)、NODE_RANK/镜像配套排查 ERRO2200(#1257)、图捕获期 HcclAllreduce 冻结用 py-spy+超时阈值定界(pytorch #1415)。多机 HCCL 报错,先逐机核对 CANN/torch_npu/网络,再怀疑框架。
7. 「不是 bug」类澄清同样省几天。
concat 不做类型提升是设计(#514)、msprof 见算子两次是静态编译首跑+真执行(#487)、CP all-reduce 防了除 0(#1329)、Wan2.2 的 loss 震荡要用滑窗平均看趋势(#189)。这类官方定性让人不用再瞎调参。
排错指引(从这批 issue 提炼)
| 症状 | 第一优先动作 | 本篇相关案例 |
|---|---|---|
| 入图/编译失败 | aot_eager 定界 dynamo vs NPU 后端;只编译 forward;核 torch/transformers 版本 | torchair#212、#310、#451 |
| capture 报 Not allow to sync | 消除 CPU fallback 与 .to(device);NPU 直接建张量 | torchair#236、pytorch#1497 |
| 静态编译后精度错 | 含原地更新的算子会被执行两遍;Data Dump 对比两次输入 | torchair#436 |
| 权重转换后不可用/键名异常 | 核对 transformers 版本;MTP 层单独处理;FSDP2 走 torch_dcp+新 torch_npu | LLM#1247、#1102、#1308、MM#147 |
| OOM / 显存口径差异 | 32G 卡开重计算改切分;npu-smi>reserved>allocated 属正常 | LLM#1110、#1264 |
| 多机 HCCL 失败/超时 | 各机统一镜像与版本;NODE_RANK/MASTER_ADDR;py-spy 定界 | LLM#1187、#1257、pytorch#1415 |
| GDN/变长序列 nan 或超时 | head_first=False;gdn 换 AscendC 实现;packing 下 mbs=1 调 cutoff_len | MM#287、#435、#437 |
| 首跑极慢/单算子慢 | kernels 包+jit_compile=False;repeat_interleave 显式 dim/int32 | pytorch#1428、#1474 |
涉及具体 API 语义与硬件约束的核对,用了昇腾知识图谱(ascend.wiki)的官方文档节点;各条解答中 KG 核实过的部分不再单独标注,评论与 PR 均无依据的信息一律未收录。MindSpeed-MM 高质量条目较多,本篇收录其训练正确性类 6 条,另 7 条(环境配套/超时/权重转换类)拆至下一篇「MindSpeed-MM(续)」表。接入昇腾知识图谱 https://gitcode.com/agent0/kg-tools
系列下一篇:Ascend 精选(二)—— 推理与工具线(MindIE-LLM / msmodelslim / msprobe / ascend-deployer 等),并承接 MindSpeed-MM 续表 7 条。
更多推荐

所有评论(0)