当前位置: 首页 > article >正文

skills CANN开源社区贡献技能包开发指南

前言开源社区的健康运转不仅依赖核心代码的贡献还需要降低贡献门槛、提供清晰的指南和自动化工具。skills仓库是CANN开源社区的贡献技能包提供了一系列辅助脚本、代码模板、CI检查和文档生成工具帮助新手快速上手同时确保贡献质量符合社区规范。该技术覆盖从第一次克隆仓库到PR合并的全流程是CANN社区运营的核心支撑组件。技能包的组成与分类skills仓库的内容可以分为五大类第一类代码模板生成器。当开发者需要新增一个算子如向ops-math贡献新的数学算子时不需要从零开始写CMakeLists.txt、算子实现框架和测试用例。运行skills/templates/generate_operator.py脚本输入算子名称、输入输出格式、支持的dtype脚本会自动生成符合CANN社区规范的代码骨架。这些模板经过社区Maintainer审核确保命名规范、内存对齐、错误处理等最佳实践被正确遵循。第二类代码风格检查工具。CANN社区遵循特定的代码规范如Ascend C内核函数的命名规则、内存管理API的使用约束。skills仓库提供了.clang-format配置、.clang-tidy检查规则以及自定义的Python脚本check_coding_style.py用于检测常见的规范违规如未释放的device内存、错误的aclrt错误码处理。第三类CI脚本与GitHub Actions工作流。每个CANN仓库的.github/workflows目录下的CI脚本其实都引用了skills仓库中的共享脚本。这种设计避免了在每个仓库中复制粘贴相同的CI逻辑统一了构建、测试、代码扫描的流程。当CI流程需要更新时如升级CMake版本、添加新的sanitizer检查只需要修改skills仓库中的共享脚本所有引用仓库的CI会自动继承更新。第四类文档生成与校验工具。CANN社区的文档API参考、开发者指南、教程使用Markdown编写但通过自定义的Sphinx扩展和Doxygen配置可以生成统一的HTML文档站点。skills/docs/目录下提供了这些配置文件的模板以及自动提取Ascend C算子API注释生成文档的Python脚本。第五类社区运营辅助工具。包括自动回复Issue的机器人脚本、检查PR是否签署CLA贡献者许可协议的GitHub Action、生成Release Notes的脚本等。这些工具保障了社区的合规运转。# skills/templates/generate_operator.py 核心逻辑 # 使用Jinja2模板引擎而非简单的字符串拼接 # 这样可以在模板文件中维护代码格式Python脚本只负责变量替换 from jinja2 import Environment, FileSystemLoader import argparse def generate_operator_files(op_name, input_tensors, output_tensors, supported_archs): 生成算子代码骨架、测试用例和CMake配置 env Environment(loaderFileSystemLoader(templates/)) # 生成算子实现文件Ascend C内核 # 模板中包含了内存对齐、DMA搬运、错误处理的骨架代码 kernel_template env.get_template(operator_kernel.cpp.j2) kernel_code kernel_template.render( op_nameop_name, input_tensorsinput_tensors, output_tensorsoutput_tensors, supported_archssupported_archs ) # 生成主机端调用代码CPU侧代码负责参数校验和内存管理 host_template env.get_template(operator_host.cpp.j2) host_code host_template.render(op_nameop_name) # 生成GTest单元测试骨架 # 包含CPU-NPU结果比对的逻辑新算子只需要填充输入数据和参考输出 test_template env.get_template(operator_test.cpp.j2) test_code test_template.render(op_nameop_name) return kernel_code, host_code, test_code贡献流程的自动化改造CANN社区的贡献流程在skills仓库的辅助下形成了以下自动化链路Fork与克隆新手开发者fork目标仓库后运行skills/scripts/setup_dev_env.sh自动配置pre-commit hook调用clang-format检查代码风格、设置git remote添加upstream指向官方仓库、安装依赖CMake、Ascend C编译器、gtest框架。代码开发使用模板生成器创建新算子的代码骨架在骨架上填充计算逻辑。运行skills/scripts/check_before_commit.py进行本地检查该脚本会调用clang-tidy、cppcheck、以及自定义的ACL API使用规范检查。提交与推送git commit前pre-commit hook自动运行代码格式化。如果检查失败如代码中有内存泄漏风险commit会被拒绝开发者必须修复后才能提交。创建PR推送分支到个人fork后在GitHub/Gitee创建PR。此时会自动触发CI流水线调用skills仓库中的共享CI脚本执行构建、单元测试、性能回归测试、API兼容性检查。Code ReviewMaintainer通过GitHub的Review功能进行代码审查。skills仓库中的checklist_template.md会被自动引用为Review清单确保每次PR审查覆盖所有关键点文档是否更新、API是否稳定、性能是否回归。合并与发布PR合并后skills仓库中的generate_release_notes.py脚本会自动提取PR标题和标签生成Release Notes草稿Maintainer审核后发布。# skills/ci/shared/workflows/build_and_test.yml # 这是被所有CANN仓库引用的共享CI工作流 # 使用GitHub Actions的reusable workflow机制避免在每个仓库中重复编写CI name: CANN Shared CI on: workflow_call: inputs: build_type: required: true type: string enable_sanitizer: required: false type: boolean default: false jobs: build: runs-on: ascend-910-runner # 使用挂载了Ascend 910的专用Runner steps: - name: Checkout code uses: actions/checkoutv4 - name: Checkout skills repo uses: actions/checkoutv4 with: repository: cann/skills path: skills - name: Run coding style check # 调用skills仓库中的共享检查脚本确保所有仓库使用同一套规范 run: python3 skills/scripts/check_coding_style.py --scan-path . - name: Build with CMake run: | cmake -B build -DCMAKE_BUILD_TYPE${{ inputs.build_type }} cmake --build build -j$(nproc) - name: Run unit tests # 用ctest执行测试如果测试失败自动上传日志供Maintainer分析 run: | cd build ctest --output-on-failure --timeout 120代码规范与静态分析CANN社区的代码规范不仅包含格式化要求缩进、命名风格还包含更深层的API使用规范。例如aclrt错误码必须被检查调用aclrtMalloc、aclrtMemcpy等运行时API后必须检查返回值。未检查的API调用会导致难以调试的内存错误。Device内存必须释放aclrtMalloc分配的内存必须在所有使用它的kernel执行完毕后调用aclrtFree释放。忘记释放会导致内存泄漏。Ascend C内核的GMGlobal Memory访问必须对齐未对齐的访问会导致性能下降或硬件错误。这些规范难以通过clang-format检查需要更高级的静态分析工具。skills仓库提供了基于libclangClang的Python绑定开发的自定义检查器。该检查器会解析C代码的AST抽象语法树识别aclrt API的调用点然后向后搜索返回值检查代码。如果未发现if (ret ! ACL_SUCCESS)之类的检查则报告规范违规。类似的检查器会追踪aclrtMalloc的返回值device指针建立分配-释放的生命周期模型如果发现分配后未被释放的路径则报告内存泄漏风险。# skills/scripts/aclrt_usage_checker.py 核心逻辑 # 使用libclang解析C AST而非正则匹配 # 正则表达式无法处理宏展开、条件编译等复杂情况 import clang.cindex def check_aclrt_error_handling(tu): 检查aclrt API调用的错误码是否被处理 for node in tu.cursor.walk_preorder(): if node.kind clang.cindex.CursorKind.CALL_EXPR: func_name node.displayname if func_name.startswith(aclrt): # 向上查找父节点看是否有if语句检查返回值 parent node.semantic_parent has_check False for child in parent.get_children(): if is_error_check_statement(child, func_name): has_check True break if not has_check: # 报告规范违规包含文件名和行号 print(fWARNING: {node.location.file}:{node.location.line} fUnchecked aclrt API: {func_name})文档生成与知识沉淀开源项目的文档往往是最容易被忽视的部分。CANN社区的文档体系包括API参考手册由Doxygen从代码注释生成。skills仓库提供了定制的Doxygen配置skills/docs/doxygen.conf确保生成的HTML文档包含Ascend C特有的语法高亮和交叉引用。开发者指南由Sphinx从Markdown/RestructuredText生成。skills仓库提供了Sphinx扩展sphinx_cann_extension.py支持Ascend C代码的语法高亮、自动链接到API参考手册、以及嵌入交互式代码示例。教程与博客存放在cann-learning-hub仓库中但文档的生成和发布流程由skills仓库的脚本辅助。例如skills/scripts/publish_tutorial.py会将Markdown教程转换为HTML并自动上传到CANN社区文档站点。文档的一个核心挑战是代码与文档的同步。当API签名变更时文档往往难以及时更新。skills仓库通过CI检查解决这个问题在PR的CI流水线中调用Doxygen生成API参考然后与仓库中已发布的API参考进行diff。如果发现签名变更但未更新文档CI会失败并提示开发者更新文档。结尾skills仓库是CANN开源社区的基础设施通过代码模板、自动化检查、共享CI脚本和文档生成工具降低了贡献门槛并保障了代码质量。该技术适合所有希望参与CANN社区贡献的开发者以及希望借鉴开源社区运营经验的团队。仓库本身接受社区贡献欢迎提交新的模板和检查工具。atomgit仓库链接https://atomgit.com/cann/skills

