• 文件 >
  • 使用 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 Delegate 在 GPU 上執行。 模型的其餘部分將使用 Portable 運算符執行。

目前正在積極開發對 LLaMA 模型的操作符支持;請查看 ExecuTorch 儲存庫的 main 分支,以獲取最新的功能。

首先,從 Llama 網站獲取 Llama3.2-1B 模型的 consolidated.00.pthparams.jsontokenizer.model 檔案。

下載檔案後,可以使用 export_llama 腳本將 Llama 模型部分降低至 Vulkan。

# The files will usually be downloaded to ~/.llama
python -m examples.models.llama.export_llama \
  --disable_dynamic_shape --vulkan -kv --use_sdpa_with_kv_cache -d fp32 \
  --model "llama3_2" \ 
  -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 二進制檔案和 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 運行器二進制檔案。

./install_requirements.sh --clean
(mkdir 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/llama && \
  cmake examples/models/llama \
    -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/llama && \
  cmake --build cmake-android-out/examples/models/llama -j16)

最後,將 llama 運行器二進制檔案推送並運行到您的 Android 裝置上。 請注意,您的裝置必須具有足夠的 GPU 記憶體才能執行模型。

adb push cmake-android-out/examples/models/llama/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"

請注意,由於降低的圖中存在大量委派 blobs,目前模型推論將非常緩慢,這需要為每個子圖在 GPU 之間進行傳輸。 隨著更多的模型可以降低到 Vulkan delegate,並且支持量化等技術,預計性能將會大幅提高。

文件

取得 PyTorch 的完整開發者文件

檢視文件

教學

取得適合初學者和進階開發者的深入教學課程

檢視教學課程

資源

尋找開發資源並取得問題解答

檢視資源