一键式构建指南
前置环境准备
本项目支持一键式源码构建,在构建前,请根据如下步骤完成相关环境准备,确保系统满足构建要求。
安装构建工具
以下所列为构建所需的工具,请注意版本要求:
-
Python3 >= 3.8.0
-
CMake >= 3.16.0 (建议使用3.20.0版本)
# Ubuntu/Debian操作系统安装命令示例如下,其他操作系统请自行安装 sudo apt-get install cmake
检查编译环境
安装完成后,建议执行环境检查脚本,确认当前环境是否满足编译要求。
bash scripts/check_env.sh
检查结果说明如下:
| 状态 | 含义 | 处理建议 |
|---|---|---|
| [PASS] | 检查通过 | 无需处理 |
| [WARNING] | 非关键依赖缺失或版本存在偏差 | 建议修复,不影响核心编译 |
| [ERROR] | 关键依赖缺失或版本不兼容 | 必须修复,否则无法编译 |
注意
环境检查脚本中所有的检查项和版本约束严格来源于 docs/build.md 和 super_kernel/requirements-dev.txt,如文档和依赖更新,请同步修改脚本
安装社区版cann-toolkit包
根据实际环境,下载对应Ascend-cann-toolkit_${cann_version}_linux-${arch}.run包,请选择最新版本,下载链接。
# 确保安装包具有可执行权限
chmod +x Ascend-cann-toolkit_${cann_version}_linux-${arch}.run
# 安装命令
./Ascend-cann-toolkit_${cann_version}_linux-${arch}.run --full --force --install-path=${ascend_install_path}
- ${cann_version}:表示 CANN 包版本号。
- ${arch}:表示CPU架构,如 aarch64、x86_64。
- ${ascend_install_path}:表示指定安装路径,不指定则默认安装在
/usr/local/Ascend(root 用户)或${HOME}/Ascend(非 root 用户)目录。 - 安装过程如有其他问题请参阅:CANN 社区版-环境准备-软件安装。
安装社区版CANN ops包
根据产品型号和环境架构,下载对应Ascend-cann-${soc_name}-ops-${cann_version}_linux-${arch}.run包,下载链接如下:
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:下载链接。
# 确保安装包具有可执行权限
chmod +x Ascend-cann-${soc_name}-ops_${cann_version}_linux-${arch}.run
# 安装命令
./Ascend-cann-${soc_name}-ops_${cann_version}_linux-${arch}.run --install --install-path=${ascend_install_path}
- ${soc_name}:表示NPU型号名称,即${soc_version}删除“ascend”后剩余的内容。
- ${ascend_install_path}:表示指定安装路径,需要与toolkit包安装在相同路径,默认安装在
/usr/local/Ascend目录。
源码下载
若您的编译环境可以访问网络,编译过程中将自动下载上述开源第三方软件,可以使用如下命令进行源码下载:
git clone https://gitcode.com/cann/graph-autofusion.git
若您的编译环境无法访问网络,您需要通过下列步骤在联网环境中下载源码及开源软件压缩包,并手动上传至您的编译环境中:
- 在联网环境中,进入本项目主页, 通过
下载ZIP或clone按钮,根据指导,完成源码下载。 - 下载下列第三方开源软件。
| 开源软件 | 版本 | 下载地址 |
|---|---|---|
| makeself | 2.5.0 | makeself-release-2.5.0-patch1.tar.gz |
- 将源码及第三方开源软件上传到离线编译环境中,解压缩源码。
# 解压缩源码
unzip graph-autofusion.zip
- 在源码同级目录创建open_source目录,将第三方开源软件压缩包放到open_source目录下解压缩后改名。
# 创建open_source目录
mkdir open_source
# 将第三方开源软件压缩包放到open_source目录下
mv makeself-release-2.5.0-patch1.tar.gz open_source/
# 解压缩第三方开源软件压缩包并改名
cd open_source
tar -zxvf makeself-release-2.5.0-patch1.tar.gz && mv makeself-release-2.5.0 makeself
- 完成后文件目录如下:
├── graph-autofusion # 解压后的源码仓
│ ├── cmake
│ └── ...
├── open_source # 三方开源软件
│ └── makeself
│ ├── COPYING
│ ├── Makefile
│ ├── README.md
│ └── ...
安装 python 依赖
- 建议使用 Python 虚拟环境:
python3 -m venv venv source venv/bin/activate - 安装依赖:
cd graph-autofusion pip3 install -r super_kernel/requirements-dev.txt
构建
确保已完成前置环境准备。
配置环境变量
根据前面安装社区版cann-toolkit包的安装路径,执行合适的命令。
# 如果之前未指定路径安装,则:
# root 用户,ascend_install_path=/usr/local/Ascend
# 非 root 用户,ascend_install_path=${HOME}/Ascend
source ${ascend_install_path}/cann/bin/setenv.bash
执行构建
执行以下命令:
bash build.sh --pkg
执行成功后会在build_out目录下生成cann-graph-autofusion_${cann_version}_linux-${arch}.run。
- --pkg 表示构建 run 包
- ${cann_version} 表示 cann 版本号。
- ${arch} 表示 CPU 架构,如 aarch64、x86_64。
- 更多选项功能可以用 -h 查看。
bash build.sh -h
测试验证
在执行本章节操作之前,确保已完成前置环境准备。
UT 验证
bash build.sh -u
执行完成后根据输出日志查看UT测试执行情况,用例执行成功会打印passed并且无failed打印,确认所有测试用例通过。
ST 验证
bash build.sh -s
执行完成后根据输出日志查看ST测试执行情况,用例执行成功会打印passed并且无failed打印,确认所有测试用例通过。
覆盖率验证
bash build.sh -u -c # UT 覆盖率
bash build.sh -s -c # ST 覆盖率
bash build.sh -c # UT 覆盖率 + ST 覆盖率
执行完成后根据输出日志查看覆盖率情况,确认所有测试用例通过。
安装与卸载
cann-graph-autofusion_${cann_version}_linux-${arch}.run来自前面执行构建环节构建生成。
# 安装,如果需要指定安装路径,则加上 --install-path=${ascend_install_path}
./cann-graph-autofusion_${cann_version}_linux-${arch}.run --full --quiet --pylocal
# 卸载,如果是安装到指定路径情况,则加上 --install-path=${ascend_install_path}
./cann-graph-autofusion_${cann_version}_linux-${arch}.run --uninstall
- 说明,此处的安装路径(无论默认还是指定)需与前面安装 cann-toolkit 包时的路径保持一致。
- --full 全量模式安装。
- --install-path 指定安装路径,不指定则默认安装在
/usr/local/Ascend(root 用户)或${HOME}/Ascend(非 root 用户)目录。 - --quiet 静默安装,跳过人机交互环节。
- --pylocal 安装 run 包时,是否将包内的 .whl 跟随 run 包安装路径来安装。
- 若选择该参数,则 .whl 安装在
${ascend_install_path}/cann/python/site-packages路径下。 - 若不选择该参数,则 .whl 安装在本地 python 路径下,例如
/usr/local/python3.7.5/lib/python3.7/site-packages。
- 若选择该参数,则 .whl 安装在
- 更多安装选项请用 --help 选项查看。
安装完成后可参考样例运行尝试运行样例。