相关文章:

skills CANN开源社区贡献技能包开发指南

前言 开源社区的健康运转,不仅依赖核心代码的贡献,还需要降低贡献门槛、提供清晰的指南和自动化工具。skills仓库是CANN开源社区的"贡献技能包",提供了一系列辅助脚本、代码模板、CI检查和文档生成工具,帮助新手快速上…...

AI算力要上天?别笑,太空数据中心真能干翻地球电费!

前言你有没有算过,训练一个大模型,相当于烧掉多少吨煤?如今AI狂飙突进,算力需求指数级增长,可地球上的电——不够用了!更别说建个数据中心还得跟地方政府“斗智斗勇”,抢地皮、配储能、扛审批&a…...

巧用对称性与平均值原理:低成本实现高精度电阻分压器校准

1. 项目概述:用数学思维突破测量设备的精度极限在电子实验室里捣鼓精密电路,尤其是涉及到电压基准、信号调理或者高精度ADC前端时,一个绕不开的坎就是精密分压器。你可能在设计一个需要0.1%甚至更高精度的分压网络,但手头的万用表…...

大佬推荐的网络安全学习路线(从基础到高级,超级详细)

大佬推荐的网络安全学习路线(从基础到高级,超级详细) 说起网络安全,你可能会担心它是一个过时的行业。有人说,网络安全快卷死了,你既要攻又要防,并且随着技术的发展,你还要不断地学…...

广州因特智能:AI视觉软硬结合,打破半导体检测装备“卡脖子”困境

【导语:广州因特智能科技孵化于西安电子科技大学广州研究院,专注用AI视觉技术解决工业场景的“卡脖子”检测难题,为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化,构建完整能力体系广州因特智能科技由西安电子…...

AI圈神秘领袖Ilya一幅画引爆全网,OpenAI三件大事暗示AGI时代将至?

AI圈神秘精神领袖Ilya在Instagram上传一幅画引发疯狂解读,与此同时,OpenAI连续公布数学成果、升级Codex、筹备IPO,释放AGI到来的强烈信号。Ilya画作引猜测Ilya上传的画中,罗丹的「思考者」踩在芯片Die Shot上,右下角签…...

股票买卖最佳时机:LeetCode121题解

题目LeetCode121给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取…...

【紧急预警】Lindy衰减临界点已提前至第8.3个月!2024最新《营销自动化寿命健康度白皮书》限时开放前500份

更多请点击: https://kaifayun.com 第一章:Lindy衰减临界点的理论重构与实证突破 Lindy效应传统上描述“越老越长寿”的非线性生存规律,但其在现代软件系统、开源生态与协议层技术栈中的适用边界正遭遇结构性挑战。本文首次将Lindy模型从静…...

