CANN/SHMEM SO库依赖指南
1. SO文件部署与使用指导【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem1.1 概述本指导面向Linux环境的开发与运维人员说明项目SO文件部署、依赖关系、排查与验证方法。1.1.1 部署原则1SO文件统一拷贝到用户项目自有目录示例${CUSTOM_PROJECT}/lib/。2运行时从项目自有目录加载不依赖系统公共目录。3bootstrap插件aclshmem_bootstrap_config_store.so、aclshmem_bootstrap_mpi.so在当前实现中优先按aclshmem.so同目录绝对路径加载部署时需与libshmem.so放置在同一目录。4其他外部运行时SO如CANN/OpenSSL相关仍需满足其各自的安装与可见性要求。1.2 必拷贝SO文件清单文件名功能说明是否为核心依赖libshmem.soSHMEM主功能库提供对外核心接口是aclshmem_bootstrap_config_store.so默认/UniqueID引导初始化能力是aclshmem_bootstrap_mpi.soMPI引导初始化能力仅MPI场景否libshmem_utils.so如构建产物存在公共工具与基础能力库是1.2.1 运行时动态加载的外部SO需在目标环境可见文件名来源用途libascend_hal.soCANN/驱动运行时HAL能力加载libascendcl.soCANN ToolkitACL接口加载libruntime.soCANN ToolkitRuntime接口加载libopapi.soCANN ToolkitOP API接口加载libra.soCANN通信组件HCCP相关能力libtsdclient.soCANN通信组件TSD能力libssl.soOpenSSLTLS能力libcrypto.soOpenSSL加密能力说明libssl.so与libcrypto.so由配置存储模块通过绝对路径动态加载路径来源于EP_OPENSSL_PATH。1.3 SO文件依赖关系Linux1.3.1 依赖层级说明强依赖缺失后程序启动失败或核心能力不可用。弱依赖缺失后仅对应扩展能力不可用。1.3.2 Mermaid依赖图示例1.4 部署步骤Linux1.4.1 步骤1确认编译产物输出到install/要求build.sh输出目录必须为install/不要使用历史默认输出目录。Linux命令CentOS/Ubuntu# 在项目根目录执行 bash build.sh install # 产物检查 ls -l install/lib/*.so1.4.2 步骤2拷贝SO到用户项目自有路径Linux命令CentOS/Ubuntu# 变量按需替换 CUSTOM_PROJECT/path/to/user_project mkdir -p ${CUSTOM_PROJECT}/lib cp -f install/lib/*.so ${CUSTOM_PROJECT}/lib/ chmod 755 ${CUSTOM_PROJECT}/lib/*.so说明按当前bootstrap加载逻辑以上部署方式即可满足bootstrap插件加载。1.4.3 推荐固定加载可见性用户运行侧为避免多版本库共存导致的加载漂移建议固定以下可见性策略1将libshmem.so、aclshmem_bootstrap_config_store.so、aclshmem_bootstrap_mpi.so、libshmem_utils.so统一部署到${CUSTOM_PROJECT}/lib/。2业务程序优先从${CUSTOM_PROJECT}/bin/启动确保主程序与目标库目录映射关系固定。3避免在系统公共目录保留同名旧版本SO避免命中历史残留库。4问题排查时使用LD_DEBUGlibs,files确认实际加载路径确保aclshmem_bootstrap_config_store.so来自与libshmem.so相同目录。补充说明两阶段加载逻辑阶段A动态链接阶段由系统动态链接器解析主程序与libshmem.so的NEEDED依赖实际装载先后由链接关系决定不作为接口语义约束。阶段B初始化阶段调用aclshmemx_init_attr后libshmem.so内部按bootstrap模式选择并加载aclshmem_bootstrap_config_store.so或aclshmem_bootstrap_mpi.so。Python包场景src/python/shmem/__init__.py存在导入阶段预加载行为该行为仅用于Python封装侧依赖兜底不能等同于libshmem.so初始化阶段的插件加载顺序语义。1.5 编译产物路径配置build.sh路径调整说明1.5.1 调整目标将build.sh中SO输出目录调整为install/替代旧默认路径如output/。1.5.2 修改示例可直接复制Linux示例# build.sh 片段示例 # 旧配置DESTDIR./output # 新配置DESTDIR./install DESTDIR./install INSTALL_LIB_DIR${DESTDIR}/lib mkdir -p ${INSTALL_LIB_DIR} # 示例安装编译产物 cp -f ${BUILD_DIR}/lib/*.so ${INSTALL_LIB_DIR}/1.5.3 调整后执行命令Linux命令CentOS/Ubuntubash build.sh install ls -l install/lib/1.6 依赖排查方法Linux1.6.1 使用ldd检查依赖项是否缺失Linux命令ldd ${CUSTOM_PROJECT}/lib/libshmem.so ldd ${CUSTOM_PROJECT}/lib/aclshmem_bootstrap_config_store.so结果解读出现not found依赖项缺失或路径错误。全部解析到具体绝对路径依赖关系正常。1.6.2 使用objdump检查NEEDED条目Linux命令objdump -p ${CUSTOM_PROJECT}/lib/libshmem.so | grep NEEDED objdump -p ${CUSTOM_PROJECT}/lib/aclshmem_bootstrap_config_store.so | grep NEEDED结果解读NEEDED展示该SO实际依赖的动态链接库。若关键依赖与部署清单不一致需回溯构建配置或重新打包。1.6.3 常见依赖问题与处置1依赖缺失补齐缺失SO到${CUSTOM_PROJECT}/lib/并重新验证ldd。2版本不匹配更换为与构建环境一致的SO版本并重测。3拷贝不完整重新执行cp -f install/lib/*.so ${CUSTOM_PROJECT}/lib/。1.7 验证方法Linux1.7.1 文件与权限验证ls -l ${CUSTOM_PROJECT}/lib/*.so预期目标SO齐全权限为-rwxr-xr-x755或更高可读可执行权限。1.7.2 依赖完整性验证ldd ${CUSTOM_PROJECT}/lib/libshmem.so | grep -i not found echo 依赖异常 || echo 依赖正常预期输出依赖正常。1.7.3 运行侧加载验证示例# 以业务程序为例替换为实际可执行文件 ${CUSTOM_PROJECT}/bin/app --version预期程序正常启动无SO加载失败日志。1.7.4 加载路径一致性验证推荐LD_DEBUGlibs,files ${CUSTOM_PROJECT}/bin/app --version 21 | grep -E libshmem.so|aclshmem_bootstrap_config_store.so预期aclshmem_bootstrap_config_store.so与libshmem.so来自同一部署目录插件在初始化阶段按bootstrap模式被正确加载。1.8 常见问题FAQ1.8.1 build.sh路径调整失败问题执行后产物仍输出到旧目录。处理检查build.sh中是否仍存在旧变量如DESTDIR./output。确认路径覆盖顺序避免后续逻辑再次改写DESTDIR。清理旧目录后重编译rm -rf build output install bash build.sh install1.8.2 项目路径权限不足问题拷贝或运行时报Permission denied。处理chmod -R urwX ${CUSTOM_PROJECT}/lib chmod 755 ${CUSTOM_PROJECT}/lib/*.so必要时由运维统一调整目录属主与属组。1.8.3 Linux不同发行版SO兼容问题CentOS与Ubuntu间直接复用SO后加载失败。处理建议在目标发行版上重新构建并重新部署install/lib/*.so。保证glibc版本与编译基线一致。使用ldd与objdump -p逐项核对依赖。【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考