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

使用 Vulkan 后端构建和运行 ExecuTorch

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

您将在本教程中学习什么
  • 如何导出带有部分 GPU 委托的 Llama3.2-1B 参数模型

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

先决条件

先决条件

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

还假设已安装 Android NDK 和 Android SDK,并且已设置以下环境变量示例。

export ANDROID_NDK=<path_to_ndk>
# Select an appropriate Android ABI for your device
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

将 Llama3.2-1B 模型降低到 Vulkan

注意

生成的模型将仅部分委托给 Vulkan 后端。特别是,只有二元算术运算符(aten.addaten.subaten.mulaten.div)、矩阵乘法运算符(aten.mmaten.bmm)和线性层(aten.linear)将通过 Vulkan 委托在 GPU 上执行。模型的其余部分将使用可移植运算符执行。

LLaMA 模型的运算符支持目前正在积极开发中;请查看 ExecuTorch 代码库的 main 分支以了解最新的功能。

首先,从 Llama 网站 获取 consolidated.00.pthparams.jsontokenizer.model 文件以用于 Llama3.2-1B 模型。

下载完文件后,可以使用 export_llama 脚本将 Llama 模型部分降低到 Vulkan。

# The files will usually be downloaded to ~/.llama
python -m examples.models.llama2.export_llama \
  --disable_dynamic_shape --vulkan -kv --use_sdpa_with_kv_cache -d fp32 \
  -c ~/.llama/checkpoints/Llama3.2-1B/consolidated.00.pth \
  -p ~/.llama/checkpoints/Llama3.2-1B/params.json \
  --metadata '{"get_bos_id":128000, "get_eos_ids":[128009, 128001]}'

运行脚本后,应该会创建一个 vulkan_llama2.pte 文件。

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

adb push ~/.llama/tokenizer.model /data/local/tmp/
adb push vulkan_llama2.pte /data/local/tmp/

在 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_DATA_LOADER=ON \
    -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
    -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
    -DEXECUTORCH_BUILD_VULKAN=ON \
    -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
    -DEXECUTORCH_BUILD_KERNELS_CUSTOM=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 \
    -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
    -DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
    -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 设备并运行。请注意,您的设备必须有足够的 GPU 内存才能执行模型。

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/vulkan_llama2.pte \
    --tokenizer_path=/data/local/tmp/tokenizer.model \
    --prompt "Hello"

请注意,由于降低后的图中存在大量委托 blob,这需要在每个子图之间来回传输到 GPU,因此当前模型推理速度非常慢。随着更多模型可以降低到 Vulkan 委托,并且支持诸如量化之类的技术,性能预计将大幅提高。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源