ssm207基于SSM的视频播放系统的设计与实现+vue(文档+源码)_kaic

第五章 系统的实现5.1 用户功能模块的实现5.1.1系统主界面用户进入本系统可查看系统信息,系统主界面展示如图5.1所示。图5.1网站主界面5.1.2视频详情界面用户可选择视频查看视频详情信息,并可进行视频播放操作,视频详情界面展示如图5.2所示。…...

GEO生成引擎优化:当AI成为信息分发的主角,品牌如何抢占对话窗口?

当用户不再"搜索-浏览",而是直接"AI提问-获取答案",传统SEO的逻辑正在被彻底改写。2026年,GEO(Generative Engine Optimization,生成式引擎优化)已经从概念走向规模化落地。本文从技术…...

2026长沙智能家居品牌实测,这些本地老牌值得选

2026年,长沙的智能家居市场已经从“概念热”转向“落地战”。我走访了长沙多个本地服务商,实测了不同品牌在别墅、酒店、大平层等场景的真实表现。今天,结合数据与案例,分享几个值得关注的本地品牌,尤其是深耕8年以上的…...

翻译 GDB 官方文档

翻译 GDB 官方文档项目地址官方文档地址下载源码包编译html运行翻译程序项目地址 https://github.com/shootercheng/gdb-translate.git 项目结构 $ tree -L 1 . ├── cmd ├── go.mod ├── input ├── internal ├── LICENSE ├── output ├── README.md ├─…...

网络配置工具类详解

CNet 网络配置工具类详解平台:仅支持 Linux,大量使用 ioctl 系统调用一、概述 CNet 是一个 纯静态方法的网络配置工具类,封装了 Linux 下常用的网络操作:功能类别涵盖内容IP 地址读取/设置本机 IP、子网掩码网关读取/添加/删除/设…...

神经网络与深度学习 第3周课程总结

深度学习视觉应用课程总结 一、常用计算机视觉数据集数据集名称发布方/年份规模图像规格类别数主要用途核心特点MNIST美国国家标准与技术研究院60k训练10k测试2828灰度图10类(0-9手写数字)入门级图像分类最经典的手写数字识别基准数据集Fashion-MNISTZalando(2017)60k训练10k测…...

Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取

Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取微信小程序作为轻量级应用的代表,已经渗透到电商、社交、工具等各个领域。随着小程序功能的日益复杂,自动化测试成为保障产品质量的重要手段。本文将带你快速搭建微信小程序…...

从“DOC/PDF”到“WPS”:细看GJB438C-2021文档格式要求背后的国产化信号与落地指南

从“DOC/PDF”到“WPS”:GJB438C-2021文档格式变革的深度解读与实施策略 当一份国家军用标准在文档格式描述中刻意删除"DOC/PDF"字样,转而明确标注"(WPS)文档处理器"时,这绝非简单的技术参数调整。…...

如何快速批量下载高质量歌词:ZonyLrcToolsX跨平台终极解决方案

如何快速批量下载高质量歌词:ZonyLrcToolsX跨平台终极解决方案 【免费下载链接】ZonyLrcToolsX ZonyLrcToolsX 是一个能够方便地下载歌词的小软件。 项目地址: https://gitcode.com/gh_mirrors/zo/ZonyLrcToolsX 还在为本地音乐库缺少歌词而烦恼吗&#xff1…...

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com/…...

2027考研全套资料免费分享

备战27考研最全备考资料整理完毕,一路走来深知备考搜集资料耗费大量时间,浪费不少精力。特意整理2027考研全科完整版资源,全部打包汇总,零基础考生直接拿来就能使用,省去四处搜集资料的烦恼。资料内含:&…...

Unity UI交互进阶:手把手教你打造一个支持单击、双击、长按的万能按钮组件

