PyTorch图符号整数

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

在将PyTorch模型转换为图时,控制流可能导致图断裂。使用符号整数(SymInts)可以表示动态形状,允许模型根据输入动态调整。代理张量和直接使用输入张量两种方法各有优缺点,代理张量语法更规范,但可能效率较低。

🎯

关键要点

  • 在将PyTorch模型转换为图时,控制流可能导致图断裂。

  • 符号整数(SymInts)用于表示动态形状,允许模型根据输入动态调整。

  • 使用条件操作如torch.cond可以解决某些图断裂问题,但需要满足特定约束。

  • k值必须作为符号整数在图中表示,以允许模型动态形状。

  • 如果k值作为Python整数指定,则会被视为常量,无法实现动态形状。

  • 使用代理张量可以有效地表示k值,因为其元数据会被视为符号整数。

  • PyTorch允许直接使用输入张量指定符号整数,但可能导致图断裂。

  • 代理张量方法在语法上更规范,但在处理大k值时可能效率较低。

  • 直接使用张量的方法在效率上更优,但可能违反图表示的一般原则。

  • 在导出模型时,PyTorch允许在运行时评估k_tensor值,以避免图断裂。

延伸问答

什么是符号整数(SymInts),它在PyTorch中有什么作用?

符号整数(SymInts)用于表示可以跨越范围的变量,允许模型根据输入动态调整形状。

在PyTorch中,如何避免图断裂的问题?

可以使用条件操作如torch.cond,前提是满足特定约束,或者通过将k值表示为符号整数来解决。

使用代理张量和直接张量指定符号整数有什么区别?

代理张量在语法上更规范,但处理大k值时可能效率较低;直接张量效率更高,但可能导致图断裂。

如果k值作为Python整数指定,会有什么后果?

如果k值作为Python整数指定,图会将其视为常量,无法实现动态形状。

在导出PyTorch模型时,如何处理k_tensor值?

PyTorch允许在运行时评估k_tensor值,以避免图断裂,确保k值在图执行前已知。

使用代理张量的效率问题是什么?

使用代理张量时,如果k值较大,用户需要构造一个大的代理张量,可能导致效率低下。

➡️

继续阅读