SuperAPI AI 工具集

atb-testframework-build

测试与质量

查看项目

更新于 10-24 04:38

技能介绍

用途

该技能用于编译 ATB(Ascend Transformer Boost)测试框架,适用于需要编译 ATB 测试框架、运行 CSV 测试但测试框架未编译、从零开始构建 ATB 项目,或遇到第三方依赖克隆失败的用户。执行需在 Docker 容器内配合 CANN 环境完成。

前置条件

  • Docker 容器已启动
  • CANN 环境已安装
  • ATB 源码仓库已克隆 执行前需从用户处获取以下路径变量:<CANN_PATH>(CANN 安装根目录,包含 set_env.sh)、<ATB_REPO_PATH>(ATB 源码仓库根目录)、<DOCKER_NAME>(Docker 容器名称)。

主要能力

支持两种编译模式:

增量编译

当 3rdparty/ 目录已存在且第三方依赖完整时,直接执行增量编译:

docker exec <DOCKER_NAME> bash -c "
source <CANN_PATH>/set_env.sh && \
cd <ATB_REPO_PATH> && \
bash scripts/build.sh testframework
"

全量编译

当 3rdparty/ 目录为空或不存在时,需全量编译,包括第三方依赖克隆。由于 Docker 容器内可能无法访问 GitHub,需先进行源替换:

第1步:替换 GitHub 源为 gitcode 镜像。scripts/build.sh 中需替换的映射关系包括:

  • https://github.com/nlohmann/json.git → https://gitcode.com/nlohmann/json.git
  • https://github.com/google/googletest.git → https://gitcode.com/google/googletest.git
  • https://github.com/coolxv/cpp-stub.git → https://gitcode.com/coolxv/cpp-stub.git
  • https://github.com/pybind/pybind11.git → https://gitcode.com/pybind/pybind11.git
  • doxygen 的 wget 下载需改为 git clone --branch Release_1_9_6 --depth 1 https://gitcode.com/doxygen/doxygen.git

替换命令示例:

cd <ATB_REPO_PATH>
sed -i 's|https://github.com/nlohmann/json.git|https://gitcode.com/nlohmann/json.git|g' scripts/build.sh
sed -i 's|https://github.com/google/googletest.git|https://gitcode.com/google/googletest.git|g' scripts/build.sh
sed -i 's|https://github.com/coolxv/cpp-stub.git|https://gitcode.com/coolxv/cpp-stub.git|g' scripts/build.sh
sed -i 's|https://github.com/pybind/pybind11.git|https://gitcode.com/pybind/pybind11.git|g' scripts/build.sh

doxygen 替换说明:将 fn_build_doxygen 函数中的 wget + tar 方式替换为 git clone 方式。

第2步(可选):清理旧构建产物:

cd <ATB_REPO_PATH>
rm -rf build output 3rdparty

第3步:执行全量编译:

docker exec <DOCKER_NAME> bash -c "
source <CANN_PATH>/set_env.sh && \
cd <ATB_REPO_PATH> && \
bash scripts/build.sh testframework
"

产物验证

编译成功后检查关键产物:

ls -lh <ATB_REPO_PATH>/output/atb/cxx_abi_0/lib/libatb_test_framework.so
ls -lh <ATB_REPO_PATH>/output/atb/cxx_abi_0/lib/libatb.so

预期产物包括 libatb_test_framework.so(测试框架核心库)、libatb.so(ATB 主库)以及打包文件 atb_testframework_<arch>_<timestamp>.tar.gz。

编译后环境设置与 CSV 测试

设置环境变量:

source <ATB_REPO_PATH>/output/atb/set_env.sh

或手动设置:

export ATB_HOME_PATH=<ATB_REPO_PATH>/output/atb/cxx_abi_0
export LD_LIBRARY_PATH=<ATB_REPO_PATH>/output/atb/cxx_abi_0/lib:$LD_LIBRARY_PATH

运行 CSV 测试:

cd <ATB_REPO_PATH>/tests/framework/python/CsvOpsTestTool
python3 atb_csv_ops_test.py -i <csv_file_path> -n <start>:<end>

第三方依赖说明

testframework 构建所需第三方依赖包括:nlohmannJson(gitcode.com/nlohmann/json v3.11.3,JSON 解析库)、Mind-KernelInfra (mki)(gitcode.com/cann/ascend-boost-comm,内核基础设施)、catlass(gitcode.com/cann/catlass,矩阵运算库)、compiler(CANN 路径符号链接,编译器工具链)。注意:testframework 不需要 googletest、cpp-stub、pybind11、doxygen,但如果使用其他构建模式(如 alltest、unittest),也需要替换对应的 GitHub 源。

CXX ABI 版本

编译时 USE_CXX11_ABI 由 fn_init_env 函数自动检测,检查系统安装的 torch 是否使用 CXX11 ABI,输出目录为 output/atb/cxx_abi_0/ 或 output/atb/cxx_abi_1/。

常见问题与失败处理

常见问题包括:git clone 失败(curl 16)因 GitHub 网络不通,需替换为 gitcode 镜像源;ASCEND_HOME_PATH is null 因未 source CANN 环境,需先执行 source <CANN_PATH>/set_env.sh;libatb_test_framework.so 不存在因编译未完成或失败,需检查编译日志,确保 BUILD_TEST_FRAMEWORK=ON;第三方依赖克隆 403 因 gitcode 仓库路径错误,需确认 gitcode 上的仓库路径和标签。

修改 _aclnn_runner.cpp、_operation.cpp 等源码后需重新编译:

source $ASCEND_TOOLKIT_HOME/set_env.sh
cd $ATB_REPO_PATH
bash scripts/build.sh testframework 2>&1 | tail -50

确保环境变量 ASCEND_TOOLKIT_HOME 和 ATB_REPO_PATH 已设置。

编译失败处理流程:第1次失败分析日志,定位问题,修复后重新编译;第2次失败执行 rm -rf build/ output/ 清理后重新编译;第3次失败执行 bash scripts/build.sh testframework --clean-first 从头编译。最多验证 3 次,每次只修复一个问题,重新编译验证;无法解决时记录问题并询问用户。

适用场景与限制

适用于在 Docker 容器内配合 CANN 环境编译 ATB 测试框架并运行 CSV 测试。需注意网络环境导致 GitHub 访问受限时需替换源;testframework 构建不需要部分第三方依赖(googletest、cpp-stub、pybind11、doxygen),但其他构建模式可能需要;执行需用户提供路径变量和 Docker 容器信息。