源码构建

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

若您的编译环境无法访问网络,您需要通过下列步骤在联网环境中下载源码及开源软件压缩包,并手动上传至您的编译环境中:

  1. 在联网环境中,进入本项目主页,通过下载ZIPClone按钮,根据指导,完成源码下载。

  2. 下载makeselfcann-cmake第三方开源软件。

    开源软件 版本 下载地址
    makeself 2.5.0 makeself-release-2.5.0-patch1.tar.gz
    cann-cmake master-002 cmake-master-002.tar.gz
  3. 将源码及第三方开源软件上传到离线编译环境中,解压缩源码。

    # 解压缩源码
    unzip graph-autofusion.zip
    
  4. 在源码同级目录创建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
    
  5. 完成后文件目录如下:

    ├── 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的版本
    1. 创建虚拟环境并激活:

      python3 -m venv venv
      source venv/bin/activate
      
    2. 安装依赖:

      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_proxyhttps_proxy 环境变量,无需额外配置。
  • 如果使用 git 代理(通过 git config --global http.proxy 配置),需确认 shell 环境中也设置了对应的环境变量。可通过 echo $http_proxy 验证。

方案二:手动预下载第三方包 在不具备任何外网访问能力的环境中,可在联网机器上预先下载第三方源码包,拷贝到编译环境指定目录后离线编译。

  1. 在联网机器上下载以下第三方包:

    第三方包 版本 下载地址
    abseil-cpp 20230802.1 https://gitcode.com/cann-src-third-party/abseil-cpp/releases/download/20230802.1/abseil-cpp-20230802.1.tar.gz
    json 3.11.3 https://gitcode.com/cann-src-third-party/json/releases/download/v3.11.3/json-3.11.3.tar.gz
    boost 1.87.0 https://gitcode.com/cann-src-third-party/boost/releases/download/v1.87.0/boost_1_87_0.tar.gz
    protobuf 25.1 https://gitcode.com/cann-src-third-party/protobuf/releases/download/v25.1/protobuf-25.1.tar.gz
    symengine 0.12.0 https://gitcode.com/cann-src-third-party/symengine/releases/download/v0.12.0/symengine-0.12.0.tar.gz
  2. 将下载的包拷贝到编译环境的 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/
    
  3. 执行编译时,通过 --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
    • 更多安装选项请使用 --help 选项查看。
  • 卸载

    若您想卸载安装的软件包,可执行如下命令:

    # 如果是安装到指定路径情况,则加上 --install-path=${install_path}
    ./cann-graph-autofusion_${cann_version}_linux-${arch}.run --uninstall
    

安装完成后可参考样例运行尝试运行样例