用途
该技能用于编译 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 容器信息。