目录
1
2
3
4

设置 ExecuTorch

本教程将引导您完成一个端到端示例,该示例将配置 环境,安装 ExecuTorch, 导出模型,最后构建并运行运行时。

您将学到什么
  • 如何设置您的环境以在 ExecuTorch 上工作

  • 如何生成示例 ExecuTorch 程序

  • 如何构建和运行 ExecuTorch 运行时

先决条件

支持的主机环境

我们已经在以下系统上测试了这些说明,尽管它们应该 也适用于具有类似环境的其他系统。

Linux (x86_64)

  • CentOS 8 或更高版本

  • Ubuntu 20.04.6 LTS 或更高版本

  • RHEL 8 或更高版本

  • 运行上述任何功能的适用于 Linux 的 Windows 子系统

macOS (x86_64/M1/M2)

  • Big Sur 或更高版本

最关键的要求是:

  • 能够安装最新版本的 ,如下所述。conda

  • g++版本 8 或更高版本、版本 8 或更高版本或其他版本 支持 GNU C 样式语句的 C++17 兼容工具链 表达式 ( syntax)。clang++({ ... })

请注意,可交叉编译的核心运行时代码支持更广泛的 工具链,低至 C++11。请参阅 Runtime 概述 可移植性详细信息。

设置您的环境

在开始使用 ExecuTorch 之前,您需要设置 环境。这是确保一切运行的重要步骤 平稳高效。我们建议使用 create 和 管理您的虚拟环境。Conda 是一个包管理系统 以及用于 Python 和其他编程语言的环境管理器, 它构建在 Python 包管理器 pip 之上,并提供 一种更方便、更灵活的管理包和环境的方式。 在本节中,您将设置环境并安装 所需的依赖项。condaconda

请执行以下步骤:

  1. 如果您还没有 conda,请按照 conda 安装指南中的步骤。

  2. 克隆存储库:executorch

    git clone --branch v0.1.0 https://github.com/pytorch/executorch.git
    
  3. 更新子模块:

    cd executorch
    git submodule sync
    git submodule update --init
    
  4. 创建并激活 conda 环境:

    conda create -yn executorch python=3.10.0
    conda activate executorch
    

    或者使用 Python 虚拟环境:

    python3 -m venv .executorch
    source .executorch/bin/activate
    
  5. 安装 Cmake

    conda install cmake
    

    或者:

    pip install cmake
    
  6. 安装 ExecuTorch 和依赖项:

    ./install_requirements.sh
    
  7. 公开 FlatBuffers 编译器:

    ExecuTorch 用于导出模型并从 的源代码构建模型。通过将其添加到环境变量 Make it available 或导出为环境变量。 运行以确保安装正确。flatcthird-party/flatbuffers$PATH$FLATC_EXECUTABLE./build/install_flatc.shflatc

您已成功设置环境以使用 ExecuTorch。下一个 步骤是生成一个示例 ExecuTorch 程序。

生成示例 ExecuTorch 程序

设置环境后,您就可以转换程序了 集成到 ExecuTorch 程序中。您需要使用 和 来导出您的程序。然后,您可以将程序另存为 一个文件,这是 ExecuTorch 期望的文件扩展名。演示 如何操作,我们将从 .torch.exportexecutorch.exir.ptenn.Module

您可以使用示例脚本或使用 Python 解释器。

我们创建了演示简单模型的脚本 export 到 FlatBuffer。此脚本可用 在 pytorch/executorch 存储库中。export.py

要生成示例程序,请完成以下步骤:

  1. 运行脚本:export.py

python3 -m examples.portable.scripts.export --model_name="add"
输出
Exported graph:
 graph():
   %arg0_1 : [num_users=3] = placeholder[target=arg0_1]
    %arg1_1 : [num_users=1] = placeholder[target=arg1_1]
    %aten_add_tensor : [num_users=1] = call_function[target=executorch.exir.dialects.edge._ops.aten.add.Tensor](args = (%arg0_1, %arg1_1), kwargs = {})
    %aten_add_tensor_1 : [num_users=1] = call_function[target=executorch.exir.dialects.edge._ops.aten.add.Tensor](args = (%aten_add_tensor, %arg0_1), kwargs = {})
    %aten_add_tensor_2 : [num_users=1] = call_function[target=executorch.exir.dialects.edge._ops.aten.add.Tensor](args = (%aten_add_tensor_1, %arg0_1), kwargs = {})
    %aten_add_tensor_3 : [num_users=1] = call_function[target=executorch.exir.dialects.edge._ops.aten.add.Tensor](args = (%aten_add_tensor_2, %aten_add_tensor_2), kwargs = {})
    return (aten_add_tensor_3,)
Saving exported program to add.pte

此命令已创建一个包含示例程序的文件。add.pte

