N步跑通CANNJudge算子竞赛提交流程:平台全流程实战指南

N步跑通CANNJudge算子竞赛提交流程:平台全流程实战指南

【免费下载链接】cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。项目地址: https://gitcode.com/cann/cann-learning-hub

你注册好了 CANNJudge 账号,打开平台却不知从哪条命令下手:登录走哪种方式?工程模板下回来先改哪个文件?提交后卡在 Running 还是 Pass 该信哪个?这篇指南带你把"登录 → 取题 → 写码 → 提交 → 查分"这条链路完整走一遍,每步都给出可执行的命令、成功判据和典型卡点。工具与脚本在仓库的 skills/cannjudge-submit/ 目录,需要在线开发环境时可先拉下仓库再动手:

git clone https://gitcode.com/cann/cann-learning-hub

CANN 为这类算子竞赛提供编译、运行与评测底座:你写的 Kernel 最终跑在 AI Core 上,Host 侧逻辑负责切分与调度。理解算子在软件栈中的位置,能帮你判断报错发生在哪一层。

第一次提交怎么做:4 步跑通最短路径

第一次提交不必追求性能,目标是走通闭环。下面 4 步全部可用命令行完成,每步附"做对了"的判据。

  1. 登录。在你实际要执行下载和提交的 Linux 主机上运行:

    python3 cannjudge_cli.py login --account "your@email.com"

    密码在终端隐藏输入。判据:命令结束后~/.cannjudge/session.json出现(权限 600),之后执行info等命令不再要求账号。

  2. 看题。用题目链接或 ID 查看规格:

    python3 cannjudge_cli.py info --problem-id "add"

    判据:能读到code_template字段、dtype 列表和算子原型,且与你页面看到的题目一致。公开题目的info/download/--dry-run预检不需要本地登录,私有资源仍走服务端鉴权。

  3. 取工程。把模板下载到新目录(下载器拒绝覆盖已有工程,所以务必换新目录):

    python3 cannjudge_cli.py download --problem-id "add" --output ./add-work

    判据:目录下出现完整工程和.cannjudge-project.json元数据,能看清哪些文件可编辑。

  4. 预检并提交。改完源码先预检,再正式提交:

    python3 cannjudge_cli.py submit --problem-id "add" --project-dir ./add-work/project --dry-run python3 cannjudge_cli.py submit --problem-id "add" --project-dir ./add-work/project --no-wait python3 cannjudge_cli.py query --submission-id <ID>

    判据:--dry-run列出拟提交文件和 SHA-256 且无报错;正式提交返回 submissionId;查询终态出现Pass(兼容旧状态Accepted)即算跑通。

主线工作流:登录、取题、提交、查结果怎么串 🔄

最短路径只覆盖 happy path,这一节把每个环节的输入、输出和真实卡点讲清楚。

登录:三种方式与两种会话坑

默认用终端隐藏输入登录,最省事。拿不到交互终端(比如通过 Agent 远程操作)时,改用 RSA 密文方式:

python3 generate_key.py python3 encrypt_password.py --public-key public.pem python3 cannjudge_cli.py login --email "your@email.com" --ciphertext "<RSA密文>" --private-key private.pem

原理是私钥留在开发机、公钥加密后的密文可以反复使用——只要private.pem不重新生成,同一份密文一直有效。详细说明见 references/rsa-login.md。

两种会话坑先说在前面:

  • 会话默认存~/.cannjudge/session.json,有效期最长 7 天,服务端可能提前使其失效;报 401 就清除旧会话重新登录,报 403 先检查题目和小组权限,别急着反复重试。
  • Windows 上的 DPAPI 会话搬不到 Linux 复用,必须在执行提交的那台主机、那个系统账号下重新登录。
  • 多账号切换时,把--session-file PATH放在子命令之前隔离会话。

取题:链接比 ID 更稳

--problem-id和--problem-url都支持。建议优先贴完整链接:CLI 会按小组、比赛、题目逐层解析作用域,同名题不会选错。下载拿到的是真实 ZIP 工程包,同时读取/template元数据,生成不含凭据的模板清单。

开发:两种工程结构别混淆

code_template是分流依据,--project-type auto为默认,不要凭目录名猜题目类型:

工程类型你改什么提交内容
传统算子工程op_host与op_kernel下的可编辑文件tiling_h、tiling_key_h、host_cpp、kernel_cpp 四字段
npu_kernel_dev核函数工程模板中标记 editable 的文件(如kernel.asc)files: [{path, content}]数组

