viable/strict/1788202219: [AOTInductor] Fix user-managed constant handle leak (#194480) (#194480)
PyTorch 的 AOTInductor 修复了用户管理的常量句柄泄漏问题。修复前,MaybeOwningAtenTensorHandle 为用户管理的常量创建浅层张量句柄但不拥有它,导致张量包装器及其底层存储引用泄漏。修复后,每个 ConstantMap 条目存储在 RAIIAtenTensorHandle 中,用户管理的常量创建浅层句柄副本并立即转移所有权,保留零拷贝和调用者所有权,同时确保容器拥有的浅层句柄被删除。保留的用户管理句柄在条目被替换或模型容器销毁时释放。此更改保留了 ConstantBufferSet::reset() 和 free_inactive_constant_buffer() 的现有行为,它们继续保留非折叠条目。删除 MaybeOwningAtenTensorHandle 是有意为之。
发展脉络
- 首次出现viable/strict/1788202219: [AOTInductor] Fix user-managed constant handle leak (#194480) (#194480)PyTorch Core
- 当前判断此修复反映了 PyTorch 生态对内存管理正确性的持续关注,尤其是在 AOT 编译场景下。它可能影响依赖 AOTInductor 的推理部署的稳定性,但具体影响范围有限。Agent Pulse · 分析
PyTorch 的 AOTInductor 修复了用户管理的常量句柄泄漏问题。修复前,MaybeOwningAtenTensorHandle 为用户管理的常量创建浅层张量句柄但不拥有它,导致张量包装器及其底层存储引用泄漏。修复后,每个 ConstantMap 条目存储在 RAIIAtenTensorHandle 中,用户管理的常量创建浅层句柄副本并立即转移所有权,保留零拷贝和调用者所有权,同时确保容器拥有的浅层句柄被删除。保留的用户管理句柄在条目被替换或模型容器销毁时释放。此更改保留了 ConstantBufferSet::reset() 和 free_inactive_constant_buffer() 的现有行为,它们继续保留非折叠条目。删除 MaybeOwningAtenTensorHandle 是有意为之。
此修复通过将常量映射条目统一存储在 RAIIAtenTensorHandle 中,消除了用户管理常量句柄的泄漏。它保留了零拷贝语义,同时确保容器拥有的浅层句柄被正确删除。这暗示了在 AOTInductor 中管理张量生命周期的复杂性,以及 RAII 在防止资源泄漏中的重要性。
此修复反映了 PyTorch 生态对内存管理正确性的持续关注,尤其是在 AOT 编译场景下。它可能影响依赖 AOTInductor 的推理部署的稳定性,但具体影响范围有限。
此修复提高了 AOTInductor 的稳定性,减少了内存泄漏,可能降低长期运行推理服务的资源消耗。对于使用 PyTorch AOT 编译的生产环境,这是一个有价值的改进。
未来可能进一步调整 ConstantBufferSet::reset() 和 free_inactive_constant_buffer() 的语义,以更积极地释放非折叠的用户管理句柄,但需要单独讨论和实现。