资讯动态

CANN opbase 源码构建与本地验证实战指南:从环境准备到 UT 测试全流程

发布时间:2026/9/19 23:38:02 来源:尧图企业网站定制
CANN opbase 源码构建与本地验证实战指南从环境准备到 UT 测试全流程【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase导读本文以 docs/QUICKSTART.md 为骨架完整讲解 CANN opbase 算子基础框架库从源码构建 run 安装包、联网/离线两种编译方式、安装卸载到本地执行 UT 用例验证功能的全流程操作。读完本文你将掌握build.sh各参数的真实语义与底层执行机制、第三方依赖的两种准备方式以及如何在不重新编译的情况下单独运行nnopbase_utest与op_common_utest测试二进制。CANN opbase 是 CANN 算子库依赖的基础框架库为算子提供公共头文件、结构体、调度框架与基础调度能力详见 README.md。在体验项目能力之前请先参考 README 完成环境部署NPU 驱动、CANN 包安装等与配套分支源码下载。本文不再重复环境部署细节直接从源码构建开始。所有全量命令参数可通过bash build.sh --help查看参数含义详见 build参数说明。构建前环境准备基础依赖及版本要求源码编译前请确保编译环境的基础库依赖已安装并满足以下版本要求依赖最低版本要求说明python 3.7.0构建脚本依赖gcc 7.3.0C 编译器g 7.3.0C 编译器cmake 3.16.0CMake 构建系统pigz 2.4可选安装后可提升打包速度patch 2.7用于给第三方源码打补丁如 protobufdos2unix-文本格式转换工具git-源码版本管理说明对于 CANNLab 或 Docker 环境默认已安装源码编译所需的构建工具无需手动安装可跳过本章操作。上述依赖可通过项目根目录 install_deps.sh 一键安装bash install_deps.sh若遇到不支持的系统请参考该脚本自行适配。从源码看该脚本会先做平台检测install_deps.sh支持 debianapt、rheldnf/yum、openEuler/EulerOSdnf、macOSbrew等系统随后逐项检查并安装 python、gcc/g、cmake、pigz、patch、dos2unix、git 等工具例如对 python 会先通过python3 --version与目标版本 3.7.0 做比较install_deps.sh不满足版本要求时才触发安装流程。这也解释了为什么快速入门要求版本号精确对齐脚本内部是按这些版本阈值进行校验的。安装第三方依赖说明对于 CANNLab 或 Docker 环境默认联网编译过程中会自动下载第三方依赖无需手动安装可跳过本章操作。本项目编译过程依赖的第三方开源软件列表如下开源软件版本下载地址json3.11.3json-3.11.3.tar.gzmakeself2.5.0makeself-release-2.5.0-patch1.tar.gzeigen5.0.0eigen-5.0.0.tar.gzprotobuf25.1protobuf-25.1.tar.gzabseil-cpp20230802.1abseil-cpp-20230802.1.tar.gzcann-cmakemaster-053cmake-master-053.tar.gz上表下载地址与仓库脚本保持一致具体 URL 可在 scripts/tools/third_lib_download.py 的my_urls列表中查看。注意protobuf 在脚本中下载的是v25.1发布版、eigen下载的是5.0.0-h0.trunk标签包离线手动下载时务必保证版本号与上表一致否则可能出现编译不兼容问题。若编译环境可以访问网络请参考下文“联网编译”编译脚本会自动联网下载第三方软件否则请参考“未联网编译”手动准备。联网编译编译 opbase 包进入项目根目录执行如下编译命令bash build.sh --pkg [-j${n}] # 如bash build.sh --pkg -j16-j可选指定编译线程数默认值为 8可加快编译速度若超过 CPU 核心数会自动调整为 CPU 核心数。该逻辑在 build.sh 中实现main函数读取/proc/cpuinfo统计核心数build.sh当-j传入的线程数大于核心数时自动收敛为核心数避免编译过载。若提示如下信息则说明编译成功Self-extractable archive cann-opbase_${cann_version}_linux-${arch}.run successfully created.编译成功后run 包存储于build_out目录下。从 build.sh 的实现可以看到脚本会创建build_out目录、以-DENABLE_UT/-DPACKAGE_TYPE/-DCMAKE_BUILD_TYPE等参数生成 CMake 配置build.sh最终执行make -j${THREAD_NUM} package完成打包并把产物收集到build_out。安装 opbase 包./cann-opbase_${cann_version}_linux-${arch}.run --full --install-path${install_path}${install_path}表示指定安装路径。若不指定默认安装路径为/usr/local/Ascend若指定一般安装在${install_path}目录下。卸载 opbase 包可选# 卸载命令 ./${install_path}/cann/share/info/opbase/script/uninstall.sh该卸载脚本在仓库中的对应实现位于 scripts/package/opbase/scripts/uninstall.sh与安装脚本install.sh、opp_install.sh等同属 opbase 包的安装运维脚本族scripts/package/opbase/scripts。未联网编译若在没有连接互联网的环境下编译需要提前准备好依赖的第三方软件再进行源码编译。具体过程如下第一步下载第三方依赖在联网环境中提前下载第三方软件目前有两种方式请按需选择方式 1根据上文“安装第三方依赖”的表格手动下载。若从其他地址下载注意版本号一致。方式 2通过 scripts/tools/third_lib_download.py 脚本一键下载。该脚本位于本项目scripts/tools/目录下载该脚本并执行python ${scripts_dir}/third_lib_download.py${scripts_dir}表示脚本存放路径下载的第三方软件包默认存放在当前脚本所在目录。从脚本实现看third_lib_download.py它依次遍历内置的下载地址列表、以urllib.request.urlretrieve逐个拉取到脚本所在目录并记录失败项便于排查。第二步编译算子包将下载好的第三方软件上传至离线环境可存放在third_party目录或自定义目录下。推荐前者其编译命令与联网编译场景下的命令一致。third_party 目录推荐请在项目根目录创建third_party目录若有则无需创建将第三方软件拷贝到该目录。此时编译命令与联网编译命令一致bash build.sh --pkg [-j${n}] # 如bash build.sh --pkg -j16之所以命令一致是因为 build.sh 将CANN_3RD_LIB_PATH的默认值设为${BASEPATH}/third_party根目录下的third_party正是脚本默认扫描路径。自定义目录在离线环境的任意位置新建${cann_3rd_lib_path}目录将第三方软件拷贝到该目录请确保该目录有权限访问mkdir -p ${cann_3rd_lib_path}此时在联网编译命令基础上额外增加--cann_3rd_lib_path${cann_3rd_lib_path}用于指定第三方软件路径。假设路径为/path/cann_3rd_lib_path编译命令如下bash build.sh --pkg --cann_3rd_lib_path${cann_3rd_lib_path} [-j${n}] # bash build.sh --pkg --cann_3rd_lib_path/path/cann_3rd_lib_path -j16 # bash build.sh --pkg --cann_3rd_lib_path/path/cann_3rd_lib_path从 build.sh 看--cann_3rd_lib_path参数会经过realpath处理为绝对路径并作为-DCANN_3RD_LIB_PATH传入 CMake 配置build.sh因此自定义路径必须真实存在且可访问。第三步安装 / 卸载算子包未联网和联网场景下编译得到的算子包结果一样默认存放于项目根目录build_out目录下安装和卸载的操作命令也一致具体参见上文“联网编译”的安装与卸载小节。深入理解 build.sh参数全景与脚本工作机制build.sh是本项目的构建脚本详见 docs/zh/appendix/build.md作用是将源代码自动编译、链接和配置最终生成可执行文件、库文件或可供安装的目标文件。使用前请确保环境变量已生效尤其是新打开的终端窗口# 默认路径安装以 root 用户为例 source /usr/local/Ascend/cann/set_env.sh除快速入门涉及的核心参数外build.sh --help还支持以下参数结合 build.sh 的usage输出整理如下参数名可选/必选参数说明-j${n}可选指定编译线程数默认 8超过 CPU 核心数时自动调整为核心数--verbose, -v可选查看 CMake 编译配置信息以VERBOSE1传入 make-O${n}可选编译优化级别支持 O0/O1/O2/O3默认 O2-u可选启用单元测试UT编译模式编译所有 UT 目标--help, -h可选打印脚本使用帮助信息--pkg可选生成安装包--pkg-type可选指定包类型run/rpm/deb/all默认 run仅可与 --pkg 联用build.sh 会在单独使用时报错--build-type可选构建类型Release/Debug默认 Release--cann_3rd_lib_path可选离线编译场景下第三方库存放的目录默认./third_party--cov可选启用 UT 代码覆盖率收集构建后调用 scripts/util/generate_cpp_cov.sh 生成报告--noexec可选仅编译单元测试二进制不自动执行编译后的 UT 可执行文件--make_clean可选执行完全清理删除 build 目录及 third_party 下相关文件执行后退出--asan可选开启 host 侧 ASANAddressSanitizer内存检测--extra-cmake-args可选透传额外 CMake 参数目前仅允许ENABLE_BUILD_DEVICE形式build.shbuild.sh的执行主流程build.sh遵循以下机制checkopts解析全部参数并初始化ASCEND_HOME_PATHroot 用户默认/usr/local/Ascend/cann若开启 UT/ST 模式则走build_ops_base_llt分支build.sh否则走build_ops_base打包分支CMake 配置阶段支持增量编译当CMakeCache.txt与 Makefile 已存在、且缓存的构建参数未变化时跳过重新配置build.sh参数变化则强制重配置提升日常迭代效率UT 执行阶段依次运行nnopbase_utest与op_common_utest并以退出码 / 日志中是否存在[ FAILED ]判定成败build.sh。本地验证执行 UT 用例源码包部署后可通过项目根目录build.sh执行 UT/ST 用例验证项目功能是否正常。说明执行 UT 用例依赖 googletest 单元测试框架支持通过命令行参数过滤指定测试用例更多用法参见 googletest 官方文档如--gtest_filterTestSuiteName.TestCaseName过滤语法。编译并执行 UT# 编译并执行所有的 UT 测试用例 bash build.sh -u # 编译所有的 UT 测试用例但不执行 bash build.sh -u --noexec # 执行 UT 并查看覆盖率 bash build.sh -u --cov执行完成后出现如下内容表示执行成功Global Global test environment tear-down [] ${n} tests from ${m} test suites ran. (${x} ms total) [ PASSED ] ${n} tests. Execute ops_base_ut successful.其中-u触发 build.sh 中的ENABLE_UTon与EXEC_TESTon--noexec则将EXEC_TEST置回off--cov会在测试通过后调用 scripts/util/generate_cpp_cov.sh 生成覆盖率报告build.sh。单独运行已编译的 UT 测试若已完成 UT 编译通过bash build.sh -u或bash build.sh -u --noexec可直接运行生成的测试二进制文件无需重新编译# 设置环境变量 source ${ASCEND_HOME_PATH}/bin/setenv.bash export LD_LIBRARY_PATHbuild/:$LD_LIBRARY_PATH # 运行 nnopbase UT 测试 cd build/tests/nnopbase/ut/ ./nnopbase_utest # 运行 op_common UT 测试 cd build/tests/op_common/ ./op_common_utest其中${ASCEND_HOME_PATH}为 CANN 安装路径默认为/usr/local/Ascend/cann。googletest 支持通过命令行参数过滤指定测试用例例如./nnopbase_utest --gtest_filterTestSuiteName.TestCaseNameUT 用例在仓库中的分布两类 UT 测试的源码与 CMake 配置分别位于 tests/nnopbase/ut 与 tests/op_common/ut对应 UT 目录 CMakeLists 及 tests/nnopbase/ut/main.cpp 测试入口。其中tests/nnopbase/ut覆盖composite_op、individual_op两大测试集合composite_op下包含数据类型工具如 tests/nnopbase/ut/composite_op/test_data_type_utils.cpp、浮点类型实现如test_float8_e4m3fn_benchmark.cpp等以及算子执行与缓存相关用例如test_op_executor.cpp、test_op_cache.cpp、test_kernel_launch.cpp等tests/nnopbase/ut/individual_op则聚焦单算子路径相关用例。tests/op_common/ut主要验证算子公共模块如 tests/op_common/ut/test_log.cpp、tests/op_common/ut/test_util.cpp。需要针对性排查某个模块时可结合上述目录与--gtest_filter精确圈定测试范围。常见问题与操作提示编译线程数建议-j默认 8脚本会自动与 CPU 核心数取小因此可以放心传较大的值若观察到系统负载过高可降低线程数重编。离线环境地址一致性问题手动下载第三方依赖时务必保持版本号与依赖清单一致protobuf/eigen 等对版本敏感混用版本可能导致补丁或编译失败。增量编译同一目录下重复执行build.sh时只要构建参数未变化即跳过 CMake 重配置需要彻底重编时使用--make_clean。UT 二进制运行失败排查运行nnopbase_utest/op_common_utest前务必先source ${ASCEND_HOME_PATH}/bin/setenv.bash并设置LD_LIBRARY_PATHbuild/否则可能因找不到运行库而启动失败。更多参数完整的build.sh参数语义可随时通过bash build.sh --help查看或阅读 docs/zh/appendix/build.md 的详细参数表。【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价