如何为 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]
-
注册以获取 HuggingFace 权重的访问权限,用于 Llama-3.2-3B
此步骤仅适用于需要签署许可协议的模型。
-
设置 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,具体时间取决于您的上传速度,可能需要几个小时。
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 上下文二进制文件中提取 QNN 图信息,每个模型(.bin 文件)执行一次
注意:此脚本仅在安装了 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://hugging-face.cn/onnx-community/Llama-3.2-3B-instruct-hexagon-npu-assets] 下载资产
检查模型资产
完成以上说明后,您应该拥有以下模型资产
genai_config.json
tokenizer.json
tokenizer_config.json
special_tokens_map.json
quantizer.onnx
dequantizer.onnx
position-processor.onnx
- 一组 transformer 模型二进制文件
- Qualcomm 上下文二进制文件 (
*.bin
) - 上下文二进制元数据 (
*.json
) - ONNX 包装器模型 (
*.onnx
)
- Qualcomm 上下文二进制文件 (