Skip to content

修复设备管理在多线程环境下的线程安全问题#1216

Open
PlumBlossomMaid wants to merge 1 commit intoPaddlePaddle:masterfrom
PlumBlossomMaid:device_thread_safety
Open

修复设备管理在多线程环境下的线程安全问题#1216
PlumBlossomMaid wants to merge 1 commit intoPaddlePaddle:masterfrom
PlumBlossomMaid:device_thread_safety

Conversation

@PlumBlossomMaid
Copy link
Contributor

@PlumBlossomMaid PlumBlossomMaid commented Feb 16, 2026

修复设备管理在多线程环境下的线程安全问题

🎉 新春贺词
值此丙午马年除夕之际,谨向 Paddle 团队全体成员致以诚挚的新春祝福!愿我们在新的一年里如骏马奔腾,共同推动飞桨框架的技术创新与突破!🏮🧧


本次提交修复了 Paddle 框架在多线程环境下设备管理的线程安全问题。主要改动如下:

  1. 问题背景:原有的设备管理使用全局变量 _global_expected_place_,在多线程环境下存在竞态条件,不同线程的设备设置会相互污染。

  2. 解决方案:采用双层设备管理设计

    • 主线程继续使用全局变量 _global_expected_place_,保持向后兼容
    • 子线程使用线程局部存储 thread_expected_place_(基于 GlobalThreadLocal 扩展)
    • 查找优先级:子线程优先使用自己的线程局部设备,未设置时回退到全局设备
  3. 核心改动

    • GlobalThreadLocal 类中增加 thread_expected_place_ 字段
    • 重构 _current_expected_place_() 函数,实现线程类型判断和两级查找
    • 重构 _set_expected_place() 函数,根据线程类型更新对应存储位置
    • 新增 _is_main_thread() 辅助函数用于线程类型判断
  4. 影响范围

    • 仅修改 framework.py 中的设备管理相关函数
    • 不改变任何用户可见 API
    • 单线程代码完全不受影响
    • 多线程场景获得线程安全保证
  5. 测试验证

    • 主线程行为不变性测试
    • 子线程设备隔离测试
    • 并发压力测试
    • 设备继承链测试

本次改动解决了多线程推理服务、并行数据处理等场景下的设备竞争问题,同时保持了 Paddle 全局设备管理的简洁性优势。

愿这份代码优化,作为献给飞桨的新春礼物! 🚀

本次提交修复了 Paddle 框架在多线程环境下设备管理的线程安全问题。
@paddle-bot
Copy link

paddle-bot bot commented Feb 16, 2026

你的PR提交成功,感谢你对开源项目的贡献!
请检查PR提交格式和内容是否完备,具体请参考示例模版
Your PR has been submitted. Thanks for your contribution!
Please check its format and content. For this, you can refer to Template and Demo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant