torch.jit.set_fusion_strategy#
- torch.jit.set_fusion_strategy(strategy)[源码]#
设置融合过程中可以发生的特殊化(specializations)的类型和数量。
用法:提供一个由(类型,深度)对组成的列表,其中类型是“STATIC”或“DYNAMIC”之一,深度是整数。
- 行为 - 静态与动态
在 STATIC(静态)融合中,融合后的操作被编译为具有固定的输入形状。形状是根据一些初始的剖析(profiling)运行确定的。在 DYNAMIC(动态)融合中,融合后的操作被编译为具有可变输入形状,因此可能存在多种形状。
在这两种情况下,我们也会在新的跨步(striding)行为、设备或 dtype 出现时重新编译。
- 行为 - 回退函数(fallback functions)与深度(depth)
当输入不匹配特定编译操作所需的格式时,它将运行一个回退函数。回退函数会被递归地编译并根据观察到的张量形状进行特殊化。由于编译可能很慢,“depth”参数用于限制在放弃重新编译并回退到完全未融合、未特殊化的实现之前,可以进行多少次特殊化。
(类型,深度)对的列表控制特殊化的类型和特殊化的数量。例如:[(“STATIC”, 2), (“DYNAMIC”, 2)] 表示前两次特殊化将使用静态融合,接下来的两次特殊化将使用动态融合,任何不满足这 4 种选项的输入都将运行未融合的实现。
注意:未来,如果添加更多融合后端,可能会有针对特定融合器的更细粒度的 API。