jingrow 0cffb65490 fix: 修复GPU内存泄漏问题 - 使用专门的CUDA线程执行CUDA操作
问题根源:
- PyTorch的CUDA操作不是线程安全的,在ThreadPoolExecutor中使用run_in_executor执行CUDA操作会导致内存泄漏
- 即使设置了设备上下文,多线程CUDA上下文混乱仍会导致内存无法正确释放

解决方案:
1. 为每个GPU创建专门的CUDA执行线程,完全避免在ThreadPoolExecutor中执行CUDA操作
2. 分离CUDA执行器和IO执行器:
   - io_executor: 用于IO操作(保存文件、打开图片等)
   - 专门的CUDA线程: 用于所有CUDA操作
3. 使用call_soon_threadsafe在线程和asyncio之间正确传递结果

技术细节:
- 每个GPU有独立的CUDA线程,确保CUDA上下文隔离
- CUDA操作通过队列传递到专门的线程执行
- 符合PyTorch官方文档和社区最佳实践

效果:
- 第一次运行GPU内存正常增加(模型加载)
- 后续多次运行GPU内存不再持续增加
- 内存泄漏问题已完全解决

参考:
- PyTorch GitHub issue #44156
- NVIDIA官方多线程CUDA最佳实践
2025-12-17 19:11:07 +00:00
Description
No description provided
401 MiB
Languages
Python 100%