源码构建
1. 环境准备
在源码编译前,请先完成基础环境搭建。具体操作请参见快速安装。
2. 环境验证
安装完CANN包后,需验证环境是否正常。
# 查看CANN Toolkit的version字段提供的版本信息(默认路径安装),<arch>表示CPU架构(aarch64或x86_64)。WebIDE场景下,请将/usr/local替换为/home/developer。
cat /usr/local/Ascend/cann/<arch>-linux/ascend_toolkit_install.info
# 查看CANN ops的version字段提供的版本信息(默认路径安装),<opsname>表示待查询的ops子包的名称,请用户根据实际安装路径替换。WebIDE场景下,请将/usr/local替换为/home/developer。
cat /usr/local/Ascend/cann/<arch>-linux/ascend_ops_install.info
3. 环境变量配置
根据实际场景,选择合适的命令:
# 默认路径安装,以root用户为例(非root用户,将/usr/local替换为${HOME})
source /usr/local/Ascend/cann/set_env.sh
# 指定路径安装
source ${install_path}/cann/set_env.sh
4. 源码编译
4.1 下载源码
若您的编译环境可以访问网络,编译过程中将自动下载开源第三方软件,可以使用如下命令进行源码下载:
git clone https://gitcode.com/cann/graph-autofusion.git
若您的编译环境无法访问网络,您需要通过下列步骤在联网环境中下载源码及开源软件压缩包,并手动上传至您的编译环境中:
-
在联网环境中,进入本项目主页,通过
下载ZIP或Clone按钮,根据指导,完成源码下载。 -
下载
makeself,cann-cmake第三方开源软件。开源软件 版本 下载地址 makeself 2.5.0 makeself-release-2.5.0-patch1.tar.gz cann-cmake master-002 cmake-master-002.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/ mv cmake-master-002.tar.gz open_source/ # 解压缩第三方开源软件压缩包并改名(cann-cmake压缩包保持不变) 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 │ └── ... │ └── cmake-master-002.tar.gz
4.2 安装依赖
4.2.1 安装依赖
以下所列为源码编译用到的依赖,请注意版本要求:
注意
如使用镜像方式进行项目体验,所有依赖已包含在init_env.sh中,可跳过此安装依赖步骤。
-
Python3 >= 3.8.0 (建议使用Python虚拟环境)
说明
- python宣布3.8.x已经EOL,CANN将在10.0.0停止对该版本的支持,请升级到>=3.9.x的版本
-
创建虚拟环境并激活:
python3 -m venv venv source venv/bin/activate -
安装依赖:
cd graph-autofusion pip3 install -r super_kernel/requirements-dev.txt
-
CMake >= 3.16.0 (建议使用3.20.0版本)
# Ubuntu/Debian操作系统安装命令示例如下,其他操作系统请自行安装 sudo apt-get install cmake
4.2.2 检查编译环境
环境准备完成后,建议执行环境检查脚本,确认当前环境是否满足编译要求。
bash scripts/check_env.sh
检查结果说明如下:
| 状态 | 含义 | 处理建议 |
|---|---|---|
| [PASS] | 检查通过 | 无需处理 |
| [WARNING] | 非关键依赖缺失或版本存在偏差 | 建议修复,不影响核心编译 |
| [ERROR] | 关键依赖缺失或版本不兼容 | 必须修复,否则无法编译 |
注意
环境检查脚本中所有的检查项和版本约束严格来源于 docs/build.md 和 super_kernel/requirements-dev.txt,如文档和依赖更新,请同步修改脚本。
4.3 编译
进入源码仓根目录,执行以下命令进行编译:
bash build.sh --pkg
更多编译参数可以通过bash build.sh -h查看,执行成功后会在build_out目录下生成cann-graph-autofusion_${cann_version}_linux-${arch}.run。
- --pkg 表示构建 run 包。
- ${cann_version} 表示 cann 版本号。
- ${arch} 表示 CPU 架构,如 aarch64、x86_64。
编译过程中,CMake 会通过 ExternalProject_Add 从外网(https://gitcode.com/cann-src-third-party/)自动下载 autofuse 所需的第三方源码包(abseil-cpp、boost、json、protobuf、symengine 等)。如果您的编译环境无法直接访问外网(如企业内网、Docker 容器默认 bridge 网络),请根据实际情况选择以下解决方案:
方案一:配置网络代理(推荐)
如果环境中有 HTTP 代理可访问外网,设置 http_proxy / https_proxy 环境变量后执行编译。build.sh 会自动将这些代理变量传递给 CMake 子进程:
# 设置代理(根据实际代理地址修改)
export http_proxy=http://user:password@proxy-server:port
export https_proxy=http://user:password@proxy-server:port
# 执行编译
bash build.sh --pkg
说明
build.sh会自动检测并继承当前 shell 中的http_proxy和https_proxy环境变量,无需额外配置。- 如果使用 git 代理(通过
git config --global http.proxy配置),需确认 shell 环境中也设置了对应的环境变量。可通过echo $http_proxy验证。
方案二:手动预下载第三方包 在不具备任何外网访问能力的环境中,可在联网机器上预先下载第三方源码包,拷贝到编译环境指定目录后离线编译。
-
在联网机器上下载以下第三方包:
-
将下载的包拷贝到编译环境的
output/third_party/对应子目录下(如不存在则创建):# 在源码根目录下创建目录结构 mkdir -p output/third_party/{abseil-cpp,json,boost,protoc,symengine} # 将下载的包放入对应目录(文件名须与下表一致) # abseil-cpp-20230802.1.tar.gz → output/third_party/abseil-cpp/ # json-3.11.3.tar.gz → output/third_party/json/ # boost_1_87_0.tar.gz → output/third_party/boost/ # protobuf-25.1.tar.gz → output/third_party/protoc/ # symengine-0.12.0.tar.gz → output/third_party/symengine/ -
执行编译时,通过
--cann_3rd_lib_path指定本地路径,跳过下载步骤:bash build.sh --pkg --cann_3rd_lib_path=$(pwd)/output/third_party
说明
- 如果不指定
--cann_3rd_lib_path,默认查找路径为./output/third_party,因此只要包放在该默认路径下,编译时也可省略此参数。 - CMake 构建脚本会优先检查本地路径是否已存在对应 tarball,存在则跳过下载。
4.4 测试验证
编译完成后,用户可以进行开发者测试,在执行本章节操作之前,确保已完成环境准备。
-
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 覆盖率执行完成后根据输出日志查看覆盖率情况,确认所有测试用例通过。
4.5 安装与卸载
-
安装
本地验证完成后,可执行如下命令安装编译生成的软件包,执行安装命令时,请确保安装用户对软件包具有可执行权限。
# 如果需要指定安装路径,则加上 --install-path=${install_path} ./cann-graph-autofusion_${cann_version}_linux-${arch}.run --full --quiet --pylocal说明
- 此处的安装路径(无论默认还是指定)需与前面安装 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 选项查看。
-
卸载
若您想卸载安装的软件包,可执行如下命令:
# 如果是安装到指定路径情况,则加上 --install-path=${install_path} ./cann-graph-autofusion_${cann_version}_linux-${arch}.run --uninstall
安装完成后可参考样例运行尝试运行样例。