使用 Vulkan 后端构建和运行 ExecuTorch¶
ExecuTorch Vulkan 委托是 ExecuTorch 的原生 GPU 委托。
如何导出具有部分 GPU 委托的 Llama3.2-1B 参数模型
如何在 Android 上执行部分委托模型
按照设置 ExecuTorch 进行操作
此外,还建议您通读 ExecuTorch Vulkan Delegate 并按照该页面中的示例进行操作
先决条件¶
请注意,以下所有步骤都应从 ExecuTorch 存储库中执行 root 目录,并假设您已完成设置 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 后端。在
特别地,只有二元算术运算符 (, , , ), 矩阵乘法运算符 (, ),
线性图层 () 将通过 Vulkan 在 GPU 上执行
委托。模型的其余部分将使用 Portable 运算符执行。aten.add
aten.sub
aten.mul
aten.div
aten.mm
aten.bmm
aten.linear
Operator 对 LLaMA 模型的支持目前正在积极开发中;请
查看 ExecuTorch 存储库的分支,了解最新功能。main
首先,从 Llama 网站获取模型的 和 文件。consolidated.00.pth
params.json
tokenizer.model
Llama3.2-1B
下载文件后,可以使用该脚本
将 Llama 模型部分降低为 Vulkan。export_llama
# 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
将 tokenizer 二进制文件推送到您的 Android 设备上:vulkan_llama2.pte
adb push ~/.llama/tokenizer.model /data/local/tmp/
adb push vulkan_llama2.pte /data/local/tmp/
在 Android 上构建并运行 LLaMA 运行程序二进制文件¶
首先,构建并安装 ExecuTorch 库,然后构建 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)
最后,在您的 Android 设备上推送并运行 llama runner 二进制文件。请注意, 您的设备必须具有足够的 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"
请注意,由于大量 delegate blob 中的命令,这需要与 每个子图的 GPU。预计性能将随着 的 支持量化。