如何為 Snapdragon NPU 裝置構建模型資產
這些說明演示瞭如何生成 Llama 3.2 3B 模型。您可以使用相同的說明來生成 Phi-3.5 mini instruct 模型。
設定和先決條件
-
註冊 Qualcomm AI Hub 訪問許可權
註冊後,配置您的 Qualcomm AI Hub API 令牌
按照此處顯示的說明操作:[https://app.aihub.qualcomm.com/docs/hub/getting_started.html#getting-started]
-
註冊以獲取 Llama-3.2-3B 的 HuggingFace 權重
此步驟僅適用於需要簽署許可協議的模型。
-
設定 Linux 環境
此過程中的某些步驟只能在 Linux 上執行。WSL 環境足以滿足要求。
在 Linux 環境中安裝 libc++=dev。
sudo apt get libc++-dev
生成 Qualcomm 上下文二進位制檔案
-
從 Qualcomm AI Hub 安裝模型
python -m pip install -U qai_hub_models[llama-v3-2-3b-chat-quantized] -
生成 QNN 上下文二進位制檔案
生成 QNN 二進位制檔案。此步驟會將模型和二進位制檔案下載並上傳到 Qualcomm AI Hub,並從 Qualcomm AI Hub 下載和上傳,根據您的上傳速度可能需要數小時。
python -m qai_hub_models.models.llama_v3_2_3b_chat_quantized.export --device "Snapdragon X Elite CRD" --skip-inferencing --skip-profiling --output-dir .有關此步驟的更多資訊,請參閱:[https://github.com/quic/ai-hub-apps/tree/main/tutorials/llm_on_genie]。
生成 ONNX 包裝模型
-
從 onnxruntime 倉庫下載以下指令碼
curl -LO https://raw.githubusercontent.com/microsoft/onnxruntime/refs/heads/main/onnxruntime/python/tools/qnn/gen_qnn_ctx_onnx_model.py -
安裝
onnx包pip install onnx -
從 QNN 上下文二進位制檔案(每個模型一次,即每個 .bin 檔案)中提取 QNN 圖資訊
注意:此指令碼僅在安裝了 libc++-dev(來自設定部分)的 Linux 上執行
for bin_file in *.bin; do $QNN_SDK_ROOT/bin/x86_64-linux-clang/qnn-context-binary-utility --context_binary="$bin_file" --json_file="${bin_file%.bin}.json"; done -
生成 ONNX 包裝模型
執行以下命令生成 ONNX 包裝模型
在帶有 Bash 的 Linux 上
for bin_file in *.bin; do python gen_qnn_ctx_onnx_model.py -b "$bin_file" -q "${bin_file%.bin}.json" --quantized_IO --disable_embed_mode; done在帶有 PowerShell 的 Windows 上
Get-ChildItem -Filter "*.bin" | ForEach-Object { $binFile = $_.Name $jsonFile = "$($binFile -replace '\.bin$', '.json')" python gen_qnn_ctx_onnx_model.py -b $binFile -q $jsonFile --quantized_IO --disable_embed_mode }
新增其他資產
從 [https://huggingface.tw/onnx-community/Llama-3.2-3B-instruct-hexagon-npu-assets] 下載資產
檢查模型資產
完成上述說明後,您應該擁有以下模型資產
genai_config.jsontokenizer.jsontokenizer_config.jsonspecial_tokens_map.jsonquantizer.onnxdequantizer.onnxposition-processor.onnx- 一組 Transformer 模型二進位制檔案
- Qualcomm 上下文二進位制檔案 (
*.bin) - 上下文二進位制元資料 (
*.json) - ONNX 包裝模型 (
*.onnx)
- Qualcomm 上下文二進位制檔案 (