最近我们发现,如果在基于类的迭代器(yield可以正常工作)中使用train_from_iterator
方法,那么通过nanobind绑定的类的全局变量会泄漏。你可以在以下问题中找到详细信息和最小重现代码:
- Environment Issue (Nanobind Error) Natooz/MidiTok#190
- Nanobind Issue Yikai-Liao/symusic#49
- [BUG]: Global Variable of class bound by nanobind might cause memory leak warnings wjakob/nanobind#644
nanobind的维护者表示,nanobind只是检测到这种泄漏,而这并不是nanobind的bug。他在nanobind
文档中说:
与其他工具泄漏引用的交互。Python扩展库——特别是带有C库组件(如PyTorch、Tensorflow等)的大型库——已经观察到泄漏对nanobind对象的引用。
其中一些框架根据调用它们的参数缓存JIT编译的函数,如果这些缓存方案没有被负责的扩展清理(这是一个假设),它们可能会泄漏对nanobind类型的引用。在这种情况下,泄漏将是无害的——即使如此,也应该在负责的框架中修复它,以便不会让泄漏警告与故障混淆,从而使其更广泛地有用。
嗯,我没有在分词器中找到jit。可能还有其他原因,或者可能是cpython的bug。但我希望这不是Python的bug,否则这个bug可能只能在更高版本的Python(3.14或更高版本)中解决。
1条答案
按热度按时间lstz6jyr1#
这个问题已经过期,因为它已经打开了30天,没有活动。请移除过期标签或评论,否则将在5天内关闭。