快速开始【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem介绍本系统主要面向昇腾平台上的模型和算子开发者提供便携易用的多机多卡内存访问方式方便用户开发在卡间同步数据加速通信或通算融合类算子开发。软件架构共享内存库接口主要分为host和device接口部分host侧接口提供初始化、内存管理、通信域管理以及同步功能。device侧接口提供内存访问、同步以及通信域管理功能。目录结构说明详细介绍见code_organization├── 3rdparty // 依赖的第三方库 ├── docs // 文档 ├── examples // 使用样例 ├── include // 头文件 ├── scripts // 相关脚本 ├── src // 源代码 └── tests // 测试用例软件硬件配套说明硬件型号支持Atlas 800I A2/A3 系列产品Atlas 800T A2/A3 系列产品平台aarch64/x86配套软件驱动固件 Ascend HDK 25.0.RC1.1、 CANN 8.3.RC1 及之后版本。参考《CANN软件安装指南》安装CANN开发套件包以及配套固件和驱动cmake 3.19GLIBC 2.28快速上手设置CANN环境变量# root用户安装默认路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh共享内存库编译编译共享内存库设置共享内存库环境变量cd shmem bash scripts/build.sh source install/set_env.shrun包使用软件包名为SHMEM_{version}_linux-{arch}.run其中{version}表示软件版本号{arch}表示CPU架构。安装run包需要依赖cann环境chmod x 软件包名.run # 增加对软件包的可执行权限 ./软件包名.run --check # 校验软件包安装文件的一致性和完整性 ./软件包名.run --install # 安装软件可使用--help查询相关安装选项出现提示xxx install success!则安装成功shmem 默认开启tls通信加密。如果需要关闭需要调用接口主动关闭int32_t ret aclshmemx_set_conf_store_tls(false, null, 0);具体细节详见安全声明章节执行一个样例matmul_allreduce算子。1.在shmem/目录编译:bash scripts/build.sh -examples2.在shmem/examples/matmul_allreduce目录执行demo:bash scripts/run.sh -ranks 2 -M 1024 -K 2048 -N 8192注example及其他样例代码仅供参考在生产环境中请谨慎使用。## 功能自测用例 - 共享内存库接口单元测试 在工程目录下执行 sh bash scripts/build.sh -uttests bash scripts/run.shrun.sh脚本提供-ranks -ipport -test_filter等参数自定义执行用例的卡数、ip端口、gtest_filter等例# 8卡ip:port 127.0.0.1:8666运行所有*Init*用例 bash scripts/run.sh -ranks 8 -ipport tcp://127.0.0.1:8666 -test_filter Initpython侧test用例 python接口API列表在scripts目录下编译的时候带上build python的选项bash build.sh -python_extension在install目录下source环境变量source set_env.sh在src/python目录下进行setup获取到wheel安装包python3 setup.py bdist_wheel在src/python/dist目录下安装wheel包pip3 install shmem-xxx.whl --force-reinstall设置是否开启TLS认证默认开启若关闭TLS认证请使用如下接口import shmem as shm shm.set_conf_store_tls(False, ) # 关闭tls认证import shmem as shm tls_info xxx shm.set_conf_store_tls(True, tls_info) # 开启TLS认证使用torchrun运行测试demotorchrun --nproc-per-nodek test.py // k为想运行的ranksize看到日志中打印出“test.py running success!”即为demo运行成功unique id 初始化方式注使用unique id的接口初始化需要手动配置环境变量SHMEM_UID_SESSION_ID或者SHMEM_UID_SOCK_IFNAME同时配置时只读SHMEM_UID_SESSION_ID SHMEM_UID_SESSION_ID配置示例 SHMEM_UID_SESSION_ID127.0.0.1:1234 SHMEM_UID_SESSION_ID[6666:6666:6666:6666:6666:6666:6666:6666]:886 SHMEM_UID_SOCK_IFNAME配置示例 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet4 取ipv4 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet6 取ipv6 不配置默认取eth:inet4python初始化例子import shmem as ash # xxx uid ash.aclshmem_get_unique_id() ret ash.aclshmem_init_using_unique_id(rank, world_size, mem_size, uid) # xxx准备以上启动代码init.py后使用torchrun --nproc-per-node 8 init.py其中进程数 8 根据实际需要改动更详细的例子请参考unique_id_test.py文件。c初始化例子aclshmemx_uniqueid_t uid; aclshmemx_init_attr_t *attr; int ret aclshmemx_get_uniqueid(uid); ret aclshmemx_set_attr_uniqueid_args(my_pe, n_pes, mem_size, uid, attr);SHMEM方式注使用unique id的接口初始化可以手动配置环境变量SHMEM_UID_SESSION_ID或者SHMEM_UID_SOCK_IFNAME同时配置时只读SHMEM_UID_SESSION_ID都不配置会自动搜索可用网口。 SHMEM_UID_SESSION_ID配置示例 SHMEM_UID_SESSION_ID127.0.0.1:1234 SHMEM_UID_SESSION_ID[6666:6666:6666:6666:6666:6666:6666:6666]:886 SHMEM_UID_SESSION_ID[6666:6666:6666:6666:6666:6666:6666:6666%eth]:886 SHMEM_UID_SOCK_IFNAME配置示例 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet4 取ipv4 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet6 取ipv6 不配置默认取inet4自动搜索可用网口搜索优先级非docker、lodockerlo。c初始化例子aclshmemx_uniqueid_t uid; aclshmemx_init_attr_t *attr; int ret aclshmemx_get_uniqueid(uid); shmemx_set_attr_uniqueid_args(rank, rank_size, local_mem_size, uid, attributes); status aclshmemx_init_attr(ACLSHMEMX_INIT_WITH_UNIQUEID, attributes);【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN/SHMEM快速使用指南
发布时间:2026/7/16 21:16:13
快速开始【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem介绍本系统主要面向昇腾平台上的模型和算子开发者提供便携易用的多机多卡内存访问方式方便用户开发在卡间同步数据加速通信或通算融合类算子开发。软件架构共享内存库接口主要分为host和device接口部分host侧接口提供初始化、内存管理、通信域管理以及同步功能。device侧接口提供内存访问、同步以及通信域管理功能。目录结构说明详细介绍见code_organization├── 3rdparty // 依赖的第三方库 ├── docs // 文档 ├── examples // 使用样例 ├── include // 头文件 ├── scripts // 相关脚本 ├── src // 源代码 └── tests // 测试用例软件硬件配套说明硬件型号支持Atlas 800I A2/A3 系列产品Atlas 800T A2/A3 系列产品平台aarch64/x86配套软件驱动固件 Ascend HDK 25.0.RC1.1、 CANN 8.3.RC1 及之后版本。参考《CANN软件安装指南》安装CANN开发套件包以及配套固件和驱动cmake 3.19GLIBC 2.28快速上手设置CANN环境变量# root用户安装默认路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh共享内存库编译编译共享内存库设置共享内存库环境变量cd shmem bash scripts/build.sh source install/set_env.shrun包使用软件包名为SHMEM_{version}_linux-{arch}.run其中{version}表示软件版本号{arch}表示CPU架构。安装run包需要依赖cann环境chmod x 软件包名.run # 增加对软件包的可执行权限 ./软件包名.run --check # 校验软件包安装文件的一致性和完整性 ./软件包名.run --install # 安装软件可使用--help查询相关安装选项出现提示xxx install success!则安装成功shmem 默认开启tls通信加密。如果需要关闭需要调用接口主动关闭int32_t ret aclshmemx_set_conf_store_tls(false, null, 0);具体细节详见安全声明章节执行一个样例matmul_allreduce算子。1.在shmem/目录编译:bash scripts/build.sh -examples2.在shmem/examples/matmul_allreduce目录执行demo:bash scripts/run.sh -ranks 2 -M 1024 -K 2048 -N 8192注example及其他样例代码仅供参考在生产环境中请谨慎使用。## 功能自测用例 - 共享内存库接口单元测试 在工程目录下执行 sh bash scripts/build.sh -uttests bash scripts/run.shrun.sh脚本提供-ranks -ipport -test_filter等参数自定义执行用例的卡数、ip端口、gtest_filter等例# 8卡ip:port 127.0.0.1:8666运行所有*Init*用例 bash scripts/run.sh -ranks 8 -ipport tcp://127.0.0.1:8666 -test_filter Initpython侧test用例 python接口API列表在scripts目录下编译的时候带上build python的选项bash build.sh -python_extension在install目录下source环境变量source set_env.sh在src/python目录下进行setup获取到wheel安装包python3 setup.py bdist_wheel在src/python/dist目录下安装wheel包pip3 install shmem-xxx.whl --force-reinstall设置是否开启TLS认证默认开启若关闭TLS认证请使用如下接口import shmem as shm shm.set_conf_store_tls(False, ) # 关闭tls认证import shmem as shm tls_info xxx shm.set_conf_store_tls(True, tls_info) # 开启TLS认证使用torchrun运行测试demotorchrun --nproc-per-nodek test.py // k为想运行的ranksize看到日志中打印出“test.py running success!”即为demo运行成功unique id 初始化方式注使用unique id的接口初始化需要手动配置环境变量SHMEM_UID_SESSION_ID或者SHMEM_UID_SOCK_IFNAME同时配置时只读SHMEM_UID_SESSION_ID SHMEM_UID_SESSION_ID配置示例 SHMEM_UID_SESSION_ID127.0.0.1:1234 SHMEM_UID_SESSION_ID[6666:6666:6666:6666:6666:6666:6666:6666]:886 SHMEM_UID_SOCK_IFNAME配置示例 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet4 取ipv4 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet6 取ipv6 不配置默认取eth:inet4python初始化例子import shmem as ash # xxx uid ash.aclshmem_get_unique_id() ret ash.aclshmem_init_using_unique_id(rank, world_size, mem_size, uid) # xxx准备以上启动代码init.py后使用torchrun --nproc-per-node 8 init.py其中进程数 8 根据实际需要改动更详细的例子请参考unique_id_test.py文件。c初始化例子aclshmemx_uniqueid_t uid; aclshmemx_init_attr_t *attr; int ret aclshmemx_get_uniqueid(uid); ret aclshmemx_set_attr_uniqueid_args(my_pe, n_pes, mem_size, uid, attr);SHMEM方式注使用unique id的接口初始化可以手动配置环境变量SHMEM_UID_SESSION_ID或者SHMEM_UID_SOCK_IFNAME同时配置时只读SHMEM_UID_SESSION_ID都不配置会自动搜索可用网口。 SHMEM_UID_SESSION_ID配置示例 SHMEM_UID_SESSION_ID127.0.0.1:1234 SHMEM_UID_SESSION_ID[6666:6666:6666:6666:6666:6666:6666:6666]:886 SHMEM_UID_SESSION_ID[6666:6666:6666:6666:6666:6666:6666:6666%eth]:886 SHMEM_UID_SOCK_IFNAME配置示例 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet4 取ipv4 SHMEM_UID_SOCK_IFNAMEenpxxxx:inet6 取ipv6 不配置默认取inet4自动搜索可用网口搜索优先级非docker、lodockerlo。c初始化例子aclshmemx_uniqueid_t uid; aclshmemx_init_attr_t *attr; int ret aclshmemx_get_uniqueid(uid); shmemx_set_attr_uniqueid_args(rank, rank_size, local_mem_size, uid, attributes); status aclshmemx_init_attr(ACLSHMEMX_INIT_WITH_UNIQUEID, attributes);【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考