Repast4Py中Agent跨Rank移动时UndirectedSharedNetwork同步错误排查
Repast4Py多进程Agent跨Rank移动时网络同步KeyError问题
基于Repast4Py教程的谣言模型,我扩展实现了二维连续空间内的Agent移动功能,Agent行为同时依赖邻近空间内的Agent以及社交网络中的远程Agent状态。为此在Context中添加了UndirectedSharedNetwork(通过read_network读取输入文件)和SharedCSpace投影。但当Agent从一个Rank移动到另一个Rank时,出现网络同步错误,错误栈如下:
File "/home/works/lib/python3.10/site-packages/repast4py/context.py", line 297, in synchronize self._synch_ghosts(restore_agent) File "/home/works/lib/python3.10/site-packages/repast4py/context.py", line 259, in _synch_ghosts self._update_ghosts() File "/home/works/lib/python3.10/site-packages/repast4py/context.py", line 241, in _update_ghosts ghost = self._agent_manager._ghost_agents[update[0]] KeyError: (0, 0, 0)
运行命令:mpirun -n 4 python TestsPy3.py rumor_model.yaml
排查与解决建议
- 检查
UndirectedSharedNetwork的同步逻辑:Agent跨Rank移动时,需确保网络中关联的幽灵Agent状态被正确更新——源Rank要移除该Agent的所有网络关联,目标Rank要同步添加对应幽灵Agent的网络关系,避免出现无效的Agent ID引用 - 验证网络数据的多Rank分片正确性:确认
read_network读取的网络数据在多Rank环境下被正确分片,每个Rank上的本地Agent及其关联的远程幽灵Agent在初始化时就已被正确加载,不存在未初始化的Agent ID - 调整投影同步顺序:确保
SharedCSpace的移动同步完成后,再执行UndirectedSharedNetwork的同步操作。Repast4Py中多投影的同步顺序会影响幽灵Agent的生命周期,需遵循空间投影优先、网络投影随后的顺序 - 检查Agent序列化逻辑:如果自定义了Agent属性,需确保这些属性在跨Rank移动时被正确序列化/反序列化,避免幽灵Agent实例不完整导致无法被AgentManager找到
- 调试幽灵Agent生命周期:在Agent移动前后,打印各Rank上
_agent_manager._ghost_agents的内容,追踪(0, 0, 0)这个Agent ID是否在移动过程中被正确创建或销毁,定位问题发生的具体阶段
内容的提问来源于stack exchange,提问作者smr
相关产品推荐
相关产品推荐