传统工程的标准目录长这样,各文件职责如下:

code/ ├── op_host/ │ └── {op}.cpp # TilingFunc、InferShape、InferDataType └── op_kernel/ ├── {op}_tiling.h # Tiling 数据结构 ├── tiling_key_{op}.h # TilingKey 多核切分(可选) └── {op}.cpp # Kernel 计算主体

核函数题没有 op_host/op_kernel 这层目录:模板里只有可编辑的kernel.asc(内含run_kernel入口)和一批只读文件(CMakeLists.txt、main.asc、data_utils.h、scripts/等)。接口签名、dtype 编码每次都从当次在线模板读,不同题目不同,见 references/kernel-project.md。

两条开发铁律:

  • 平台不开放测试用例 API。你能拿来做本地验证的,是下载包内的公开数据;不要尝试探测隐藏用例。
  • 只实现题目规定的 dtype、shape 和属性。不无条件补类型、不加无关转换,多写不等于多对。

提交:先预检,再上线

提交动作本身很简单,卡点几乎都出在预检阶段。CLI 会做四类检查:只读模板文件被改动、可编辑源码缺失、元数据里的 problem_id 与目标不一致、路径越界——任何一条不满足就中止,而不是偷偷忽略。

python3 cannjudge_cli.py submit --problem-url "<题目链接>" --project-dir ./add-work/project --dry-run python3 cannjudge_cli.py submit --problem-url "<题目链接>" --project-dir ./add-work/project python3 cannjudge_cli.py query --submission-id <ID> python3 cannjudge_cli.py rank --problem-id <ID>

