CANN opbase v8.5.0-beta.1 版本解析与离线编译实战指南
2026/9/18 22:09:06 网站建设 项目流程

CANN opbase v8.5.0-beta.1 版本解析与离线编译实战指南

【免费下载链接】opbase本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase

导读

本文以 CANN opbase 仓库的 CHANGELOG.md 为主体,全面解析 opbase 首个 Beta 版本 v8.5.0-beta.1 的发布内容:版本目录结构、CANN 开源子包配套关系、关键特性与问题修复。同时结合仓库中的构建脚本、构建参数文档与第三方依赖下载工具,深入讲解该版本新增的"离线编译"能力——包括如何准备第三方依赖、在无网络环境下完成 opbase 源码构建与包安装,以及如何通过 UT 进行本地验证,帮助开发者在受限网络环境中顺利完成 opbase 的编译部署。

一、版本概览:opbase 首个 Beta 版本

opbase 是 CANN(Compute Architecture for Neural Networks)算子库依赖的基础框架库,为算子提供公共的头文件、结构体与基础调度能力。根据 CHANGELOG.md,v8.5.0-beta.1 是 opbase 发布的首个 Beta 版本,发布日期为 2025-12-30。该版本引入了多项新增特性、问题修复及性能改进,目前仍处于测试阶段。

从仓库根目录的 version.cmake 可以看到 opbase 构建与运行所依赖的 CANN 组件:

  • 编译依赖:runtime、metadef、bisheng-compiler、asc-devkit、ge-executor、hcomm(均要求版本>=8.5);
  • 运行时依赖:runtime、ge-executor、metadef、asc-devkit、bisheng-compiler(同样要求>=8.5)。

这意味着 v8.5.0-beta.1 版本与 CANN 8.5.0 系列组件构成完整的配套关系,使用时需要保证环境中的 CANN 版本与本仓库源码标签一致。

二、版本目录结构

v8.5.0-beta.1 发布包按 CPU 架构分为两个目录,每个目录下通过ops子目录归档算子子包:

版本目录说明如下: ├── aarch64 # CPU为ARM类型 │ ├── ops # ops算子包目录,用于归档算子子包 │ ├── ... ├── x86_64 # CPU为X86类型 │ ├── ops # ops算子包目录,用于归档算子子包 │ ├── ...

选择版本目录时,需要根据部署环境 CPU 架构确定:ARM 架构选择aarch64,X86 架构选择x86_64。这一架构划分与构建产物命名一致——编译成功后生成的安装包为cann-opbase_${cann_version}_linux-${arch}.run(见 docs/QUICKSTART.md),其中${arch}即对应上述架构。

三、CANN 开源子包版本配套关系

v8.5.0-beta.1 版本遵循 CANN 开源子包整体配套发布原则,各子包源码标签与配套 CANN 版本保持一致,核心配套关系如下:

CANN子包版本版本源码标签配套CANN版本
cann-opbase 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-oam-tools 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-asc-tools 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-asc-devkit 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-pto-isa 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-ge-compiler 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-ge-executor 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-graph-autofusion 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-metadef 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-dflow-executor 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-hcomm 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1
cann-npu-runtime 8.5.0-beta.1v8.5.0-beta.1CANN 8.5.0-beta.1

配套要求可归纳为以下两点实战注意事项:

  1. 源码标签与 CANN 版本必须匹配:下载源码时应选择与 CANN 软件版本配套的分支标签,而非直接使用 master 分支。仓库 README.md 明确提示:"为确保您的源码定制开发顺利进行,请选择配套的 CANN 版本与 Gitcode 标签源码,使用 master 分支可能存在版本不匹配的风险。"
  2. 编译依赖按版本下限校验:构建时会通过check_cann_pkg_build_deps检查已安装的依赖包版本(见 CMakeLists.txt),依赖组件版本低于>=8.5时编译将无法通过。

四、关键特性:支持离线编译

4.1 特性背景

v8.5.0-beta.1 的两项关键特性均围绕离线编译展开:

  • 【工程能力】支持离线编译;
  • 【资料优化】新增离线编译说明文档。

离线编译的意义在于:opbase 的构建过程依赖 json、eigen、protobuf 等多个第三方开源软件(详见下文),在无法访问互联网的现场机器上,这些依赖无法自动下载,导致编译失败。本版本通过支持指定本地第三方依赖目录的方式,解决了这一问题。

4.2 第三方依赖清单

根据 docs/QUICKSTART.md,opbase 编译依赖的第三方开源软件如下:

开源软件版本用途说明
json3.11.3C++ JSON 解析库
makeself2.5.0生成自解压 run 安装包
eigen5.0.0C++ 线性代数模板库
protobuf25.1序列化协议库
abseil-cpp20230802.1protobuf 依赖的基础库
cann-cmakemaster-053CANN 公共 CMake 构建框架

4.3 离线编译完整流程

步骤 1:在联网环境下载第三方依赖

提供两种下载方式,推荐使用仓库自带的下载脚本。脚本 scripts/tools/third_lib_download.py 内置了上述全部第三方软件的下载地址,下载的文件默认保存在脚本所在目录:

python ${scripts_dir}/third_lib_download.py

其中${scripts_dir}为脚本存放路径。脚本下载失败时会打印失败的 URL 列表并以非零状态退出,便于排查。

若选择手动下载方式,请严格按照上表版本号获取对应软件包(从其他地址下载时同样需要保证版本号一致)。

步骤 2:将第三方软件上传至离线环境

方式 A:使用项目根目录third_party目录(推荐)

在项目根目录创建third_party目录(若已存在则无需创建),将第三方软件拷贝到该目录。此时编译命令与联网编译场景完全一致:

bash build.sh --pkg [-j${n}] # 如:bash build.sh --pkg -j16

方式 B:使用自定义目录

在离线环境任意位置创建${cann_3rd_lib_path}目录,将第三方软件拷贝到该目录,并确保目录具备访问权限:

mkdir -p ${cann_3rd_lib_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

其中--cann_3rd_lib_path是 docs/zh/appendix/build.md 中专门为离线编译场景提供的可选参数,用于指定第三方库存放的目录。

步骤 3:安装/卸载算子包

离线与联网场景编译得到的算子包结果一致,默认存放于项目根目录build_out目录下。编译成功时会输出如下提示:

Self-extractable archive "cann-opbase_${cann_version}_linux-${arch}.run" successfully created.

安装命令:

./cann-opbase_${cann_version}_linux-${arch}.run --full --install-path=${install_path}
  • ${install_path}表示指定安装路径;若不指定,默认安装路径为/usr/local/Ascend
  • 若指定安装路径,包一般安装在${install_path}目录下。

卸载命令(可选):

# 卸载命令 ./${install_path}/cann/share/info/opbase/script/uninstall.sh

五、build.sh 构建参数全解

无论是联网还是离线编译,opbase 的统一构建入口都是项目根目录的build.sh脚本。该脚本将源代码自动编译、链接和配置,最终生成可执行文件、库文件或安装包。执行bash build.sh --help可查看全部功能参数。

使用前需确保环境变量已生效,尤其是新打开的终端窗口:

# 默认路径安装,以root用户为例 source /usr/local/Ascend/cann/set_env.sh

参数说明表

参数名可选/必选参数说明
-j${n}可选指定编译线程数,${n}为具体线程数,默认值为8(如:-j8);若线程数超过CPU核心数,会自动调整为CPU核心数。
--verbose,-v可选查看CMake编译配置信息。
-O${n}可选指定编译优化级别,支持O0/O1/O2/O3(如:-O3),${n}为优化级别标识。
-u可选启用单元测试(UT)编译模式,编译所有UT目标。
--help,-h可选打印脚本使用帮助信息。
--build-type可选启用调试模式。可选类型:Release/Debug,默认为Release。
--cov可选预留参数,开发者暂不需要关注。
--noexec可选仅编译单元测试二进制文件,不自动执行编译后的UT可执行文件。
--make_clean可选执行完全清理操作(删除所有编译相关文件),执行后脚本退出。
--cann_3rd_lib_path可选离线编译场景下第三方库存放的目录。
--pkg可选生成安装包。
--asan可选开启host侧ASAN(AddressSanitizer)内存检测功能。

构建参数与源码的对应关系

从源码看,部分参数在底层 CMake 配置中有明确映射:

  • 优化级别与默认值:根目录 CMakeLists.txt 通过PACKAGE_TYPE(run/rpm/deb/all,默认 run)控制打包类型;cmake/config.cmake 中,UT/ST 模式下默认编译优化级别为-O0,非测试模式默认-O2,同时会附加-Wall-Wextra-ftrapv-fstack-protector-strong等一系列严格告警与安全加固编译选项,并针对 GNU/Clang 编译器差异追加不同告警项。
  • 构建/运行依赖:version.cmake 中通过set_cann_build_dependenciesset_cann_run_dependencies声明了 opbase 对 runtime、metadef、ge-executor 等 CANN 组件的版本要求(>=8.5),构建时会进行依赖校验。
  • 编译模式选择ENABLE_UT/ENABLE_ST开启时进入测试构建分支并编译 tests 目录,否则构建 src/nnopbase 并进入打包流程(见 CMakeLists.txt)。

六、问题修复解读

v8.5.0-beta.1 版本修复了两类构建问题,均与源码构建环境直接相关:

  1. 现场机器离线状态下进行 opbase 编译报错:这正是本版本新增"支持离线编译"能力的直接动因。修复后,开发者可通过--cann_3rd_lib_path参数或项目根目录third_party目录提前提供第三方依赖,从而在无网络环境中完成编译。
  2. opbase 包编译报错 non-constant-expression cannot be narrowed:这是 C++ 编译过程中常量表达式窄化转换导致的编译错误,通常与整数类型宽度不一致的隐式转换有关。修复后,在默认编译选项(含-Wall -Wextra等严格告警)下可正常完成编译。

七、离线环境下的 UT 本地验证

源码包部署后,可通过build.sh执行 UT/ST 用例验证项目功能是否正常,此过程同样适用于离线环境(前提是已提前提供 googletest 等测试依赖)。

# 编译并执行所有的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.

若已完成 UT 编译,也可直接运行生成的测试二进制文件:

# 设置环境变量 source ${ASCEND_HOME_PATH}/bin/setenv.bash export LD_LIBRARY_PATH=build/:$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。UT 执行依赖 googletest 框架(建议版本 release-1.11.0),并支持通过--gtest_filter=TestSuiteName.TestCaseName过滤运行指定测试用例。

八、总结

v8.5.0-beta.1 作为 opbase 的首个 Beta 版本,确立了版本配套体系与工程化构建能力,其核心增量在于离线编译支持:通过--cann_3rd_lib_path参数与配套的第三方依赖一键下载脚本,开发者可以在物理隔离或弱网环境中完成 opbase 包的完整构建、安装与验证。对于在离线现场进行算子库定制的开发者,建议遵循"配套标签源码 + 提前准备第三方依赖 + build.sh 参数化构建"的完整流程,并使用 UT 用例进行功能自检。

后续版本迭代可关注仓库 CHANGELOG.md 的更新,以及 docs/README.md 文档中心中算子调用指南、opbase API 类文档(aclnn 公共接口、nnopbase 接口、op_common 接口)等进阶内容。

【免费下载链接】opbase本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询