config_store_etcd_test
功能说明
config_store_etcd_test 用于本地验证 config_store 的自动选举、多进程 rendezvous 以及多集群隔离能力。样例保持现有 smem_bm_init -> smem_bm_create -> smem_bm_join 流程,但重点是验证控制面收敛,不验证数据读写。样例支持两类 store URL:
tcp://HOST:PORT:本地调试 / 手工指定 serveretcd://HOST:PORT或etcd://HOST:PORT#instanceId:通过 etcd 做 server 选举;带#instanceId时隔离到独立集群
样例支持三种 opType:
0:SDMA1:DEVICE_RDMA2:HOST_TCP
其中 HOST_TCP 是当前机器推荐的本地 smoke 路径,可在 XPU_TYPE=NONE 下运行。
编译
依赖
- C++17 或以上
- CMake 3.16+
libhcom.soetcd与libetcd_client_v3.so仅在etcd://...模式需要
当前机器推荐编译命令
set -e
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_TEST=ON -DBUILD_ETCD_BACKEND=ON -DXPU_TYPE=NONE -DBUILD_HCOM=ON -DBUILD_WITH_RDMA=OFF -S . -B ./cmake-build-debug-config-store
cmake --build ./cmake-build-debug-config-store --target config_store_etcd_test -j
生成的可执行文件路径:
./cmake-build-debug-config-store/example/config_store/config_store_etcd_test
说明:
HOST_TCP不依赖ASCEND_HOME_PATH或npu-smi- 若需要
etcd://...模式,构建命令必须带-DBUILD_ETCD_BACKEND=ON etcd client动态库默认构建到./output/etcd/lib64/libetcd_client_v3.so
使用方法
命令格式
config_store_etcd_test <ipPort> <opType> <isA3> <hcomPort>
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
ipPort |
字符串 | store 地址,支持 tcp://HOST:PORT、etcd://HOST:PORT 或 etcd://HOST:PORT#instanceId |
opType |
整数 | 0=SDMA,1=DEVICE_RDMA,2=HOST_TCP |
isA3 |
整数 | 0 或 1;仅 SDMA/DEVICE_RDMA 模式生效,HOST_TCP 下会被忽略 |
hcomPort |
整数 | 本地 HCOM 端口,样例统一拼接为 tcp://127.0.0.1/0:<hcomPort> |
附加说明:
worldSize固定为16- HCOM URL 格式为
tcp://127.0.0.1/0:<hcomPort> 16表示该样例固定的最大 rank 容量,不要求必须启动满16个进程
退出方式
程序就绪后会阻塞在标准输入,输入以下任意命令退出:
exit
e
q
若标准输入为 EOF,样例在 join 完成后也会正常退出。
模式说明
HOST_TCP
- 当前机器推荐路径
- 不需要 NPU / CANN
smem_bm_create使用128MB DRAM + 0 HBMisA3参数不参与行为- 推荐用于本地
config_store/ 多集群 smoke 验证
SDMA / DEVICE_RDMA
- 继续沿用原有 NPU 探测逻辑
isA3=1时会做deviceId x 2- 需要可用的 NPU / CANN 运行环境
当前机器运行示例
1. 本地 tcp:// + HOST_TCP
先准备环境变量:
export HCOM_MAX_SLICE_SIZE=32768
export HCOM_RECV_DATA_SIZE=32768
export HYBM_RDMA_SWAP_SPACE_SIZE=32768
在多个终端执行相同命令即可;实际参与进程数按本地验证需要决定,但不要超过 16:
./cmake-build-debug-config-store/example/config_store/config_store_etcd_test tcp://127.0.0.1:8573 2 0 10003
2. 本地 etcd:// + HOST_TCP
先启动本机 etcd:
etcd --name config-store-local --data-dir /tmp/config-store-etcd --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:2380 --initial-advertise-peer-urls http://127.0.0.1:2380 --initial-cluster config-store-local=http://127.0.0.1:2380
默认按上文构建出的 build-tree 可执行文件运行时,已带 RUNPATH 指向 ./output/etcd/lib64。若你换了运行目录、做了单独安装,或运行时仍提示找不到 libetcd_client_v3.so,再导出:
export LD_LIBRARY_PATH="$(pwd)/output/etcd/lib64:$LD_LIBRARY_PATH"
再在多个终端执行相同命令;实际参与进程数按本地验证需要决定,但不要超过 16:
export HCOM_MAX_SLICE_SIZE=32768
export HCOM_RECV_DATA_SIZE=32768
export HYBM_RDMA_SWAP_SPACE_SIZE=32768
./cmake-build-debug-config-store/example/config_store/config_store_etcd_test etcd://127.0.0.1:2379 2 0 10003
若需要在同一 etcd 下顺序验证两个彼此隔离的集群,可分别使用不同的 #instanceId。每个集群按需启动多个进程即可:
./cmake-build-debug-config-store/example/config_store/config_store_etcd_test etcd://127.0.0.1:2379#cluster-a 2 0 10003
./cmake-build-debug-config-store/example/config_store/config_store_etcd_test etcd://127.0.0.1:2379#cluster-b 2 0 10013
说明:
#instanceId用于 etcd 多集群隔离hcomPort用于本地 HCOM 通道隔离;若同机并行起多个集群,需为不同集群指定不同端口
通过判据
- 返回码为
0 - 日志包含
All ranks joined, ready - 退出后日志包含
Process exited normally