或者,您可以使用 Python 解释器执行相同的操作:

>>> import executorch.exir as exir
>>> from executorch.exir.tests.models import Mul
>>> m = Mul()
>>> print(exir.capture(m, m.get_random_inputs()).to_edge())
>>> open("mul.pte", "wb").write(exir.capture(m, m.get_random_inputs()).to_edge().to_executorch().buffer)

在此步骤中,您学习了如何将 PyTorch 程序导出到 ExecuTorch 程序。您可以将相同的原则应用于自己的 PyTorch 程序。

下一步是通过设置 Buck2 并构建一个 .executor_runner

构建运行时

导出程序后,您几乎可以运行它了。 下一步涉及使用 Buck2 构建运行时。

Buck2 是一个开源构建系统,使开发人员能够管理 轻松高效地项目依赖项。我们将使用 Buck2 构建 ,这是 ExecuTorch 运行时的示例包装器,其中包括 所有运算符和后端。executor_runner

对于此部分,您将需要以下先决条件:

  • 命令行工具 — 通过运行zstd

    pip3 install zstd
    
  • 命令行工具的版本 - 您可以下载 来自 Buck2 的系统预构建存档 repo 中。请注意, 版本很重要,较新或较旧的版本可能无法与 ExecuTorch 存储库使用的 buck2 prelude 版本。2023-07-18buck2

请完成以下步骤:

  1. 确保 Git 已获取并更新了子模块。这是必要的 每当子模块的提交哈希发生变化时。因此,您需要 要定期将子模块与 upstream 同步:

    cd executorch
    git submodule sync
    git submodule update --init
    
  2. 安装 ExecuTorch 和依赖项:

    ./install_requirements.sh
    
  3. 使用以下命令进行解压缩来配置 Buck2(filename 取决于 在您的系统上):

    # For example, buck2-x86_64-unknown-linux-musl.zst or buck2-aarch64-apple-darwin.zst
    zstd -cdq buck2-DOWNLOADED_FILENAME.zst > /tmp/buck2 && chmod +x /tmp/buck2
    

    您可能希望将二进制文件复制到您的 S 中,以便运行它 如。buck2$PATHbuck2

  4. 构建二进制文件:

    /tmp/buck2 build //examples/portable/executor_runner:executor_runner --show-output
    
    输出
    File changed: root//.git/config.lock
    File changed: root//.git/config
    File changed: root//.git/modules
    27036 additional file change events
    Build ID: e725eb0d-f4a1-484e-b0d3-8133d67b6fdd
    Network: Up:   0 B              Down: 670 KiB
    Command: build.                 Remaining: 340/954. Cache hits: 0%. Time elapsed: 13.2s
    …
    Cache hits: 0%. Commands: 376 (cached: 0, remote: 0, local: 376)
    BUILD SUCCEEDED
    

    如果要直接运行可执行文件,该标志会打印可执行文件的路径。--show-output

现在您已经构建了我们的示例程序,您可以继续 运行它们。

运行您的程序

构建程序后,您就可以运行它了。我们将使用 运行程序的命令。buck run

  1. 运行二进制文件:

    • 要运行该程序:add.pte

      /tmp/buck2 run //examples/portable/executor_runner:executor_runner -- --model_path add.pte
      
      示例输出
      Build ID: 4a23602b-25ba-4b95-a212-3cd077136062
      Network: Up: 0 B  Down: 0 B
      Jobs completed: 3. Time elapsed: 0.0s.
      I 00:00:00.005837 executorch:executor_runner.cpp:75] Model file add.pte is loaded.
      I 00:00:00.005852 executorch:executor_runner.cpp:85] Running method forward
      I 00:00:00.005860 executorch:executor_runner.cpp:140] Setting up non-const buffer 1, size 48.
      I 00:00:00.005909 executorch:executor_runner.cpp:181] Method loaded.
      I 00:00:00.005913 executorch:util.h:104] input already initialized, refilling.
      I 00:00:00.005915 executorch:util.h:104] input already initialized, refilling.
      I 00:00:00.005917 executorch:executor_runner.cpp:186] Inputs prepared.
      I 00:00:00.005949 executorch:executor_runner.cpp:195] Model executed successfully.
      I 00:00:00.005954 executorch:executor_runner.cpp:210] 8.000000
      

或者,您可以直接从路径执行二进制文件 显示在 Build 步骤中。例如,您可以为程序运行以下命令:--show-outputadd.pte

./buck-out/.../executor_runner --model_path add.pte

后续步骤

祝贺!您已成功导出、构建并运行您的第一个 ExecuTorch 程序。现在您已经对 ExecuTorch 如何 Works 中,您可以开始探索其高级特性和功能。这里 是您可能接下来要阅读的部分列表:

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源