PyTorch图符号整数
💡
原文英文,约1100词,阅读约需4分钟。
📝
内容提要
在将PyTorch模型转换为图时,控制流可能导致图断裂。使用符号整数(SymInts)可以表示动态形状,允许模型根据输入动态调整。代理张量和直接使用输入张量两种方法各有优缺点,代理张量语法更规范,但可能效率较低。
🎯
关键要点
- 在将PyTorch模型转换为图时,控制流可能导致图断裂。
- 符号整数(SymInts)用于表示动态形状,允许模型根据输入动态调整。
- 使用条件操作如torch.cond可以解决某些图断裂问题,但需要满足特定约束。
- k值必须作为符号整数在图中表示,以允许模型动态形状。
- 如果k值作为Python整数指定,则会被视为常量,无法实现动态形状。
- 使用代理张量可以有效地表示k值,因为其元数据会被视为符号整数。
- PyTorch允许直接使用输入张量指定符号整数,但可能导致图断裂。
- 代理张量方法在语法上更规范,但在处理大k值时可能效率较低。
- 直接使用张量的方法在效率上更优,但可能违反图表示的一般原则。
- 在导出模型时,PyTorch允许在运行时评估k_tensor值,以避免图断裂。
❓
延伸问答
什么是符号整数(SymInts)?
符号整数(SymInts)用于表示可以跨越范围的变量,允许模型根据输入动态调整形状。
如何在PyTorch中使用符号整数来避免图断裂?
可以通过将k值表示为符号整数,使用torch.export导出模型,从而避免图断裂。
代理张量和直接使用输入张量有什么区别?
代理张量在语法上更规范,但处理大k值时效率较低;直接使用输入张量效率更高,但可能导致图断裂。
在导出模型时,如何处理k值以支持动态形状?
k值必须作为符号整数表示,且可以通过代理张量或直接使用输入张量来指定。
使用torch.cond可以解决哪些问题?
使用torch.cond可以解决因控制流导致的图断裂问题,但需满足特定约束。
PyTorch中如何评估k_tensor值以避免图断裂?
PyTorch允许在运行时评估k_tensor值,以确保在图执行前k值已知,从而避免图断裂。
➡️