--dry-run只显示文件列表和 SHA-256,不发送源码;默认提交后等待 120 秒轮询,可用--max-wait调整,--no-wait则立刻返回 ID 供你回头分次查询。传统工程下,CLI 会自动从工程里挑出*_tiling.h、可选tiling_key_*.h、op_host/*.cpp、op_kernel/*.cpp组装提交内容;匹配到多个候选文件时会停手让你确认,避免误选。

平台侧会把你的源码放到真实硬件上编译、运行并逐测试点评判。所以本地 CPU 静态检查通过不等于 NPU 通过,只有平台返回Pass且所有测试点通过,才算完成。

接入方式怎么选,题目默认值怎么读 ⚖️

两个最容易分叉的决策放一起讲:用哪种方式接入,以及怎么读题。

接入方式对比

方式适合谁优势注意点
CLI日常手工提交一条命令一个动作,会话自动复用密码终端隐藏输入,别写进脚本和命令历史
RSA 密文登录远程/Agent 无法开交互终端密文可反复用,私钥不出机器多一步pycryptodome依赖;密钥丢了旧密文即失效
Python SDK批量脚本或自动化流程细粒度控制每一步返回值凭据走运行时变量,不打印完整登录响应

SDK 最小链路长这样(依赖与 CLI 相同):

from cannjudge_cli import CANNJudgeClient client = CANNJudgeClient() if not client.load_session(): client.login(account, password) client.save_session() problem = client.resolve_problem("<题目链接或ID>") folder = client.download_package(problem['_id'], './add-work', include_metadata=True) # 在 folder 内完成可编辑源码后: payload = client.prepare_submission(problem['_id'], folder) sid = client.submit_payload(payload) print(client.wait_for_result(sid))

默认值与边界:错误做法 vs 正确做法

读题时,参考算子的行为定义必须查官方文档并动手验证,凭直觉是 Wrong Answer 的最大来源。对照表如下:

决策点错误做法正确做法
默认参数语义按字面值实现,比如把min=0, max=0当成范围 [0,0]查文档并本地跑一遍参考算子:它可能表示"自动计算数据范围"
维度处理直接GetDim(0..3)按 4D 写死用GetDimNum()动态读秩,循环求 totalLength
数据类型只实现 float32 一条路径用模板参数覆盖题目要求的全部 dtype
尾部对齐整块 DataCopy,尾部数据越界32 字节对齐拷贝加尾部回补
边界输入空张量、单元素直接跳过显式覆盖并定义行为后再提交

属性同理:axis=-1是最后一维,keepdims决定输出秩,这些都要进你的实现分支,而不是只在样例里碰巧对。

状态码怎么看,Wrong Answer 往哪查 📊

状态对照表

状态含义你的动作
Pass/Accepted全部测试点通过记录 submissionId,去rank看名次
Running评测执行中不是终态,稍后重查或用--no-wait分次查询
Wrong Answer部分用例数值不对按下面顺序排查
Compile Error源码没编过先修编译,别急着猜数值
Runtime Error运行期异常查越界访问、空指针、stream 使用
超时未在时限内完成查极端 shape 下的死循环或切分粒度过细

Wrong Answer 的排查顺序

  1. 先读平台msg和每个测试点的testcase_status,把失败用例分成几类,别笼统归因"精度问题"。
  2. 看precision_ratio:接近 1.0 却没达标,十有八九是 float16 边界量化——参考算子在 half 上的取整行为和你不一致。
  3. 按 dtype → 维度 → 属性 → 边界的顺序二分定位,每轮只动一个变量。
  4. 平台precision_ratio原样引用即可,不要把新字段硬套旧语义,时间单位以页面评测说明为准。

正确性之后的性能方向

  • 多核切分:把数据按availableCoreNum合理切到多核,切分策略写进 TilingKey。
  • 减少 global memory 往返:能放 local 的不反复读 global,合并碎拷贝。
  • 向量化搬运:按 32 字节对齐组织数据,向量指令吃满带宽。
  • 计算与搬运重叠:double buffer 让 DataCopy 和计算流水线化。

原则不变:正确性不达标时,一切性能动作让路。

提交前自查清单

- [ ] 算子原型、接口签名与当次模板一致(不同题目不同,不复用旧题签名) - [ ] dtype、shape 范围严格等于题目规定,没有私自扩展 - [ ] 参考算子的默认值已查文档并用 Python 对照验证 - [ ] 维度动态读取,无 2D/4D 硬编码 - [ ] 尾部对齐有显式处理,非对齐输入不越界 - [ ] 空输入、单元素、极值输入的行为已定义 - [ ] 只读模板文件未被改动,无多余 main 或凭据文件混入 - [ ] `submit --dry-run` 预检通过,文件列表与预期一致 - [ ] 下载包内公开数据本地验证通过 - [ ] submissionId 已记录,失败可断点续查

精选 FAQ

Q1:为什么info、download、--dry-run有时不用登录?这些命令走的是公开资源接口,服务端只按资源本身鉴权;涉及私有数据时才需要有效会话。

Q2:网络超时后,我能直接重发一次提交吗?不能盲目重发。先查询该账号在该题目的既有提交记录,确认上一次是否已被受理、拿到 submissionId,再决定是否需要重新 POST。

Q3:平台为什么不开放测试用例 API?目的是逼你写泛化实现而不是对样例过拟合。本地验证就用下载包内的公开数据,公开测试点全过也不代表所有规格边界都实测到,交付时把这一点写清楚。

Q4:RSA 密钥丢了,密文还能用吗?不能。generate_key.py重新生成后,旧密文用新私钥解不开,只能重新加密;如果当时还保留终端隐藏输入这条通道,也可以直接改走它。

下一步动作

  1. 登录 CLI,挑一道基础算子题(如 Add)走通"下载 → 预检 → 提交"闭环,把 submissionId 记下来。
  2. 建一张题目速查表:签名、dtype、CANN 版本、精度要求逐题登记——同一平台不同题的规格差异是混用代码的主要事故源。
  3. 养成--dry-run先行的习惯;拿到失败结果后,按"msg 分类 → 单变量修复 → 全量回归"的节奏迭代,不要一次改多处。
  4. 用rank --problem-id对照当前榜单定位自己的耗时差距,再决定下一轮优化投在多核切分还是内存流水上。

【免费下载链接】cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。项目地址: https://gitcode.com/cann/cann-learning-hub

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

高速列车轴承智能故障诊断:信号处理与特征工程实战

高速列车轴承智能故障诊断:信号处理与特征工程实战

简介&#xff1a;《2025年华为杯E题高速列车轴承智能故障诊断问题》思路、Matlab代码与论文内容合并在一个docx文档中&#xff0c;面向参加数学建模竞赛或从事故障诊断研究的本硕学生&#xff0c;可系统辅助完成赛题方案设计、模型构建与论文写作。该文件共1个docx&#xff0c;…

2026/10/20 1:14:48 阅读更多 →
OpenArm 导航指南:仓库里有什么,从哪儿动手

OpenArm 导航指南:仓库里有什么,从哪儿动手

OpenArm 导航指南&#xff1a;仓库里有什么&#xff0c;从哪儿动手 【免费下载链接】openarm A fully open-source humanoid arm for physical AI research and deployment in contact-rich environments. 项目地址: https://gitcode.com/GitHub_Trending/op/openarm 这…

2026/10/20 1:13:46 阅读更多 →
如何用 EIM 一次装好 ESP-IDF:从安装到编译首个项目的上手指南

如何用 EIM 一次装好 ESP-IDF:从安装到编译首个项目的上手指南

如何用 EIM 一次装好 ESP-IDF&#xff1a;从安装到编译首个项目的上手指南 【免费下载链接】esp-idf Espressif IoT Development Framework. Official development framework for Espressif SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf EIM&#x…

2026/10/20 1:13:46 阅读更多 →

最新新闻

文件系统边界才是批量删除的隐形天花板:一次缓存清理引发的思考

文件系统边界才是批量删除的隐形天花板:一次缓存清理引发的思考

48,218 个文件&#xff0c;103 秒&#xff0c;平均每秒删掉 468 个。这个速度放在本地 SSD 上不算惊艳&#xff0c;放在机械盘安全软件钩子的业务机上&#xff0c;已经算靠谱了。真正有意思的是这次清理引发的一场争论&#xff1a;团队里有人坚持说提示词写得不够好&#xff0c…

2026/10/20 5:41:14 阅读更多 →
AI生成内容合规标注的12个硬性字段与落地实践

AI生成内容合规标注的12个硬性字段与落地实践

1. 这份清单不是合规检查表&#xff0c;而是AI内容生产者的“出厂质检单”你刚用大模型生成了一段产品说明、一份用户协议初稿、一组营销文案&#xff0c;或者一段客服应答话术——在点击“发布”前&#xff0c;有没有哪怕一秒停下来问自己&#xff1a;这段内容&#xff0c;如果…

2026/10/20 5:41:14 阅读更多 →
CloudCompare自定义插件开发实战:以SOR统计离群点去除为例

CloudCompare自定义插件开发实战:以SOR统计离群点去除为例

如果你用过CloudCompare做点云处理&#xff0c;大概率能感觉到&#xff1a;这个软件最舒服的地方是点云显示、对比、切剖面都很快&#xff0c;但最不方便的是算法一固定就不太好改&#xff0c;想加的私有功能往往找不到入口。我刚入坑的时候也被这个问题卡了很久&#xff0c;直…

2026/10/20 5:41:14 阅读更多 →
VLA模型全解析:视觉-语言-动作统一模型的关键技术与落地挑战

VLA模型全解析:视觉-语言-动作统一模型的关键技术与落地挑战

很多朋友最近都在讨论 VLA 模型&#xff0c;尤其是在机器人学习和具身智能的圈子里&#xff0c;《VLA Models: Concepts, Progress, Applications and Challenges》这篇论文被频繁提及。VLA 全称是 Vision-Language-Action&#xff0c;也就是视觉-语言-动作统一模型&#xff0c…

2026/10/20 5:41:14 阅读更多 →
CTF文件包含漏洞实战:从路径构造到PHP代码过滤绕过

CTF文件包含漏洞实战:从路径构造到PHP代码过滤绕过

做CTF的Web题做到文件包含这个专题时&#xff0c;很多人会卡在同一个地方&#xff1a;明明看懂了漏洞原理&#xff0c;也知道要用伪协议、路径穿越&#xff0c;但真拿到一道题&#xff0c;还是不知道该从哪里下手。尤其是标题里“构造访问路径过滤php代码”这两个词&#xff0c…

2026/10/20 5:41:14 阅读更多 →
OpenCV 4.8.0源码编译实战:VS2019动态与VS2022静态双链路配置

OpenCV 4.8.0源码编译实战:VS2019动态与VS2022静态双链路配置

简介&#xff1a;面向需要在 Visual Studio 2019 与 2022 中搭建 OpenCV 4.8.0 X64 开发环境的 C 开发者&#xff0c;这份资源同时提供动态与静态两种编译方案&#xff1a;VS2019 动态编译生成 DLL&#xff0c;适合追求可执行文件轻量化的场景&#xff1b;VS2022 静态编译将库代…

2026/10/20 5:40:14 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →