尧图精选

CANN SiP 信号处理加速库编译与构建完全指南:build.sh 用法、目标芯片配置与依赖解析

🕒 发布时间:2026/9/18 20:14:49 📁 来源:尧图网络
CANN SiP 信号处理加速库编译与构建完全指南build.sh 用法、目标芯片配置与依赖解析【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库基于华为Ascend AI处理器专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip本文以 docs/compilation_build.md 为主线系统讲解 CANN SiPAscend Signal Processing Boost昇腾信号处理加速库从源码下载、环境准备到完整编译打包的全过程并深入结合仓库中的 build.sh、scripts/build_util.py、cmake/kernel_config.cmake 等源码剖析build.sh全部命令参数、build_config.json目标芯片架构配置机制、CANN 版本兼容策略与关键产物结构。读完本文你将掌握在本地完整编译 SiP 加速库、按硬件裁剪编译目标、通过自定义配置介入编译流程并理解编译产物.run 安装包、动态库、版本信息的来龙去脉。一、SiP 编译流程总览SiP 的编译入口是仓库根目录下的 build.sh基本编译命令为cd ${SiP_root_path} bash build.sh在默认构建模式下该命令会完成以下三件核心事情对应 build.sh 中的fn_build与fn_compile_and_pack两个函数拉取并编译 ascend-boost-comm昇腾分布式通信加速库仓产出 SiP 编译所依赖的mki组件与compiler组件存放于3rdparty/目录编译 SiP 加速库本身Host 算子库 各目标芯片的 Device 内核生成版本信息并创建安装包通过 makeself 工具打包生成Ascend-cann-SIP_${VERSION}_linux-${ARCH}.run可执行安装包同时生成output/version.info。提示由于编译过程需要联网下载依赖库ascend-boost-comm、catlass、googletest 等编译环境必须能够联网且该编译方式仅支持通过git clone下载的源码以 zip 压缩包方式下载的加速库不支持该编译方式。1.1 下载加速库源码git clone https://link.gitcode.com/i/20e246057ca9ccef1f346c3f2d4b08b2.git您可自行选择需要的分支例如master分支。1.2 编译前置依赖根据 README.md 的「环境构建」章节源码编译需要满足以下依赖版本要求python 3.7.0pyyaml、numpygcc / g 7.3.0cmake 3.16.0pigz安装后可提升打包速度建议版本 2.4dos2unixgoogletest仅执行 UT 时依赖建议版本 v1.14.0其中部分系统级依赖可通过根目录脚本一键安装bash install_deps.sh安装完成后再通过 requirements.txt 安装 Python 三方库依赖pip3 install -r requirements.txt完整依赖清单请参考根目录 requirements.txt 与 README.md 的「环境构建」章节。编译前还需加载对应的 CANN 环境toolkit 与 ops 包安装完成后执行source /usr/local/Ascend/cann/set_env.sh并确保ASCEND_HOME_PATH指向正确的 CANN 安装路径——构建过程本身不会改写源配置或第三方安装。二、build.sh 命令参数详解可以通过--help参数获取 build.sh 的完整功能说明Usage: bash build.sh [type] [options] type: --help Displays help message. --dev 仅编译算子库, 若type为空默认为dev. --clean 清除缓存和依赖的三方库. --ut 编译执行单元测试用例. options: --outputdir 指定编译输出目录默认为${repo}/output目录. --use_cxx11_abi0 设置-D_GLIBCXX_USE_CXX11_ABI0 (默认选项). --use_cxx11_abi1 设置-D_GLIBCXX_USE_CXX11_ABI1. --verbose 打印详细的编译命令. --mssanitizer 启用mssanitizer.各参数的实际行为对应 build.sh 中的fn_main主函数分支说明如下参数作用源码实现--dev默认仅编译算子库进入fn_build完整构建流程若省略 type 参数默认为--devbuild.sh--clean清除编译输出目录output、缓存目录build和依赖的三方库3rdparty即清空全部构建历史build.sh--ut编译并执行单元测试用例先安装 lcov代码覆盖率工具并下载 googletest再进入构建流程最后运行ops_unittest并生成测试结果 XMLbuild.sh--outputdir指定编译输出目录默认为${repo}/output若目录不存在会自动创建build.sh--use_cxx11_abi0/1设置-D_GLIBCXX_USE_CXX11_ABI宏默认 0。若环境已安装 torch脚本会自动探测 torch 的 ABI 编译选项并保持一致见fn_init_use_cxx11_abibuild.sh--verbose打印详细编译命令等价于设置VERBOSE1后执行make -jbuild.sh--mssanitizer启用 mssanitizer向 CMake 传递-DUSE_MSSANITIZERON编译选项build.sh此外 build.sh 还支持smoke_pr与smoke_all两种构建模式smoke_pr在编译完成后执行bash scripts/build_test.sh example_test编译运行 example 样例smoke_all则执行bash scripts/build_test.sh default全量样例测试。2.1 编译流程的内部细节从源码结构看bash build.sh的完整构建链路如下依赖检查fn_build检查3rdparty/mki与3rdparty/compiler是否存在不存在则克隆 ascend-boost-comm 依赖仓库-b master分支并调用fn_build_mki编译同时检查3rdparty/catlass缺失则克隆 catlass 仓库。CMake 配置执行cmake -B build -S .完成配置随后进入build目录执行fn_compile_and_pack。编译打包fn_compile_and_pack以make -j64或--verbose时的VERBOSE1 make -j编译make install安装最后由fn_make_run_package生成版本信息与 .run 安装包。其中fn_make_run_package会做三件事根据uname判断宿主架构x86_64 / aarch64、写入output/version.info含版本号、平台、分支、commit id、将install.sh、set_env.sh、uninstall.sh、filelist.csv等脚本拷贝进打包目录并通过 CANN 自带的 makeself 工具生成可执行安装包$OUTPUT_DIR/Ascend-cann-SIP_${VERSION}_linux-${ARCH}.run从 build.sh 可以看到当前源码默认的版本号为VERSION9.1.0、VERSION_B9.1.0安装日志默认路径为/var/log/cann_asdsip_log/日志文件名为cann_asdsip_install.log。三、编译目标芯片架构配置build_config.jsonSiP 库支持多种 Ascend 芯片架构编译时通过 configs/build_config.json 配置需要编译的目标芯片。该文件内容如下{ targets: { ascend310b: false, ascend310p: false, ascend910b: true, ascend950: true } }各字段含义说明芯片架构对应产品系列ascend310bAtlas 200I/500 A2 推理卡ascend310pAtlas 300I 推理卡ascend910bAtlas A2 训练/推理服务器ascend950Ascend 950PR/950DT将需要编译的目标设置为true不需要编译的目标设置为false。注意默认配置同时启用了ascend910b和ascend950两个目标。若您的运行环境仅支持其中一种芯片例如仅支持 Ascend910请将不支持的芯片架构设置为false否则编译不支持的芯片目标时会因硬件特性不匹配而失败典型报错如simd_vf function RegCompute must be a free function or static member function。3.1 配置文件的读取机制从源码看编译系统实际读取的配置文件由 scripts/build_util.py 中的get_build_target_list()函数决定其逻辑为未设置BUILD_CONFIG_FILE环境变量时默认读取项目根目录下的configs/build_config.json路径通过脚本自身位置推算设置该环境变量后则读取指定路径的配置文件读取后遍历targets字段将所有值为true的目标收集进设备列表若配置文件缺失、非法 JSON、缺少targets键或最终没有任何启用的目标均会记录错误并退出sys.exit(1)对应 build_util.py。项目依赖的mki组件位于3rdparty/mki/虽也带有configs/build_config.json但 SiP 编译流程以项目自身的配置文件为准无需修改3rdparty/mki/下的配置。3.2 自定义编译配置文件除修改项目自带的 configs/build_config.json 外还可通过环境变量BUILD_CONFIG_FILE指定自定义的配置文件路径使项目在编译时读取该文件而非默认配置。例如export BUILD_CONFIG_FILE/path/to/your/build_config.json bash build.sh3.3 CANN 版本与 A5ascend950的兼容策略CANN 版本低于 9.1.0 时即使配置启用了ascend950也会自动跳过全部 A5 设备内核。主机库和其他已启用架构的内核仍会编译此类安装包不支持在 A5 上执行算子。CANN 9.1.0 及以上版本按原配置编译 A5 内核。这是 SiP 的构建兼容策略并不表示 CANN 9.0 的所有 API 均不支持 A5。该策略在 cmake/kernel_config.cmake 的sip_configure_kernel_targets函数中有完整实现关键逻辑如下配置阶段会打印检测到的 CANN 版本和实际编译的目标架构SiP CANN version与SiP effective device targets版本优先来自当前ASCEND_HOME_PATH下的include/version/cann_version.h解析CANN_MAJOR/MINOR/PATCH宏若无法读取则使用compiler/version.info当请求的 soc 为ascend950时若无法确定 CANN 版本配置阶段直接报错FATAL_ERROR: Cannot determine CANN version for requested ascend950 kernels若版本低于 9.1.0则将对应内核开关置为 OFF 并跳过若过滤后没有任何兼容的设备目标保留配置会报错FATAL_ERROR: No device kernel target remains enabled。因此构建前请务必先加载对应的 CANN 环境source安装目录下的set_env.sh确保ASCEND_HOME_PATH指向正确构建过程本身不会改写源配置或第三方安装。3.4 编译选项补充从 cmake/host_config.cmake 可以看出Host 侧编译默认启用-Wall -Wextra -Werror当未定义NO_WERROR时而 build.sh 默认导出COMPILE_OPTIONS-DNO_WERRORON、C17 标准、-fPIC -fstack-protector-all等安全编译选项并开启 RELRO、NX 等链接安全属性。这也解释了为何--mssanitizer、--use_cxx11_abi等参数会直接透传到 CMake 构建中。四、SiP 关键文件与编译产物介绍4.1 scripts 目录文件作用scripts/install.sh安装脚本scripts/uninstall.sh卸载脚本scripts/release.sh全自动构建与打包脚本scripts/set_env.shSiP 的环境变量设置文件scripts/build_util.py编译辅助脚本负责读取编译目标配置build_config.json及算子二进制打包其中 scripts/build_util.py 还承担算子二进制元信息整理职责解析内核编译产物中的 JSON 描述文件包含二进制文件名、编译信息、算子参数大小、核类型、magic 等生成meta.ini元数据并按目标版本将.o与.json文件拷贝到对应目录——这部分逻辑可从copy_ascendc_code、copy_tbe_code_all_version、write_meta等函数确认。4.2 configs 目录文件作用configs/build_config.json编译目标芯片架构配置文件见上文第三章configs/op_list.yaml算子列表配置4.3 output 目录编译产物路径内容output/version.info版本信息文件由fn_make_run_package生成包含版本号、平台、分支与 commit idoutput/lib/libasdsip.soSiP 加速库的动态链接库文件output/lib/libmki.soMKI 库的动态链接库文件此外编译完成后会在output目录生成Ascend-cann-SIP_${VERSION}_linux-${ARCH}.run安装包它是通过 makeself 打包的、包含算子执行所需文件的可执行产物。用户可通过以下命令执行 run 包将包含算子信息的文件安装到指定目录# 确保安装包具有可执行权限 chmod x Ascend-cann-SIP_${version}_linux_${arch}.run # 安装命令 ./Ascend-cann-SIP_${version}_linux_${arch}.run --install --install-path${install_path} # 设置加速库环境变量 source ${install_path}/asdsip/set_env.sh五、环境变量设置文件 set_env.shscripts/set_env.sh 是加速库安装完成后提供的进程级环境变量设置脚本用于自动完成环境变量设置用户进程结束后自动失效。其核心逻辑为根据脚本自身所在位置推算asdsip目录路径导出ASDSIP_HOME_PATH指向${dir}/latest/并将ASDSIP_HOME_PATH/lib追加到LD_LIBRARY_PATH使动态链接库libasdsip.so可被正确加载export ASDSIP_HOME_PATH${asdsip_dir_path}/latest/ export LD_LIBRARY_PATH$ASDSIP_HOME_PATH/lib:$LD_LIBRARY_PATH加速库日志已部分适配 CANN 日志体系相关环境变量的含义说明可参考 CANN 社区版的「环境变量参考」文档。六、常见问题与排障要点结合本文涉及的源码逻辑编译过程中比较常见的几个问题及其定位思路如下编译不支持的芯片目标失败报错形如simd_vf function RegCompute must be a free function or static member function。原因是build_config.json中启用了运行环境不支持的芯片架构将不支持的架构改为false即可。请求 A5ascend950但无法确定 CANN 版本配置阶段直接报Cannot determine CANN version。请先sourceCANN 环境确保ASCEND_HOME_PATH下存在include/version/cann_version.h或compiler/version.info。过滤后没有兼容的设备目标报No device kernel target remains enabled。请启用一个兼容的目标或升级到 CANN 9.1.0。构建历史残留导致异常可执行bash build.sh --clean清除output、build缓存与3rdparty三方依赖后重新编译。更多命令介绍可查看仓库根目录 README.md 与 build.shAPI 使用与算子开发可进一步参考仓库中的 API 文档 与 从开发一个简单算子出发。【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库基于华为Ascend AI处理器专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →