贡献指南

本项目欢迎广大开发者体验并参与贡献,在参与社区贡献之前。请参见cann-community了解行为准则,进行CLA协议签署,了解源码仓的贡献流程。

开发者准备本地代码与提交PR时需要重点关注如下几点:

  1. 提交PR时,请按照PR模板仔细填写本次PR的业务背景、目的、方案等信息。

  2. 若您的修改不是简单的bug修复,而是涉及到新增特性、新增接口、新增配置参数或者修改代码流程等,请务必先通过Issue进行方案讨论,以避免您的代码被拒绝合入。若您不确定本次修改是否可被归为“简单的bug修复”,亦可通过提交Issue进行方案讨论。

  3. 请使用pre-commit工具确保代码满足基本要求,安装后会在git commit时自动检查当前提交的代码规范问题。

    pip install pre-commit
    pre-commit install
    

开发者贡献场景主要包括:

Bug修复

如果您在本项目中发现了某些Bug,希望对其进行修复,欢迎您新建Issue进行反馈和跟踪处理。

您可以按照提交Issue/处理Issue任务指引新建 Bug-Report|缺陷反馈 类Issue对Bug进行描述,然后在评论框中输入“/assign”或“/assign @yourself”,将该Issue分配给您进行处理。

贡献新特性

感谢您参与AMCT建设,为cann-amct注入更多价值!为了让您的贡献过程更顺畅、方案能更好地契合社区需求,以下是详细的操作指引,供您参考:

提交RFC,达成方案共识

在正式开发前,建议您先提交一份RFC(请求评议文档,通过创建ISSUE的方式提交),方便与其他开发者充分交流方案细节、达成共识。RFC中辛苦您至少包含以下内容:

  • 特性的背景和动机:比如该特性解决了什么场景的需求。
  • 核心设计方案:简要说明该特性实现的技术思路、关键模块的设计方案。
  • 预期达成的功能性能目标:例如该特性需实现的核心功能、预期的精度指标或性能表现。
  • 预计完成时间:方便社区了解开发进度,也便于后续协同支持。

提交PR,完善交付内容

当方案共识达成后,您可以提交对应的PR,并记得关联到之前的RFC。为确保样例质量和可复用性,PR中辛苦您至少包含以下内容:

  • 特性代码:请确保代码风格符合社区基本要求,且能通过流水线的code check,让后续开发者更容易理解和使用。
  • 优化文档:麻烦您详细说明该特性在功能适配、性能优化过程中的重点内容,比如“为什么要做这个优化点”、“用了什么方法实现”、“优化后带来了哪些具体收益(如性能提升X%)”。
  • README文档:这是帮助其他开发者快速上手的关键,需要包含两部分:
    • 简述:当前特性的核心内容,比如用到的模型、支持的执行设备、已验证的精度/性能信息等。
    • 操作步骤:请尽量详细地描述从环境准备到特性执行的全流程,确保其他开发者能顺利复现结果。

一些小提醒,让贡献更顺利

为了避免后续合入时的小波折,还有几个小细节想跟您同步:

  • 除了README或文档中需要的配图,合入的代码里请不要包含二进制文件。
  • 如果特性验证涉及第三方数据集的使用,只需在文档中说明数据集的下载方式、使用方法即可,无需直接提供数据集。
  • 如果您的修改涉及公共代码(非该特性内部代码),需要确保能通过CI的验证。
  • 如果特性开发过程中涉及算子的新增或修改,麻烦先将对应的算子变更合入到算子仓,再推进压缩特性合入。
  • 请检查您所使用的LICENSE是否合规,建议使用Apache 2.0等协议,并按照实际情况标注版权信息。

目录结构参考

如果您贡献的特性尚未经过较强的泛化性测试,建议您将特性代码合入到experimental目录下(如amct_pytorch/experimental),您可以参考以下结构组织您的代码和文档:

├── experimental                             # 实验特性
|  ├── sample1                               # 特性名称(如custom_defined_quantize_alg)
|  |   ├── doc                               # doc目录:存放优化文档、配图等
|  |   ├── src                               # src目录:存放代码
|  |   ├── README.md                         # 上述提到的README文档
|  |   └── ...                               # 其他必要文件(如环境配置文件等)
|  ├── sample2
│  └── ...

如果在贡献过程中有任何疑问,随时欢迎在社区中交流;再次感谢您的支持,期待您的精彩贡献!

文档纠错

如果您在本项目中发现某些文档描述错误,欢迎您新建Issue进行反馈和修复。

您可以按照提交Issue/处理Issue任务指引新建 Documentation|文档反馈 类Issue指出对应文档的问题,然后在评论框中输入“/assign”或“/assign @yourself”,将该Issue分配给您纠正对应文档描述。

帮助解决他人Issue

如果社区中他人遇到的问题您有合适的解决方法,欢迎您在Issue中发表评论交流,帮助他人解决问题和痛点,共同优化易用性。

如果对应Issue需要进行代码修改,您可以在Issue评论框中输入“/assign”或“/assign @yourself”,将该Issue分配给您,跟踪协助解决问题。