infrastructure:CANN社区基础设施库使用全攻略

本文基于CANN开源社区的infrastructure仓库进行技术解读

前言

一个活跃的开源社区,除了核心代码仓库,还需要完善的基础设施来支撑日常运作。文档中心、CI/CD流水线、自动化测试、代码规范检查......这些看似不起眼的东西,却是社区健康运转的基石。

CANN的infrastructure仓库就是扮演这个角色的。它提供了CANN社区运行所需的各种基础设施配置和工具。

什么是infrastructure

infrastructure(基础设施)是CANN开源社区的基础设施仓库,包含:

  • CI/CD配置
  • 代码规范检查
  • 文档构建系统
  • 自动化测试框架
  • 开发者工具

简单说,就是让CANN社区能够高效协作的"工具箱"。

核心组件

1. CI/CD系统

自动化的持续集成和持续部署:

复制代码
# GitHub Actions配置示例
name: CANN CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build CANN
        run: |
          ./scripts/build.sh
      - name: Run Tests
        run: |
          ./scripts/test.sh
2. 代码规范检查

保证代码质量:

复制代码
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
      - id: black
  - repo: https://github.com/pycqa/isort
    rev: 5.12.0
    hooks:
      - id: isort
  - repo: https://github.com/PyCQA/flake8
    rev: 6.0.0
    hooks:
      - id: flake8
3. 文档构建系统

自动生成和部署文档:

复制代码
# mkdocs.yml
site_name: CANN Documentation
site_url: https://docs.atomgit.com/cann/

nav:
  - Home: index.md
  - Getting Started:
    - Installation: installation.md
    - Quick Start: quickstart.md
  - API Reference:
    - ops-nn: api/ops-nn.md
    - ops-cv: api/ops-cv.md

plugins:
  - search
  - git-revision-date-localized
4. 自动化测试

完整的测试框架:

复制代码
# pytest配置
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = "-v --tb=short --cov=. --cov-report=html"

项目结构

复制代码
infrastructure/
├── .github/
│   ├── workflows/          # GitHub Actions工作流
│   │   ├── ci.yml
│   │   ├── cd.yml
│   │   └── security.yml
│   ├── ISSUE_TEMPLATE/     # Issue模板
│   └── PULL_REQUEST_TEMPLATE.md
├── .pre-commit-config.yaml # 代码规范检查
├── .markdownlint.json      # Markdown规范
├── .editorconfig           # 编辑器配置
├── docs/
│   ├── mkdocs.yml          # 文档配置
│   ├── requirements.txt    # 文档依赖
│   └── source/             # 文档源文件
├── scripts/
│   ├── build.sh            # 构建脚本
│   ├── test.sh             # 测试脚本
│   ├── lint.sh             # 代码检查脚本
│   └── release.sh          # 发布脚本
├── templates/
│   ├── issue_template.md   # Issue模板
│   └── pr_template.md      # PR模板
└── tools/
    ├── setup.sh            # 环境设置
    ├── format.sh           # 代码格式化
    └── check.sh            # 代码检查

主要功能

1. 自动化构建

支持多种构建场景:

复制代码
# 构建CANN所有组件
./scripts/build.sh --all

# 只构建指定组件
./scripts/build.sh --component ops-nn

# 构建并运行测试
./scripts/build.sh --test

# 交叉编译(用于ARM平台)
./scripts/build.sh --target arm64
2. 自动化测试

完整的测试套件:

复制代码
# 运行所有测试
./scripts/test.sh --all

# 运行单元测试
./scripts/test.sh --unit

# 运行集成测试
./scripts/test.sh --integration

# 运行性能测试
./scripts/test.sh --benchmark

# 生成覆盖率报告
./scripts/test.sh --coverage
3. 代码质量检查

多维度代码检查:

复制代码
# 格式检查
./scripts/lint.sh --format

# 静态分析
./scripts/lint.sh --static

# 安全检查
./scripts/lint.sh --security

# 运行所有检查
./scripts/lint.sh --all
4. 文档生成

自动构建和部署文档:

复制代码
# 本地预览文档
cd docs
mkdocs serve

# 构建文档
mkdocs build

# 部署到文档站点
mkdocs gh-deploy

开发者工具

1. 环境设置

快速搭建开发环境:

复制代码
# 自动安装所有依赖
./tools/setup.sh

# 安装开发工具
./tools/setup.sh --dev-tools

# 安装测试依赖
./tools/setup.sh --test-deps
2. 代码格式化

自动格式化代码:

复制代码
# 格式化所有代码
./tools/format.sh --all

# 只格式化改动的文件
./tools/format.sh --changed

# 格式化指定目录
./tools/format.sh --dir src/ops-nn
3. 发布流程

标准化的发布流程:

复制代码
# 创建发布分支
./scripts/release.sh --create v1.0.0

# 生成变更日志
./scripts/release.sh --changelog v1.0.0

# 打包发布
./scripts/release.sh --package v1.0.0

