• 文档 >
  • 模块代码 >
  • torch >
  • torch._inductor
快捷键

torch._inductor 源代码

# mypy: 允许未类型化定义
from 未来 导入 注释

导入 io
导入 记录日志
导入 操作系统
from 打字 导入 任何, IO, 可选, 类型检查, 联合

导入 torch._inductor 配置
导入 torch.fx


如果 类型检查:
    from torch._inductor 工具 导入 输入类型
    from torch.export 导入 导出程序
    from torch 的类型 导入 FileLike

全部 = [
    "编译",
    "沉浸式翻译选项",
    "列表选项",
    标记步骤开始,
]


日志 = 记录.获取日志记录器(__name__)


定义 编译(
    gm: 火炬.fx.GraphModule,
    示例输入: 列表[输入类型]
    选项: 可选[字典[str, 任何]] = ,
):
    ""
使用 TorchInductor 编译给定的 FX 图。这允许编译
没有使用 TorchDynamo 捕获的 FX 图。

参数:
gm: 要编译的 FX 图。
example_inputs: 张量输入的列表。
选项:可选的配置选项字典。请参阅 `torch._inductor.config`。

返回值:
可调用,与 gm 具有相同的行为但速度更快。
    """
    from .compile_fx 导入 编译_fx

    返回 编译_fx(gm, 示例输入, 配置修补=选项)


[文档]定义 aoti_编译和打包( 导出的程序: 导出程序, _已弃用未使用参数=, _已弃用未使用关键字参数=, *, 包路径: 可选[文件类] = , 电感器配置: 可选[字典[str, 任何]] = , ) -> str: "" 使用 AOTInductor 编译导出的程序,并将其打包成.pt2 文件 通过 input package_path 指定的工件。要加载该包,您可以调用 ``torch._inductor.aoti_load_package(package_path)``。 以下是一个示例用法: .. 代码块 :: python ep = torch.export.export(M(), ...) aoti_file = torch._inductor.aoti_compile_and_package( ep, package_path="my_package.pt2" ) compiled_model = torch._inductor.aoti_load_package("my_package.pt2") 要编译并保存多个模型到一个单独的 ``.pt2`` 文件中,你可以这样做: 以下是一个例子: .. 代码块 :: python ep1 = torch.export.export(M1(), ...) aoti_file1 = torch._inductor.aot_compile( ep1, ..., 选项={"aot_inductor.package": True} ) ep2 = torch.export.export(M2(), ...) aoti_file2 = torch._inductor.aot_compile( ep2, ..., 选项={"aot_inductor.package": True} ) 从 torch._inductor.package 导入 package_aoti, load_package package_aoti("my_package.pt2", {"model1": aoti_file1, "model2": aoti_file2}) compiled_model1 = load_package("my_package.pt2", "model1") compiled_model2 = 加载包("my_package.pt2", "model2") 参数: exported_program: 通过 torch.export 调用的导出程序 package_path: 生成.pt2 工件的可选指定路径 inductor_configs: 控制电感器的可选配置字典 返回值: 生成物路径 """ from torch.export 导入 导出程序 from .debug 导入 aot 电感器最小化包装器 如果 isinstance(导出的程序, 导出程序): 抛出 值错误(仅支持 ExportedProgram) 如果 导出的程序.示例输入 : 抛出 运行时错误( "必须设置 exported_program.example_inputs。" "用于 AOTInductor 编译。" ) 如果 _已弃用未使用参数 或者 已弃用未使用的 kwargs : 日志.警告( "您不再需要指定 aoti_compile_and_package 的 args/kwargs," "因为我们可以从导出的 program.example_inputs 中获取这些信息。" ) 断言 ( 软件包路径 或者 ( isinstance(软件包路径, (输入/输出.IO 基础, IO)) 软件包路径.可写的() 包路径.可寻址的() ) 或者 ( isinstance(包路径, (str, os.PathLike)) os.文件系统路径(软件包路径).以...结尾(".pt2") ) ), ( f"期望软件包路径是一个以 .pt2 结尾的文件、为空或是一个缓冲区。然而得到了"{软件包路径}" ) 电感器配置 = 电感器配置 或者 {} 电感器配置["aot_inductor.package"] = 真实 如果 电感器配置.获取("aot_inductor 的输出路径"): 抛出 运行时错误( "请传递一个包路径给 aot_inductor_compile(),而不是设置 aot_inductor.output_path 配置。" "设置 aot_inductor.output_path 配置。" ) aoti_compile_and_package_inner 的包装器。 返回 aot_inductor_minifier_wrapper( _aoti_compile_and_package_inner, 导出的程序, 打包路径=包路径, 电感器配置=电感器配置, )
定义 _aoti 编译与打包内部( gm: 火炬.神经网络.模块, # flat_example_inputs: 列表[任意类型], 参数: 元组[任何] 关键字参数: 可选[字典[str, 任何]] = , *, load_and_run: 布尔值 = False, check_accuracy: 可选[str] = , 包路径: 可选[联合[str, 输入/输出.BytesIO]] = , 传感器配置: 可选[字典[str, 任何]] = , ): "" 请参阅 aoti_compile_and_package 的文档字符串。 如果`load_and_run`为 True,此函数将加载编译后的模型并运行。 这是为了让压缩器检查编译模型的正确性。 如果设置了`check_accuracy`,则此函数将检查编译模型与 gm 的准确性。如果设置了`check_accuracy`,则 kwargs 必须为 None。 "strict_accuracy"表示“每次我们看到任何东西时,我们都会进行压缩”。 “严格准确性”意味着“每次我们看到任何东西时,我们都会进行压缩”。 与“diverges”不同,“accuracy”更为保守,只有当存在有意义的 fp64 diverges 时才会进行压缩 当存在有意义的 fp64 diverges 时 """ 如果 check_accuracy: 断言 kwargs 或者 长度(关键字参数) == 0, ( "在检查准确性时,输入必须已经被展平,且 kwargs 为 None" ) from 包件 导入 包件_奥蒂 断言 isinstance(gm, 火炬.fx.GraphModule) kwargs = kwargs 或者 {} 奥蒂文件 = aot 编译(gm, 参数, 关键字参数, 选项=电感器配置) 断言 isinstance(aoti 文件, 列表) 如果 包路径 : 路径 = [ os.路径.分割扩展名(文件)]0] 对于 文件 源文件 如果 os.路径.splitext(文件)]1] == .so ] 如果 长度(路径) == 0: 路径 = [ os.路径.splitext(文件)]0] 对于 文件 aoti_files 如果 os.路径.splitext(文件)]1] == ".cpp" ] 包路径 = 路径[0] + ".pt2" res = 包标题(软件包路径, 源文件) 断言 res == 软件包路径 如果 加载并运行 或者 检查准确性: 编译模型 = 加载包(包路径) 如果 检查准确性: from torch._dynamo.debug_utils 导入 准确度错误, 相同的两个模型 这可能看起来是倒置的,但实际上并不是。strict_accuracy 意味着“我们将 # 在看到任何偏离的情况时进行最小化”,而准确性则更为 # 保守,只有当存在有意义的 fp64 # 偏差时才会进行最小化 不严格准确度 = 检查准确度 == 准确度 如果 相同的两个模型( gm, 编译模型, 参数, 仅前向=True, 需要双精度浮点数=不严格准确度, 忽略非浮点数=不严格准确度, ): 抛出 准确度错误("检测到准确性差") 否则: 编译模型(*参数, **关键字参数) 返回 包路径
[文档]def aoti_load_package(path: 文件类型, run_single_threaded: bool = False) -> 任意: # 类型: 忽略[type-arg] ```python # 假设输入文本为: input_text = '"""' # 翻译函数(此处仅为示例,实际翻译功能需要调用真实的翻译 API) def translate_to_simplified_chinese(text): # 这里应该调用真实的翻译 API 进行翻译 # 由于示例中不使用真实的 API,以下为模拟翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 加载 PT2 包中的模型。 如果多个模型打包进 PT2,这将加载默认 模型.要加载特定模型,可以直接调用 load API .. 代码块 :: python 从 torch._inductor.package 导入 load_package compiled_model1 = load_package("my_package.pt2", "model1") compiled_model2 = load_package("my_package.pt2", "model2") Args: 路径:.pt2 包的路径 run_single_threaded (bool):是否以单线程模式运行模型 thread synchronization logic:是否使用线程同步逻辑。这有助于避免与 CUDAGraphs. """ 从 torch._inductor.package 导入 load_package 返回 load_package(path, run_single_threaded=run_single_threaded)
定义
aot 编译( gm: 火炬.fx.GraphModule, 参数: 元组[任何] 关键字参数: 可选[字典[str, 任何]] = , *, 选项: 可选[字典[str, 任何]] = , ) -> 联合[str, 列表[str]] "" 使用 TorchInductor 将给定的 FX 图即时编译成共享库。 参数: gm: 要编译的 FX 图。 args: 示例参数 kwargs: 示例关键字参数 options: 可选的配置选项字典。请参阅 `torch._inductor.config`。 返回值: Path to the generated shared library, or a list of files generated by AOTI 如果 aot_inductor.package=True。 TODO:默认返回一个列表 """ from .编译_fx 导入 _aoti_flatten_inputs, 编译_fx_aot 平坦示例输入, 选项 = _aoti 平坦输入( gm, 参数, 关键字参数, 选项=选项 ) 返回 编译_fx_aot( gm, flat_example_inputs, # type: ignore[arg-type] 配置修补=选项, ) 定义 列出模式选项( 模式: 可选[str] = , 动态: 可选[bool] = ) -> 字典[str, 任何] r返回一个字典,描述了每个可用的优化 `torch.compile()` 传入的模式执行。 参数: mode(str,可选):返回优化模式的参数。 如果为 None,则返回所有模式的优化。 dynamic(bool,可选):是否启用动态形状。 示例:: >>> torch._inductor.list_mode_options() """ 模式选项: 字典[str, 字典[str, bool]] = { 默认: {}, # 启用 cudagraphs "减少开销": { triton.cuDAG 图: True, }, 启用最大自调优 "max-autotune-no-cudagraphs": { "max_autotune": True, "坐标下降调优": True, }, 启用 max-autotune 启用 cudagraphs max-autotune: { max_autotune: True, triton.cuDAG 图: True, "坐标下降调优": True, }, } 尝试: 返回 模式选项[模式] 如果 模式 否则 模式选项 除了 键错误 as e: 抛出 运行时错误( f"未识别的模式="{模式}应该是以下之一:{“,”.连接(模式选项.())}" ) from e 定义 列表选项() -> 列表[str] r返回一个描述优化和调试配置的字典 这些都是 `torch.compile()` 可用的选项。 这些选项在 `torch._inductor.config` 中有文档说明。 示例:: >>> torch._inductor.list_options() """ from torch._inductor 导入 配置 当前配置: 字典[str, 任何] = 配置.获取配置副本() 返回 列表(当前配置.()) 定义 cudagraph_mark_step_begin(): 表示即将开始新的推理或训练迭代。 from .cudagraph_trees 导入 标记步骤开始 标记步骤开始()

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源,获取您的疑问解答

查看资源