Pull Request已成功合入, 合并人@CANN-robot
(感谢 Xinxian Chen 的贡献)本次 AI 摘要未能生成有效摘要。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/cann-bench | ✅ fanyuwei_math, gxj1123 (2/2) | ✅ fanyuwei_math (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
vINyLogY, thanks for your pull request. All authors of the commits have signed the CLA. 👍


compile


流水线任务触发成功
任务链接 [5716da4890fa4dcf8d55c4a93dba34a2][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| codecheck_style | ✅ SUCCESS | >>>>> | |
| pre-commit | ✅ SUCCESS | ||
| UT_Test | ✅ SUCCESS | >>>>> | |
| pre_comment | ✅ SUCCESS | >>>>> | |
| PreSmoke_A900 | ✅ SUCCESS | >>>>> |
[2026-08-01 13:44:26] CI执行结束


评审意见(PR 239 · 评测镜像跨架构 + 950PR 支持)
评审基于 head bcc4971 对 merge-base 402c59f 的只读比对(8 个 docker 文件,+255/-67,无夹带无关改动)。
结论
跨架构(aarch64 / x86_64)与 950PR 接线在静态层面自洽、可成立,改动文件内未发现 🔴 阻塞。一处 🟡 建议合入前处理,另有几处只能靠真实 x86_64 / 950 构建运行确认。
✅ 静态已确认成立
跨架构参数化完整
docker/base/Dockerfile把三处架构相关路径全改${ARCH}:toolkit.run下载(base/Dockerfile:87)、libhccl stub 落点${ARCH}-linux/lib64、ccec_compiler/bin与LD_LIBRARY_PATH;docker/eval/Dockerfile已无任何aarch64字面量,改为继承CANN_ARCH。- 架构单向下传、防父子错配:base 经
ENV CANN_ARCH=${ARCH}(base/Dockerfile:108)发布,eval 层用: "${CANN_ARCH:?}"(eval/Dockerfile:62)+uname -m断言(eval/Dockerfile:63)双重校验,build.sh 再从docker image inspect读 base 的CANN_ARCH做一致性校验(build.sh:75-83)。三道校验层次分明。 uv.lock(本 PR 未改)确含两架构 wheel(torch_npu 的 x86_64 与 aarch64、torch 2.10.0+cpu 等),x86_64 主机uv sync --frozen能解析,README"同一份 lock 已含两架构 wheel"属实。
950PR 支持接线一致
- build.sh 按
NPU_ARCH派生OPS_PKG/OPS_MODE(build.sh:34-41):ascend950 → OPS_PKG=950 / 默认 OPS_MODE=refonly;ops URL 用Ascend-cann-${OPS_PKG}-ops_${CANN_VERSION}_linux-${CANN_ARCH}.run(eval/Dockerfile:72)。编译器 flag(ascend950)与包名(950)拼写差异有注释、分落两个变量,未混用。 - "950 不能用
OPS_MODE=none"在四处一致落实:Dockerfile 构建期拒绝(eval/Dockerfile:67-71)、build.sh 默认 refonly(build.sh:38)、run.sh 同一默认、self_test.py[2]以裸 H2D 拷贝为可用性门槛并对ERR01007/aclnnInplaceCopy提示改 refonly。 - 950 kernel 编译路径经核
src/cann_bench_utils/build.sh的 SoC 识别支持(Ascend910_95*|Ascend950*) NPU_ARCH="ascend950")。910b/910_93 默认仍none,与旧逻辑等价,不被 950 分支破坏。
其余
- build.sh/run.sh
set -euo pipefail、uname -m别名规范化(arm64→aarch64/amd64→x86_64)、未知架构/未知NPU_ARCH显式退出;tagcann-bench-eval:${VERSION}-${NPU_ARCH}-${ARCH}-ops${OPS_MODE}编码了全部影响分数含义的维度,run.sh 用同一派生规则还原。无写死本地路径。 - self_test.py
[2]从"仅看 device_count"升级为裸torch.arange(4).npu().cpu()往返校验(正是 950 真会失败处);[6]反作弊语义调整正确(能下发内置算子→[WARN]、被拦→[INFO],不计入 failed),错误码区分none→500001/refonly→561103。 - 安全:8 个改动文件扫描 token/密钥/内网地址无实质命中,拉取源全为公开地址(Ascend OBS、pythonhosted、pytorch、华为云/南大镜像、triton-ascend、ghcr),
wget仅带Referer无鉴权。 - 三处 README 与 Dockerfile/脚本实际行为对齐。
🟡 建议合入前处理
docker/eval/entrypoint.sh:15 仍硬编码 aarch64-linux/lib64(该文件不在本 PR 改动集)
该行 export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64:...,在 x86_64 镜像里该目录不存在(真正的 stub 在 x86_64-linux/lib64)。x86_64 目前能跑,唯一原因是 base 新增 ENV BASH_ENV=/etc/cann-env.sh(base/Dockerfile:133):非交互 bash 会先 source 它、按 ${ARCH} 正确加入 x86_64-linux/lib64,entrypoint 那行只是把一个不存在的 aarch64 目录前置。即 x86_64 可用性完全依赖 BASH_ENV 这条隐式链路,entrypoint 自身那行在 x86_64 上是失效且误导的字面量。一旦后续有人移除 BASH_ENV 或其 source,x86_64 镜像会在 import torch_npu 失败。建议改为引用 ${CANN_ARCH}(运行期 ENV 可用),或直接 source /etc/cann-env.sh 并删去这段冗余手工 set_env。跨架构改造应覆盖到这条。
🟡 次要(非阻塞)
- base 层缺少与 eval 对称的
uname == ARCH断言:x86_64 主机不带--build-arg ARCH构建 base(默认ARG ARCH=aarch64)会下载 aarch64 toolkit 并在执行.run时报 exec 格式错误,而非明确的架构不符提示。README 已要求--build-arg ARCH=$(uname -m),实际影响有限。 - run.sh 的架构
case无*)兜底,未知架构原样拼进 tag(后果仅是docker run找不到镜像而失败,属可接受失败方式),与 build.sh 的严格校验略不对称。 - 镜像 tag 新增
-<ARCH>-段属不兼容变更(有意、README 已说明);按旧 tag 引用镜像的外部自动化会失配,合入方需知会依赖旧 tag 的调用方。 - README 把 x86_64/950 呈现得接近硬绑定,实则
ARCH(uname -m定)与NPU_ARCH(环境变量定)正交;建议一句点明二者可独立组合、仅 x86_64/950 这一组合经实测。
须真机验证(静态不可确认,950 支持成立与否的核心)
- 两个 OBS 包 URL 是否真实可下载:
Ascend-cann-toolkit_9.0.1_linux-x86_64.run、Ascend-cann-950-ops_9.0.1_linux-x86_64.run(即 x86_64 toolkit 与 950 ops 的 x86_64 变体在 CANN 9.0.1 下存在、且 950 以950拼写)。 - Dockerfile/README/self_test 中作者声称的实测断言(950 上
none→ERR01007、matmul 被拦561103、910B500001、warmup 6.4ms/cache_clean 1.1ms 等),本地无 950 卡无法复核。
合入前置
建议修 entrypoint.sh:15 的硬编码(消除 x86_64 对 BASH_ENV 的隐式依赖),并以一次真实 x86_64 / 950 的 build.sh + run.sh self-test 确认两个 OBS 包 URL 可下载。其余 🟡 可选修。


compile


流水线任务触发成功
任务链接 [1d14144c5c434b468403c189bbfa984b][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| codecheck_style | ✅ SUCCESS | >>>>> | |
| pre-commit | ✅ SUCCESS | ||
| UT_Test | ✅ SUCCESS | >>>>> | |
| pre_comment | ✅ SUCCESS | >>>>> | |
| PreSmoke_A900 | ✅ SUCCESS | >>>>> |
[2026-08-03 14:19:23] CI执行结束


当前PR是否有AI参与:
[x] 否
[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :
PR功能描述 / 为什么需要这个合入**:
添加评测镜像跨架构 + CANN 9.1.0 + 950PR 支持
该PR关联的issue
(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #
希望检视人员了解:
改动类型 / Change Type
测试信息 / Testing
检查清单 / Checklist