如何为 Snapdragon NPU 设备构建模型资产

这些说明演示了生成 Llama 3.2 3B 模型。您可以使用相同的说明来生成 Phi-3.5 mini instruct 模型。

设置和先决条件

  1. 注册 Qualcomm AI Hub 访问权限

    注册后,配置您的 Qualcomm AI hub API 令牌

    按照此处显示的说明操作:[https://app.aihub.qualcomm.com/docs/hub/getting_started.html#getting-started]

  2. 安装 Qualcomm AI Engine Direct SDK

  3. 注册以获取 HuggingFace 权重的访问权限,用于 Llama-3.2-3B

    此步骤仅适用于需要签署许可协议的模型。

  4. 设置 Linux 环境

    此过程中的某些步骤只能在 Linux 上运行。WSL 环境就足够了。

    在 Linux 环境中安装 libc++=dev。

    sudo apt get libc++-dev
    

生成 Qualcomm 上下文二进制文件

  1. 从 Qualcomm AI hub 安装模型

    python -m pip install -U qai_hub_models[llama-v3-2-3b-chat-quantized]
    
  2. 生成 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 包装器模型

  1. 从 onnxruntime 仓库下载以下脚本

    curl -LO https://raw.githubusercontent.com/microsoft/onnxruntime/refs/heads/main/onnxruntime/python/tools/qnn/gen_qnn_ctx_onnx_model.py
    
  2. 安装 onnx

    pip install onnx
    
  3. 从 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
    
  4. 生成 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)