• 文档 >
  • 使用 Vulkan 后端构建和运行 ExecuTorch
快捷方式

使用 Vulkan 后端构建和运行 ExecuTorch

ExecuTorch Vulkan 委托 是 ExecuTorch 的原生 GPU 委托。

您将在本教程中学习什么
  • 如何导出 Stories 110M 参数模型,并进行部分 GPU 委托

  • 如何在 Android 上执行部分委托模型

先决条件

请注意,以下所有步骤都应在 ExecuTorch 存储库根目录中执行,并假设您已完成设置 ExecuTorch 的步骤。

您还应参考 设置 ExecuTorch LLaMA Android 演示应用程序 教程中的 先决条件 部分,以安装指定版本的 Android NDK 和 Android SDK。

# Recommended version is Android NDK r25c.
export ANDROID_NDK=<path_to_ndk>
# Select an appropriate Android ABI
export ANDROID_ABI=arm64-v8a
# All subsequent commands should be performed from ExecuTorch repo root
cd <path_to_executorch_root>
# Make sure adb works
adb --version

将 Stories 110M 模型降级到 Vulkan

注意

生成的模型将仅部分委托给 Vulkan 后端。特别是,只有二元算术运算符(aten.addaten.subaten.mulaten.div)和矩阵乘法运算符(aten.mm)将通过 Vulkan 代理在 GPU 上执行。模型的其余部分将使用可移植运算符执行。这是因为 Vulkan 代理仍处于开发初期,目前运算符覆盖范围有限。

首先,从 Github 下载 stories110M.pttokenizer.model

wget "https://hugging-face.cn/karpathy/tinyllamas/resolve/main/stories110M.pt"
wget "https://raw.githubusercontent.com/karpathy/llama2.c/master/tokenizer.model"

接下来,创建 params 文件

echo '{"dim": 768, "multiple_of": 32, "n_heads": 12, "n_layers": 12, "norm_eps": 1e-05, "vocab_size": 32000}' > params.json

然后,创建一个分词器二进制文件

python -m examples.models.llama2.tokenizer.tokenizer -t tokenizer.model -o tokenizer.bin

最后,将 stories110M.pt 文件导出到 ExecuTorch 程序中

python -m examples.models.llama2.export_llama -c stories110M.pt -p params.json --vulkan

最后一步应该会创建一个 vulkan_llama2.pte 文件。

将分词器二进制文件和 vulkan_llama2.pte 推送到您的 Android 设备

adb mkdir /data/local/tmp/llama/
adb push tokenizer.bin /data/local/tmp/llama/
adb push vulkan_llama2.pte /data/local/tmp/llama/

在 Android 上构建和运行 LLaMA 运行器二进制文件

首先,构建并安装 ExecuTorch 库,然后使用 Android NDK 工具链构建 LLaMA 运行器二进制文件。

(rm -rf cmake-android-out && \
  cmake . -DCMAKE_INSTALL_PREFIX=cmake-android-out \
    -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=$ANDROID_ABI \
    -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
    -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
    -DEXECUTORCH_BUILD_VULKAN=ON \
    -DEXECUTORCH_BUILD_OPTIMIZED=ON \
    -DPYTHON_EXECUTABLE=python \
    -Bcmake-android-out && \
  cmake --build cmake-android-out -j16 --target install)

# Build LLaMA Runner library
(rm -rf cmake-android-out/examples/models/llama2 && \
  cmake examples/models/llama2 \
    -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=$ANDROID_ABI \
    -DCMAKE_INSTALL_PREFIX=cmake-android-out \
    -DPYTHON_EXECUTABLE=python \
    -Bcmake-android-out/examples/models/llama2 && \
  cmake --build cmake-android-out/examples/models/llama2 -j16)

最后,将 llama 运行器二进制文件推送到您的 Android 设备并运行。

adb push cmake-android-out/examples/models/llama2/llama_main /data/local/tmp/llama_main

adb shell /data/local/tmp/llama_main \
    --model_path=/data/local/tmp/llama/vulkan_llama2.pte \
    --tokenizer_path=/data/local/tmp/llama/tokenizer.bin \
    --prompt "hi" \--temperature=0

将生成以下输出

hippo named Hippy lived in a big pond. Hippy was a very happy hippo. He liked to play...

使用 LLaMA Android 演示应用程序运行

您也可以在 LLaMA Android 演示应用程序中运行部分委托的 Vulkan 模型。

首先,对 Android 应用程序设置脚本进行一些修改,以确保在构建和安装 ExecuTorch 库时构建 Vulkan 后端。

# Run from executorch root directory. You can also edit this in a code editor
sed -i 's/-DEXECUTORCH_BUILD_XNNPACK=ON/-DEXECUTORCH_BUILD_XNNPACK=ON -DEXECUTORCH_BUILD_VULKAN=ON/g' examples/demo-apps/android/LlamaDemo/setup.sh

然后,按照 设置 ExecuTorch LLaMA Android 演示应用程序 中的说明,在您的 Android 设备上构建和运行演示应用程序。应用程序启动后,您可以使用该应用程序加载和运行 vulkan_llama2.pte 模型。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源