viable/strict/1787643145: [dynamo] Support types.SimpleNamespace (#193719)
PyTorch Dynamo 新增 SimpleNamespaceVariable 以支持 types.SimpleNamespace,移除 16 个预期失败标记,保留 test_pickle 标记。
发展脉络
- 首次出现viable/strict/1787643145: [dynamo] Support types.SimpleNamespace (#193719)PyTorch Core
- 行业反馈trunk/91655aa6a90a357ee8b47a4ac15ec7257f505526: [dynamo] Support types.SimpleNamespace (#193719)PyTorch Core
- 当前判断PyTorch Dynamo 持续提升 Python 类型覆盖,减少图断裂,增强编译模式下的兼容性,对依赖动态属性的框架有积极影响。Agent Pulse · 分析
PyTorch Dynamo 此前无法处理 types.SimpleNamespace,其 C 级 tp_new 不在 UserDefinedClassVariable.supported_c_new_functions 的允许列表中,导致构造时图断裂,17 个 SimpleNamespaceTests 测试全部在预期失败列表中。该 PR 新增 SimpleNamespaceVariable,建模四个 C 槽位:tp_init、tp_repr、tp_richcompare 和 __replace__,无需内联 Python 源码。由于该类型保留普通实例字典并继承 object 的 __getattribute__、__setattr__ 和 __delattr__,属性访问、__dict__ 和 vars() 可复用现有 UserDefinedObjectVariable 机制。此改动移除了 17 个预期失败标记中的 16 个,test_pickle 因依赖 _pickle.dumps(在跳过列表中)而保留标记。该 PR 为草稿,尚未关联 issue。测试计划包括运行 test_types.py 和 test_user_defined_object.py,并新增 18 个从 CPython SimpleNamespaceTests 移植的测试,这些测试在父提交上全部失败。
该改动通过建模 C 槽位而非内联 Python 源码,扩展了 Dynamo 对 C 扩展类型的支持,可能为其他 C 类型提供参考模式。
PyTorch Dynamo 持续提升 Python 类型覆盖,减少图断裂,增强编译模式下的兼容性,对依赖动态属性的框架有积极影响。
提升 PyTorch 编译模式的可用性,减少用户因图断裂而回退到 eager 模式的情况,降低训练和推理成本,增强 PyTorch 在 AI 框架中的竞争力。
后续可能支持更多 C 类型,并最终移除 test_pickle 的跳过标记,需关注 Dynamo 对 pickle 等序列化操作的支持进展。