1.修复单卡多进程开启后,当子通信域的rankid指向的物理卡与全局通信域一样的rankid指向的物理卡不一致时,子通信域查询监听端口异常导致建链失败的问题。 取消进程共享的静态变量端口映射map,改用跟通信域独立关联的二重map,在初始化全局通信域/子通信域的时候,分别维护通信域所用卡的端口映射map。 2.修复单卡多进程开启后,混跑DPU自定义算子时,由于自定义算子持有自身的空壳SocketManager, 从而无法从通信域中的SocketManager查询监听端口导致建链失败的问题。 兼容当前存在两个socketmanager的代码架构,使得当存在两个socketmanger的时候,回归成关闭socketmanager的功能,并且保证单卡单进程总能成功。 3.删除发送两次localranktable的逻辑,改为在首次发送localranktable之前通过topo.json来推理出哪些ip地址启动监听,并抢占独立的端口,减少性能损失。
本MR修复单进程多通信域/多线程/子通信域场景下单卡多进程有可能失败的问题,核心变更是将端口映射从全局静态的rankId -> port一维映射重构为实例级的rankId -> (IpAddress -> port)二维映射,使每个网络接口拥有独立的监听端口。主要变更:
socket_manager.cc/h: 端口映射从静态unordered_map<u32,u32>改为实例成员unordered_map<u32, unordered_map<IpAddress, u32>>;ServerInitAll重构为基于PhyTopo图遍历的端口抢占逻辑;新增GetDeviceListenPort和GetSubCommDeviceServerListenPortMap communicator_impl.cc/h: SetDeviceServerListenPortMap调用从初始化流程移入InitSocketManager和CreateSubComm;GetTopoFilePath改为static;删除InitDeviceListenPort address_info.cc/h: 新增listenPort字段并加入二进制序列化 rank_table_info.cc/h: GetRankDeviceListenPortMap返回类型从一维map改为二维map rank_info_detect相关: 删除二阶段Update流程,端口抢占提前到Setup阶段完成 op_base_v2.cc: 删除RootInfoUpdate函数及调用
NA
1.rootinfo初始化通信域,单进程子通信域情况下配置环境变量HCCL_NPU_SOCKET_PORT_RANGE=auto下发通信算子成功。 2.rootinfo初始化通信域,DPU组网时执行下发通信算子成功。 3.rootinfo初始化通信域,单进程多通信域情况下配置环境变量HCCL_NPU_SOCKET_PORT_RANGE=auto下发通信算子成功。
新增两个UT用例,覆盖src/legacy/framework/resource_manager/socket/socket_manager.cc文件的SocketManager::ServerInitAll函数。 Ut_ServerInitAll_Skip_Init_When_Env_not_Config:覆盖不配置环境变量的情况。 Ut_ServerInitAll_Skip_Init_When_Env_Config:覆盖配置环境变量的情况。
N/A