感谢您对 FlagGems 的兴趣!我们使用 GitHub 来托管代码、管理问题和处理拉取请求。在贡献之前,请阅读以下指南。
请使用 GitHub 的 Issues 来报告错误。在报告错误时,请提供:
- 简单摘要,
- 复现步骤,
- 确保描述具体且准确!
- 如果可以提供一些示例代码将会很有帮助。
在提交拉取请求时,贡献者应描述所做的更改以及更改的原因。如果可以设计测试用例,请提供相应测试。拉取请求在合并前需要 一位 成员的批准,而且需要通过代码的持续集成检查。
目前持续集成检查设有四条流水线:
Code Format Check 使用 FlagGems 的 pre-commit git 钩子,可以在调用 git commit 命令时格式化 Python 源代码并执行基本的代码预检查。
pip install pre-commit
pre-commit install
pre-commit
Op Unit Test 检查算子的正确性,如果新增算子,需要在 tests
目录的相应文件下增加测试用例;如果新增了测试文件,则需要在 tools/coverage.sh
文件中的 cmd
变量新增测试命令。
Model Test 检查模型的正确性,新增模型的流程与新增算子的流程类似。
Python Coverage 检查当前 PR 新增代码的覆盖率, 其运行依赖算子单元测试
和模型测试
皆运行成功,否则会被跳过执行,代码覆盖率表示为:
PR 新增代码且测试能够覆盖的行数 / PR 总新增代码行数
注意:因为 Triton JIT 函数体不会运行,计算覆盖率时将会被去除。
代码合入要求 覆盖率达到 90% 以上,代码覆盖率的详细信息可以在 log 中查看。
本地复现需要安装 lcov
, coverage
以及 PyGithub
等工具。
cd $FlagGemsROOT
PR_ID=your_pr_id
bash tools/op-unit-test.sh
bash tools/model-test.sh
tools/code_coverage/coverage.sh PR_ID
当前流水线尚未对算子的性能进行检查,可以在 benchmark
目录下撰写性能测试,查看自己的优化效果。
FlagGems
├── src: 源码
│ ├──flag_gems
│ │ ├──utils: 自动代码生成的工具
│ │ ├──ops: 单个算子
│ │ ├──fused: 融合算子
│ │ ├──__init__.py
├── tests: 精度测试文件
├── benchmark: 性能测试文件
├── examples: 模型测试文件
├── LICENSE
├── README.md
├── README_cn.md
├── OperatorList.md
├── CONTRIBUTING.md
└── pyproject.toml
FlagGems 使用 Apache 许可证