Unity UI交互进阶:手把手教你打造一个支持单击、双击、长按的万能按钮组件在游戏开发中,UI交互的流畅性和多样性直接影响玩家的游戏体验。想象一下,当你在开发一个RPG游戏的背包系统时,需要实现道具的单击查看详情、双击快速使用、…...

第三卷第4章:原型模式设计思想

第三卷第4章:原型模式设计思想 目录介绍 01.案例引入与思考 1.1 痛点场景 1.2 它哪里不舒服 1.3 引出本篇主角 02.原型模式介绍 2.1 原型模式由来 2.2 原型模式定义...

DragonBones与Godot集成:骨骼动画的可编程化实践

1. 为什么在Godot里用DragonBones不是“锦上添花”,而是“绕不开的刚需” 去年上线一个横版动作手游Demo时,美术团队交来一套20个角色、每个角色含8套动画(待机/跑动/跳跃/攻击/受击/死亡/闪避/必杀)的Spine资源。我兴冲冲导入God…...

Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题

Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题当你第一次用Godot4完成一个2D场景搭建时,那种成就感往往会被几个突如其来的bug瞬间击碎——角色神秘消失、背景纹丝不动、屏幕边缘出现诡异黑边。这些问题看似简单&#xff0c…...

CANoe诊断测试没CDD文件怎么办?手把手教你用Fault Memory窗口和CAPL脚本读取解析DTC故障码

CANoe诊断测试无CDD文件的实战解决方案:从Fault Memory到CAPL脚本全解析当CDD文件缺失或定义不清晰时,诊断测试工程师常常陷入困境。本文将深入探讨如何利用Fault Memory窗口的基础功能,并通过CAPL脚本实现更灵活、更强大的故障码读取与解析方…...

从游戏引擎到仿真平台:手把手教你用AirSim+UE4搭建你的第一个无人机/自动驾驶仿真环境

从游戏引擎到仿真平台:构建AirSimUE4无人机与自动驾驶仿真环境实战指南当游戏引擎遇上机器人算法测试,会碰撞出怎样的火花?微软开源的AirSim项目将虚幻引擎(Unreal Engine)从游戏开发领域引入到自动驾驶和无人机研究的…...

电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案

在2026年的电信行业,海量工单处理已不再仅仅是效率问题,而是合规与生存的底线。随着2026年5月20日《电信和互联网服务 基础电信企业网上营业厅服务规范》国家标准的正式实施,监管层对“信息透明、流程闭环、计费精准”的要求达到了前所未有的…...

Python UiAutomation实战:从网页数据抓取到桌面应用,一个库打通数据采集全链路

Python UiAutomation实战:打通数据采集全链路的智能解决方案 在数据驱动的商业环境中,企业常常面临跨平台数据采集的挑战——财务系统里的交易记录需要与网站后台的报表进行交叉分析,销售数据要从桌面软件导出后上传到云端处理系统。传统的人…...

UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色

UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色当你第一次打开UE5的Mac版本,面对那个闪烁着光芒的启动界面,内心可能既兴奋又忐忑。安装只是第一步,真正的旅程现在才开始。…...

保姆级避坑指南:在Ubuntu 22.04上搞定ROS2 Humble、PX4与Gazebo的联合仿真(附Empy版本降级)

保姆级避坑指南:Ubuntu 22.04下ROS2 Humble与PX4联合仿真的21个关键陷阱当你在Ubuntu 22.04上第一次尝试搭建ROS2 Humble、PX4与Gazebo的联合仿真环境时,可能会遇到比预期更多的挑战。这不是一个简单的"复制粘贴命令就能完成"的任务——版本冲…...

别急着扔!12年老ThinkPad X230升级SSD和内存后,Win10流畅得像新电脑

12年老ThinkPad X230重生指南:极简升级打造流畅办公利器每次打开抽屉看到那台积灰的ThinkPad X230,总有种说不出的情感。这款2012年问世的经典商务本,曾陪伴无数人度过加班到凌晨的夜晚。如今性能确实有些力不从心,但直接丢弃又觉…...