设置 ExecuTorch¶
本教程将引导您完成一个端到端示例,该示例将配置 环境,安装 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 之上,并提供
一种更方便、更灵活的管理包和环境的方式。
在本节中,您将设置环境并安装
所需的依赖项。conda
conda
请执行以下步骤:
如果您还没有 conda,请按照 conda 安装指南中的步骤。
克隆存储库:
executorch
git clone --branch v0.1.0 https://github.com/pytorch/executorch.git
更新子模块:
cd executorch git submodule sync git submodule update --init
创建并激活 conda 环境:
conda create -yn executorch python=3.10.0 conda activate executorch
或者使用 Python 虚拟环境:
python3 -m venv .executorch source .executorch/bin/activate
安装 Cmake
conda install cmake
或者:
pip install cmake
安装 ExecuTorch 和依赖项:
./install_requirements.sh
公开 FlatBuffers 编译器:
ExecuTorch 用于导出模型并从 的源代码构建模型。通过将其添加到环境变量 Make it available 或导出为环境变量。 运行以确保安装正确。
flatc
third-party/flatbuffers
$PATH
$FLATC_EXECUTABLE
./build/install_flatc.sh
flatc
您已成功设置环境以使用 ExecuTorch。下一个 步骤是生成一个示例 ExecuTorch 程序。
生成示例 ExecuTorch 程序¶
设置环境后,您就可以转换程序了
集成到 ExecuTorch 程序中。您需要使用 和 来导出您的程序。然后,您可以将程序另存为
一个文件,这是 ExecuTorch 期望的文件扩展名。演示
如何操作,我们将从 .torch.export
executorch.exir
.pte
nn.Module
您可以使用示例脚本或使用 Python 解释器。
我们创建了演示简单模型的脚本
export 到 FlatBuffer。此脚本可用
在 pytorch/executorch 存储库中。export.py
要生成示例程序,请完成以下步骤:
运行脚本:
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-18
buck2
请完成以下步骤:
确保 Git 已获取并更新了子模块。这是必要的 每当子模块的提交哈希发生变化时。因此,您需要 要定期将子模块与 upstream 同步:
cd executorch git submodule sync git submodule update --init
安装 ExecuTorch 和依赖项:
./install_requirements.sh
使用以下命令进行解压缩来配置 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
$PATH
buck2
构建二进制文件:
/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
运行二进制文件:
要运行该程序:
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-output
add.pte
./buck-out/.../executor_runner --model_path add.pte
后续步骤¶
祝贺!您已成功导出、构建并运行您的第一个 ExecuTorch 程序。现在您已经对 ExecuTorch 如何 Works 中,您可以开始探索其高级特性和功能。这里 是您可能接下来要阅读的部分列表:
使用 EXIR 进行高级导出
在 executorch/examples 目录中查看更高级的示例