最佳实践

1. 提交信息规范

使用Conventional Commits格式:

复制代码
feat: 添加新的Attention算子
fix: 修复LayerNorm的数值精度问题
docs: 更新API文档
test: 添加单元测试
chore: 更新依赖版本
2. PR模板

使用标准化的PR模板:

复制代码
## 变更类型
- [ ] 新功能
- [ ] Bug修复
- [ ] 文档更新
- [ ] 性能优化

## 变更说明
请描述这次PR的具体变更内容...

## 测试
- [ ] 添加了单元测试
- [ ] 添加了集成测试
- [ ] 手动测试通过

## 相关Issue
Closes #123
3. 代码审查流程
复制代码
1. 提交PR前先运行本地检查
   ./tools/check.sh --all

2. 确保所有CI检查通过

3. 至少需要一位maintainer的审查

4. 解决所有review comments

5. 等待合并

CI/CD流程

完整CI/CD工作流







开发者提交代码
触发CI/CD
代码检查
格式检查
静态分析
安全扫描
检查通过?
通知开发者
构建项目
运行测试
测试通过?
生成文档
性能测试
是否合并?
合并到主分支
等待审查
触发CD
发布到包仓库
部署文档
通知所有成员

代码质量检查流程

代码提交
Pre-commit检查
Black格式化
isort排序
flake8检查
CI触发
单元测试
集成测试
覆盖率测试
测试报告
安全扫描
依赖检查
代码审查

集成服务

1. 文档中心

自动部署的文档站点:

  • API文档
  • 教程和指南
  • FAQ
  • 示例代码
2. 包管理

自动发布到包仓库:

复制代码
# 发布到PyPI
./scripts/release.sh --pypi

# 发布到conda-forge
./scripts/release.sh --conda

# 发布到AtomGit包仓库
./scripts/release.sh --atomgit
3. 性能监控

持续的性能监控:

复制代码
# 运行性能基准测试
./scripts/benchmark.sh

# 生成性能报告
./scripts/benchmark.sh --report

# 与历史版本对比
./scripts/benchmark.sh --compare v0.9.0

安全性

1. 依赖安全扫描

自动检查依赖包的安全漏洞:

复制代码
# 扫描依赖漏洞
./scripts/security.sh --scan-dependencies

# 生成安全报告
./scripts/security.sh --report

# 自动修复已知漏洞
./scripts/security.sh --fix
2. 代码安全检查

检测代码中的安全隐患:

复制代码
# 静态安全分析
./scripts/lint.sh --security

# 检查敏感信息泄露
./scripts/security.sh --check-secrets

# 检测SQL注入、XSS等
./scripts/security.sh --vulnerability-scan
3. 访问控制

配置仓库的访问权限:

复制代码
# 分支保护规则
- main分支:需要PR审查
- develop分支:需要CI通过
- release分支:需要maintainer批准

# 团队权限
- Maintainer:读写所有分支
- Committer:读写feature分支
- Contributor:只读

常见问题

Q1:如何配置CI/CD?

fork仓库后,会在Settings/Actions中看到自动配置的workflow

Q2:本地如何运行代码检查?

执行 ./tools/check.sh --all 即可

Q3:如何贡献文档?

在docs/source目录下添加或修改Markdown文件,提交PR即可

总结

infrastructure是CANN社区的基础设施仓库,主要功能:

  • 提供CI/CD自动化
  • 统一代码规范
  • 自动化测试
  • 文档构建和部署
  • 开发者工具

虽然不直接包含核心代码,但却是CANN社区能够高效运转的重要支撑。

相关链接

本文基于infrastructure仓库公开信息撰写,如有错误欢迎指正。

相关推荐
九.九12 小时前
ops-transformer:AI 处理器上的高性能 Transformer 算子库
人工智能·深度学习·transformer
春日见12 小时前
拉取与合并:如何让个人分支既包含你昨天的修改,也包含 develop 最新更新
大数据·人工智能·深度学习·elasticsearch·搜索引擎
恋猫de小郭12 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
deephub12 小时前
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
人工智能·microsoft·langchain·大语言模型·agent·强化学习
大模型RAG和Agent技术实践12 小时前
从零构建本地AI合同审查系统:架构设计与流式交互实战(完整源代码)
人工智能·交互·智能合同审核
老邋遢12 小时前
第三章-AI知识扫盲看这一篇就够了
人工智能
互联网江湖12 小时前
Seedance2.0炸场:长短视频们“修坝”十年,不如AI放水一天?
人工智能
PythonPioneer13 小时前
在AI技术迅猛发展的今天,传统职业该如何“踏浪前行”?
人工智能
冬奇Lab13 小时前
一天一个开源项目(第20篇):NanoBot - 轻量级AI Agent框架,极简高效的智能体构建工具
人工智能·开源·agent
阿里巴巴淘系技术团队官网博客14 小时前
设计模式Trustworthy Generation:提升RAG信赖度
人工智能·设计模式