评价此页

torch.compiler.set_stance#

torch.compiler.set_stance(stance='default', *, skip_guard_eval_unsafe=False, force_backend=None)[source]#

设置编译器的当前状态。可以用作函数、上下文管理器或装饰器。请勿在 torch.compile 区域内使用此函数,否则会引发错误。

@torch.compile
def foo(x): ...


@torch.compiler.set_stance("force_eager")
def bar():
    # will not be compiled
    foo(...)


bar()

with torch.compiler.set_stance("force_eager"):
    # will also not be compiled
    foo(...)

torch.compiler.set_stance("force_eager")
# will also not be compiled
foo(...)
torch.compiler.set_stance("default")

# will be compiled
foo(...)
参数
  • stance (str) –

    要设置给编译器的状态。有效值如下:

    • ”default”: 默认状态,用于正常编译。

    • ”force_eager”: 忽略所有 torch.compile 指令。

    • ”eager_on_recompile”: 当需要重新编译时,以急切模式运行代码。如果存在对输入有效的缓存编译代码,仍将使用它。

    • ”fail_on_recompile”: 重新编译函数时引发错误。

    • ”eager_then_compile”: 第一次调用时以急切模式运行,然后在此后的调用中编译。这对于动态形状很有益,因为它允许从前两次调用中推断出动态性,而不是在第一次调用时浪费静态编译。

    • ”aot_eager_then_compile”: 第一次调用时以 AOT 急切模式运行,以获得激活检查点的内存优势,然后在此后的调用中编译。与 eager_then_compile 类似,通过避免初始静态编译来改进动态形状的处理。

  • skip_guard_eval_unsafe (bool) –

    一个仅运行区分保护程序的标志。注意——此标志不安全,并且只有在您的设置满足以下条件时才应使用。

    torch.compile 使用保护程序系统来支持重新编译并在运行时选择要运行的已编译工件。这些保护程序虽然高效,但会增加一些开销,在需要优化以获得最小保护程序处理时间的场景中可能会影响性能。此 API 使您能够禁用保护程序评估,假设您已经使用足够多样的输入预热了已编译模型。此假设意味着,在预热阶段之后,将不再需要进一步的重新编译。如果此假设失败,则存在静默产生不正确结果的风险(因此 API 名称中带有“不安全”一词)。

  • force_backend (Optional[Union[str, Callable[[...], Any]]]) – 如果 stance 是 “default”,则此参数可用于强制 torch.compile 使用特定的后端。否则,会引发错误。