genie推理投机采样llama2_ssd的疑问

Merrybeans 2026-03-04 16:53:55

根据tutorial_for_llama2_ssd_auto教程,我生成了QNN context binaries和kv-cache.primary.qnn-htp等模型文件,下一步应该如何在高通8550芯片上执行推理呢?

tutorials的qnn_model_prepare.ipynb注释里提到:

After preparing the LLaMA with SSD models for inference, the next step is to execute the QNN context binaries for inference on a Snapdragon Android device. See qnn_model_execution.ipynb.

但是教程里没有附上对应的qnn_model_execution.ipynb文件。

之前通过llama3_tutorials生成过weight_sharing_.serialized.bin文件,可以通过genie推理。但是ssd技术引入了很多新的模块, genie的config文件应该怎么写呢?下面是之前针对llama3写过的cofig文件。

{
  "dialog" : {
    "version" : 1,
    "type" : "basic",
    "context" : {
      "version" : 1,
      "size": 4096,
      "n-vocab":   128256,
      "bos-token": 128000,
      "eos-token": 128001,
      "eot-token": 128009
    },
    "sampler" : {
      "version" : 1,
      "seed" : 42,
      "temp" : 0.8,
      "top-k" : 40,
      "top-p" : 0.95
    },
    "tokenizer" : {
      "version" : 1,
      "path" : "/models/llama3-8b/tokenizer.json"
    },
    "engine" : {
      "version" : 1,
      "n-threads" : 3,
      "backend" : {
        "version" : 1,
        "type" : "QnnHtp",
        "QnnHtp" : {
          "version" : 1,
          "use-mmap" : false,
          "spill-fill-bufsize" : 0,
          "mmap-budget" : 0,
          "poll" : true,
          "pos-id-dim" : 64,
          "cpu-mask" : "0xe0",
          "kv-dim" : 128,
          "rope-theta": 10000
        },
        "extensions" : "htp_backend_ext_config.json"
      },
      "model" : {
        "version" : 1,
        "type" : "binary",
        "binary" : {
          "version" : 1,
          "ctx-bins" : [
            "/models/llama3-8b/weight_sharing_model_1_of_5.serialized.bin",
            "/models/llama3-8b/weight_sharing_model_2_of_5.serialized.bin",
            "/models/llama3-8b/weight_sharing_model_3_of_5.serialized.bin",
            "/models/llama3-8b/weight_sharing_model_4_of_5.serialized.bin",
            "/models/llama3-8b/weight_sharing_model_5_of_5.serialized.bin"
          ]
        }
      }
    }
  }
}

 

...全文
33 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38498942 03-05 11:03
  • 打赏
  • 举报
回复
  1. 关于缺失的 qnn_model_execution.ipynb
    你说得对,qnn_model_execution.ipynb 确实没有公开在 tutorial_for_llama2_ssd_auto 教程中。这是教程的一个已知缺口。不过,实际的推理执行可以通过 Genie SDK 中的 genie-t2t-run 工具来完成。
  2. Genie SDK 确实支持 SSD 对话
    从 QNN/QAIRT SDK 的 Release Notes 中可以确认:
    v2.28.0 (2024/10/31):"Added SSD support for GenieDialog_embeddingQuery dialogs"
    v2.29.0 (2024/11/30):"Improved prompt processing time for SSD dialogs"
    这说明 Genie SDK 从 v2.28.0 开始就支持了 SSD dialog 类型。
  3. SSD 的 Genie Config 编写指南
    标准的 Llama2 Genie config(无 SSD)如下:
    { "dialog": { "version": 1, "type": "basic", "context": { "version": 1, "size": 1024, "n-vocab": 32000, "bos-token": 1, "eos-token": 2 }, "sampler": { ... }, "tokenizer": { ... }, "engine": { "version": 1, "n-threads": 4, "backend": { "version": 1, "type": "QnnHtp", "QnnHtp": { ... }, "extensions": "htp_backend_ext_config.json" }, "model": { "version": 1, "type": "binary", "binary": { "version": 1, "ctx-bins": ["Llama2_Part1.bin", "Llama2_Part2.bin", ...] } } } }}
    对于 SSD 模型,关键区别在于:
    a) dialog.type 需要改为 "ssd"(而非 "basic"),因为 SSD 需要 Genie 使用投机解码的对话模式。
    b) 你需要将所有生成的 SSD 模块 context binaries 都列入 ctx-bins,包括:
    主模型 (primary) 的分片 bins
    SSD draft head 相关的 bins
    kv-cache.primary.qnn-htp 等 KV cache 模型 bins
    c) 参考 config 模板(需要根据你实际生成的 bin 文件名调整):
    { "dialog": { "version": 1, "type": "ssd", "context": { "version": 1, "size": 1024, "n-vocab": 32000, "bos-token": 1, "eos-token": 2 }, "sampler": { "version": 1, "seed": 42, "temp": 0.8, "top-k": 40, "top-p": 0.95 }, "tokenizer": { "version": 1, "path": "tokenizer.json" }, "engine": { "version": 1, "n-threads": 4, "backend": { "version": 1, "type": "QnnHtp", "QnnHtp": { "version": 1, "spill-fill-bufsize": 0, "use-mmap": true, "mmap-budget": 0, "poll": true, "pos-id-dim": 64, "cpu-mask": "0xe0", "kv-dim": 128, "allow-async-init": false }, "extensions": "htp_backend_ext_config.json" }, "model": { "version": 1, "type": "binary", "binary": { "version": 1, "ctx-bins": [ "kv-cache.primary.qnn-htp.bin", "<其他生成的SSD模块bin文件...>" ] } } } }}
  4. 具体执行步骤(在 8550 上推理)
    确保 QAIRT SDK 版本 >= 2.29.0(建议用最新版),因为 SSD dialog 支持从 2.28.0 开始,2.29.0 有性能优化。
    准备 Genie Bundle 目录:
    genie_bundle/ genie_config.json # SSD 配置文件 htp_backend_ext_config.json # HTP 后端配置 tokenizer.json # 从 HuggingFace 下载 Llama2 的 tokenizer kv-cache.primary.qnn-htp.bin <所有其他SSD模型bin文件>
    HTP 后端配置 - 对于 8550 (Gen 3):
    { "soc_model": 57, "dsp_arch": "v75" }
    推送到设备并执行:

    复制 SDK libraries cp $QNN_SDK_ROOT/lib/hexagon-v75/unsigned/* genie_bundle/ cp $QNN_SDK_ROOT/lib/aarch64-android/* genie_bundle/ cp $QNN_SDK_ROOT/bin/aarch64-android/genie-t2t-run genie_bundle/ # 推送到设备 adb push genie_bundle /data/local/tmp/ adb shell cd /data/local/tmp/genie_bundle export LD_LIBRARY_PATH=$PWD export ADSP_LIBRARY_PATH=$PWD ./genie-t2t-run -c genie_config.json -p "[INST] <>You

7,150

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